buckyos 0.7.140 → 0.7.142

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.
Files changed (44) hide show
  1. package/cli/core/auth.ts +2 -3
  2. package/cli/dist/cli.mjs +3 -4
  3. package/cli/dist/cli.mjs.map +1 -1
  4. package/cli/version.ts +1 -1
  5. package/dist/account.d.ts +0 -2
  6. package/dist/account.d.ts.map +1 -1
  7. package/dist/browser.cjs +1 -1
  8. package/dist/browser.mjs +14 -15
  9. package/dist/{executor_client-978a8e1b.js → executor_client-b3ff97ba.js} +8 -8
  10. package/dist/executor_client-b3ff97ba.js.map +1 -0
  11. package/dist/{executor_client-d2c9e854.mjs → executor_client-eb372968.mjs} +56 -152
  12. package/dist/executor_client-eb372968.mjs.map +1 -0
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.mjs +14 -15
  15. package/dist/namelib.d.ts +1 -10
  16. package/dist/namelib.d.ts.map +1 -1
  17. package/dist/ndn_types-08dc9ef1.js +2 -0
  18. package/dist/ndn_types-08dc9ef1.js.map +1 -0
  19. package/dist/{ndn_types-dcb74613.mjs → ndn_types-bbb1f6a6.mjs} +54 -101
  20. package/dist/ndn_types-bbb1f6a6.mjs.map +1 -0
  21. package/dist/node.cjs +1 -1
  22. package/dist/node.mjs +14 -15
  23. package/dist/provision.cjs +2 -2
  24. package/dist/provision.cjs.map +1 -1
  25. package/dist/provision.mjs +18 -12
  26. package/dist/provision.mjs.map +1 -1
  27. package/dist/provision_activate.d.ts.map +1 -1
  28. package/dist/runtime.d.ts +1 -4
  29. package/dist/runtime.d.ts.map +1 -1
  30. package/dist/sdk_core.d.ts.map +1 -1
  31. package/dist/{tus_client-a2f73d53.js → tus_client-65c5fc5e.js} +2 -2
  32. package/dist/{tus_client-a2f73d53.js.map → tus_client-65c5fc5e.js.map} +1 -1
  33. package/dist/{tus_client-8fd4d937.mjs → tus_client-d313689e.mjs} +2 -2
  34. package/dist/{tus_client-8fd4d937.mjs.map → tus_client-d313689e.mjs.map} +1 -1
  35. package/dist/types.d.ts +0 -9
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/verify-hub-client.d.ts +1 -9
  38. package/dist/verify-hub-client.d.ts.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/executor_client-978a8e1b.js.map +0 -1
  41. package/dist/executor_client-d2c9e854.mjs.map +0 -1
  42. package/dist/ndn_types-324121ae.js +0 -2
  43. package/dist/ndn_types-324121ae.js.map +0 -1
  44. package/dist/ndn_types-dcb74613.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","sources":["../core/command.ts","../core/errors.ts","../core/argv.ts","../runtime/host.ts","../core/config.ts","../core/runtime.ts","../core/development_mode.ts","../core/identity.ts","../core/auth.ts","../core/output.ts","../core/registry.ts","../core/history.ts","../core/repl.ts","../modules/auth.ts","../modules/core.ts","../core/service.ts","../modules/system.ts","../modules/system_config.ts","../modules/pikg_archive.ts","../modules/pikg_protocol.ts","../version.ts","../modules/pikg.ts","../core/task.ts","../modules/app.ts","../core/download.ts","../modules/diagnostic.ts","../modules/log.ts","../modules/task.ts","../modules/provision.ts","../modules/skill.ts","../modules/agent.ts","../modules/ai.ts","../modules/share.ts","../modules/executor.ts","../modules/aiws.ts","../core/app.ts","../main.ts","../runtime/path_policy.ts","../runtime/host_node.ts","../runtime/node_entry.ts"],"sourcesContent":["import type { CommandContext } from './context.ts'\n\nexport type JsonSchema = {\n type?: 'object' | 'array' | 'string' | 'boolean' | 'integer' | 'number' | 'null'\n title?: string\n description?: string\n properties?: Record<string, JsonSchema>\n required?: string[]\n additionalProperties?: boolean\n items?: JsonSchema\n enum?: unknown[]\n minLength?: number\n minimum?: number\n default?: unknown\n secret?: boolean\n}\n\nexport interface PositionalDefinition {\n name: string\n description: string\n required?: boolean\n}\n\nexport interface OptionDefinition {\n name: string\n property?: string\n description: string\n type: 'string' | 'boolean' | 'integer' | 'number'\n required?: boolean\n secret?: boolean\n enum?: string[]\n}\n\nexport type AccessLevel = 'read' | 'write' | 'destructive' | 'privileged'\n\nexport type AccessPolicy =\n | { mode: 'fixed'; level: AccessLevel }\n | { mode: 'operation'; operationIdField: string; possibleLevels: AccessLevel[] }\n\nexport interface CommandDefinition {\n verb: string\n summary: string\n description?: string\n positionals?: PositionalDefinition[]\n options?: OptionDefinition[]\n inputSchema: JsonSchema\n outputSchema: JsonSchema\n resultSchemaVersion: number\n access: AccessPolicy\n asyncMode: 'sync' | 'task' | 'either' | 'stream'\n requiresSession: boolean\n execution?: 'local' | 'service'\n networkAccess?: boolean\n examples?: string[]\n supportsRawOutput?: boolean\n handler(ctx: CommandContext, input: Record<string, unknown>): Promise<unknown>\n}\n\nexport interface CommandModule {\n name: string\n summary: string\n commands: CommandDefinition[]\n}\n\nexport interface RegisteredCommand extends CommandDefinition {\n module: string\n moduleSummary: string\n}\n\nexport function optionProperty(option: OptionDefinition): string {\n return option.property ?? option.name.replaceAll('-', '_')\n}\n","export const EXIT_SUCCESS = 0\nexport const EXIT_USAGE = 2\nexport const EXIT_AUTH = 3\nexport const EXIT_PERMISSION = 4\nexport const EXIT_UNAVAILABLE = 5\nexport const EXIT_OPERATION = 6\nexport const EXIT_PARTIAL = 7\nexport const EXIT_TIMEOUT = 8\nexport const EXIT_INTERNAL = 9\n\nexport class ToolError extends Error {\n readonly code: string\n readonly exitCode: number\n readonly retryable: boolean\n readonly details: Record<string, unknown>\n\n constructor(\n code: string,\n message: string,\n exitCode = EXIT_OPERATION,\n retryable = false,\n details: Record<string, unknown> = {},\n ) {\n super(message)\n this.name = 'ToolError'\n this.code = code\n this.exitCode = exitCode\n this.retryable = retryable\n this.details = details\n }\n}\n\nexport class UsageError extends ToolError {\n constructor(code: string, message: string, details: Record<string, unknown> = {}) {\n super(code, message, EXIT_USAGE, false, details)\n }\n}\n\nconst JWT_PATTERN = /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\b/g\nconst URL_CREDENTIAL_PATTERN = /(\\w+:\\/\\/)[^\\s/@:]+:[^\\s/@]+@/g\nconst DATABASE_URI_PATTERN =\n /\\b(?:postgres(?:ql)?|mysql|mariadb|mongodb(?:\\+srv)?|redis|rediss|sqlite):\\/\\/[^\\s,;]+/gi\n\nexport function sanitizeMessage(message: string): string {\n return message\n .replaceAll(JWT_PATTERN, '[REDACTED_TOKEN]')\n .replaceAll(URL_CREDENTIAL_PATTERN, '$1[REDACTED]@')\n .replaceAll(DATABASE_URI_PATTERN, '[REDACTED_DATABASE_URI]')\n .replace(\n /(session[_-]?token|refresh[_-]?token|access[_-]?token|private[_-]?key|password|passwd|api[_-]?key|client[_-]?secret|secret)\\s*[=:]\\s*[^\\s,;]+/gi,\n '$1=[REDACTED]',\n )\n}\n\nexport function normalizeError(error: unknown): ToolError {\n if (error instanceof ToolError) {\n return new ToolError(\n error.code,\n sanitizeMessage(error.message),\n error.exitCode,\n error.retryable,\n error.details,\n )\n }\n\n const raw = error instanceof Error ? error.message : String(error)\n const message = sanitizeMessage(raw)\n const lower = message.toLowerCase()\n\n if (lower.includes('abort') || lower.includes('cancel')) {\n return new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT)\n }\n if (lower.includes('timeout') || lower.includes('timed out')) {\n return new ToolError('TIMEOUT', 'operation timed out', EXIT_TIMEOUT, true)\n }\n if (\n lower.includes('permission denied') || lower.includes('no permission') ||\n lower.includes('rpc call error: 403')\n ) {\n return new ToolError('PERMISSION_DENIED', message, EXIT_PERMISSION)\n }\n if (\n lower.includes('rpc call error: 401') || lower.includes('unauthorized') ||\n lower.includes('token expired') || lower.includes('session expired') ||\n lower.includes('invalid token')\n ) {\n return new ToolError(\n lower.includes('expired') ? 'SESSION_EXPIRED' : 'INVALID_SESSION',\n lower.includes('expired') ? 'the session token has expired' : message,\n EXIT_AUTH,\n )\n }\n if (\n lower.includes('fetch failed') || lower.includes('connection refused') ||\n lower.includes('rpc call error: 502') || lower.includes('rpc call error: 503') ||\n lower.includes('rpc call error: 504')\n ) {\n return new ToolError('SERVICE_UNAVAILABLE', message, EXIT_UNAVAILABLE, true)\n }\n if (lower.includes('not found') || lower.includes('key not exist')) {\n return new ToolError('RESOURCE_NOT_FOUND', message, EXIT_OPERATION)\n }\n if (lower.includes('rpc call error:')) {\n return new ToolError('OPERATION_FAILED', message, EXIT_OPERATION)\n }\n return new ToolError('INTERNAL_ERROR', message || 'internal error', EXIT_INTERNAL)\n}\n","import type { JsonSchema, RegisteredCommand } from './command.ts'\nimport { optionProperty } from './command.ts'\nimport { UsageError } from './errors.ts'\n\nexport const OUTPUT_FORMATS = ['json', 'jsonl', 'table', 'text', 'raw'] as const\nexport type OutputFormat = typeof OUTPUT_FORMATS[number]\n\nexport interface GlobalOptions {\n configDir?: string\n allowRead?: string[]\n profile?: string\n zone?: string\n endpoint?: string\n identity?: string\n sessionToken?: string\n sessionTokenFile?: string\n cli?: boolean\n output?: OutputFormat\n input?: string\n timeout?: string\n traceId?: string\n idempotencyKey?: string\n wait?: boolean\n nonInteractive?: boolean\n yes?: boolean\n noColor?: boolean\n verbose?: boolean\n help?: boolean\n version?: boolean\n}\n\nexport interface Invocation {\n global: GlobalOptions\n module?: string\n verb?: string\n actionArgv: string[]\n}\n\nexport interface ParsedCommandArgs {\n input: Record<string, unknown>\n scoped: GlobalOptions\n help: boolean\n}\n\nconst STRING_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['config-dir', 'configDir'],\n ['profile', 'profile'],\n ['zone', 'zone'],\n ['endpoint', 'endpoint'],\n ['identity', 'identity'],\n ['session-token', 'sessionToken'],\n ['session-token-file', 'sessionTokenFile'],\n ['output', 'output'],\n ['input', 'input'],\n ['timeout', 'timeout'],\n ['trace-id', 'traceId'],\n ['idempotency-key', 'idempotencyKey'],\n])\n\nconst REPEATABLE_STRING_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['allow-read', 'allowRead'],\n])\n\nconst BOOLEAN_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['cli', 'cli'],\n ['wait', 'wait'],\n ['non-interactive', 'nonInteractive'],\n ['yes', 'yes'],\n ['no-color', 'noColor'],\n ['verbose', 'verbose'],\n ['help', 'help'],\n ['version', 'version'],\n])\n\nconst REPL_SCOPED_STRING_GLOBALS = new Set([\n 'input',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'output',\n])\nconst REPL_SCOPED_BOOLEAN_GLOBALS = new Set(['wait', 'yes'])\n\nexport function parseInvocation(argv: string[]): Invocation {\n const global: GlobalOptions = {}\n let index = 0\n while (index < argv.length) {\n const token = argv[index]\n if (token === '-h') {\n setGlobal(global, 'help', true)\n index += 1\n continue\n }\n if (token === '--') {\n index += 1\n break\n }\n if (!token.startsWith('--')) break\n const parsed = splitLongOption(token)\n const booleanProperty = BOOLEAN_GLOBALS.get(parsed.name)\n if (booleanProperty) {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n setGlobal(global, booleanProperty, true)\n index += 1\n continue\n }\n const stringProperty = STRING_GLOBALS.get(parsed.name)\n const repeatableStringProperty = REPEATABLE_STRING_GLOBALS.get(parsed.name)\n if (!stringProperty && !repeatableStringProperty) {\n throw new UsageError('UNKNOWN_OPTION', `unknown global option: --${parsed.name}`)\n }\n const { value, consumed } = readOptionValue(argv, index, parsed)\n if (repeatableStringProperty === 'allowRead') {\n global.allowRead = [...(global.allowRead ?? []), value]\n } else {\n setGlobal(global, stringProperty!, normalizeGlobalValue(parsed.name, value))\n }\n index += consumed\n }\n\n const module = argv[index]\n const verb = argv[index + 1]\n const actionArgv = module ? argv.slice(index + (verb ? 2 : 1)) : []\n if (module?.startsWith('-')) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `global options must appear before the module: ${module}`,\n )\n }\n return { global, module, verb, actionArgv }\n}\n\nexport function parseCommandArgs(\n command: RegisteredCommand,\n argv: string[],\n inputObject: Record<string, unknown> | undefined,\n allowReplScopedGlobals = false,\n deferValidation = false,\n): ParsedCommandArgs {\n const cliInput: Record<string, unknown> = {}\n const scoped: GlobalOptions = {}\n const positionals = command.positionals ?? []\n const optionByName = new Map((command.options ?? []).map((option) => [option.name, option]))\n let positionalIndex = 0\n let help = false\n\n for (let index = 0; index < argv.length;) {\n const token = argv[index]\n if (token === '--help' || token === '-h') {\n help = true\n index += 1\n continue\n }\n if (token === '--') {\n for (const positionalValue of argv.slice(index + 1)) {\n positionalIndex = assignPositional(\n cliInput,\n positionals,\n positionalIndex,\n positionalValue,\n )\n }\n break\n }\n if (!token.startsWith('--')) {\n positionalIndex = assignPositional(cliInput, positionals, positionalIndex, token)\n index += 1\n continue\n }\n\n const parsed = splitLongOption(token)\n if (allowReplScopedGlobals && REPL_SCOPED_BOOLEAN_GLOBALS.has(parsed.name)) {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n const property = BOOLEAN_GLOBALS.get(parsed.name)!\n setGlobal(scoped, property, true)\n index += 1\n continue\n }\n if (allowReplScopedGlobals && REPL_SCOPED_STRING_GLOBALS.has(parsed.name)) {\n const property = STRING_GLOBALS.get(parsed.name)!\n const { value, consumed } = readOptionValue(argv, index, parsed)\n setGlobal(scoped, property, normalizeGlobalValue(parsed.name, value))\n index += consumed\n continue\n }\n if (\n allowReplScopedGlobals &&\n (STRING_GLOBALS.has(parsed.name) || REPEATABLE_STRING_GLOBALS.has(parsed.name) ||\n BOOLEAN_GLOBALS.has(parsed.name))\n ) {\n throw new UsageError(\n 'SESSION_OPTION_FROZEN',\n `--${parsed.name} is frozen for the interactive session`,\n )\n }\n\n const option = optionByName.get(parsed.name)\n if (!option) throw new UsageError('UNKNOWN_OPTION', `unknown option: --${parsed.name}`)\n const property = optionProperty(option)\n if (Object.hasOwn(cliInput, property)) {\n throw new UsageError('DUPLICATE_ARGUMENT', `argument provided more than once: ${property}`)\n }\n if (option.type === 'boolean') {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n cliInput[property] = true\n index += 1\n continue\n }\n const { value, consumed } = readOptionValue(argv, index, parsed)\n cliInput[property] = parseOptionValue(option.type, value, parsed.name)\n index += consumed\n }\n\n for (let index = positionalIndex; !deferValidation && index < positionals.length; index++) {\n if (\n positionals[index].required !== false &&\n !Object.hasOwn(inputObject ?? {}, positionals[index].name)\n ) {\n throw new UsageError(\n 'MISSING_ARGUMENT',\n `missing positional argument: ${positionals[index].name}`,\n )\n }\n }\n\n const input = mergeCommandInput(inputObject, cliInput)\n if (!deferValidation) validateSchema(input, command.inputSchema, 'input')\n return { input, scoped, help }\n}\n\nexport function parseDuration(value: string): number {\n const match = /^(\\d+)(ms|s|m|h)$/.exec(value.trim())\n if (!match) {\n throw new UsageError('INVALID_DURATION', `invalid duration: ${value}`)\n }\n const amount = Number(match[1])\n const scale = match[2] === 'ms'\n ? 1\n : match[2] === 's'\n ? 1_000\n : match[2] === 'm'\n ? 60_000\n : 3_600_000\n const result = amount * scale\n if (!Number.isSafeInteger(result) || result <= 0) {\n throw new UsageError('INVALID_DURATION', `invalid duration: ${value}`)\n }\n return result\n}\n\nexport function parseShellLine(line: string): string[] {\n const tokens: string[] = []\n let current = ''\n let quote: 'single' | 'double' | null = null\n let escaped = false\n let started = false\n\n for (const character of line) {\n if (escaped) {\n current += character\n escaped = false\n started = true\n continue\n }\n if (character === '\\\\' && quote !== 'single') {\n escaped = true\n started = true\n continue\n }\n if (quote === 'single') {\n if (character === \"'\") quote = null\n else current += character\n continue\n }\n if (quote === 'double') {\n if (character === '\"') quote = null\n else current += character\n continue\n }\n if (character === \"'\") {\n quote = 'single'\n started = true\n continue\n }\n if (character === '\"') {\n quote = 'double'\n started = true\n continue\n }\n if (/\\s/.test(character)) {\n if (started) {\n tokens.push(current)\n current = ''\n started = false\n }\n continue\n }\n current += character\n started = true\n }\n if (escaped) throw new UsageError('INVALID_COMMAND_LINE', 'unfinished escape sequence')\n if (quote) throw new UsageError('INVALID_COMMAND_LINE', `unterminated ${quote} quote`)\n if (started) tokens.push(current)\n return tokens\n}\n\nexport function validateSchema(value: unknown, schema: JsonSchema, path: string): void {\n if (schema.enum && !schema.enum.some((candidate) => Object.is(candidate, value))) {\n throw new UsageError(\n 'SCHEMA_VALIDATION_FAILED',\n `${path} must be one of ${schema.enum.join(', ')}`,\n )\n }\n if (schema.type === 'object') {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an object`)\n }\n const object = value as Record<string, unknown>\n for (const required of schema.required ?? []) {\n if (!Object.hasOwn(object, required)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path}.${required} is required`)\n }\n }\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(object)) {\n if (!Object.hasOwn(schema.properties ?? {}, key)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path}.${key} is not allowed`)\n }\n }\n }\n for (const [key, propertyValue] of Object.entries(object)) {\n const propertySchema = schema.properties?.[key]\n if (propertySchema) validateSchema(propertyValue, propertySchema, `${path}.${key}`)\n }\n return\n }\n if (schema.type === 'array') {\n if (!Array.isArray(value)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an array`)\n }\n if (schema.items) {\n value.forEach((item, index) => validateSchema(item, schema.items!, `${path}[${index}]`))\n }\n return\n }\n if (schema.type === 'string') {\n if (typeof value !== 'string') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a string`)\n }\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} is too short`)\n }\n return\n }\n if (schema.type === 'boolean' && typeof value !== 'boolean') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a boolean`)\n }\n if (schema.type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an integer`)\n }\n if (schema.type === 'number' && typeof value !== 'number') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a number`)\n }\n}\n\nfunction assignPositional(\n input: Record<string, unknown>,\n positionals: NonNullable<RegisteredCommand['positionals']>,\n index: number,\n value: string,\n): number {\n const positional = positionals[index]\n if (!positional) {\n throw new UsageError('TOO_MANY_ARGUMENTS', `unexpected positional argument: ${value}`)\n }\n input[positional.name] = value\n return index + 1\n}\n\nfunction splitLongOption(token: string): { name: string; inlineValue?: string } {\n const content = token.slice(2)\n const equalIndex = content.indexOf('=')\n return equalIndex < 0\n ? { name: content }\n : { name: content.slice(0, equalIndex), inlineValue: content.slice(equalIndex + 1) }\n}\n\nfunction readOptionValue(\n argv: string[],\n index: number,\n option: { name: string; inlineValue?: string },\n): { value: string; consumed: number } {\n if (option.inlineValue !== undefined) {\n if (!option.inlineValue) {\n throw new UsageError('MISSING_ARGUMENT', `--${option.name} requires a value`)\n }\n return { value: option.inlineValue, consumed: 1 }\n }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n throw new UsageError('MISSING_ARGUMENT', `--${option.name} requires a value`)\n }\n return { value, consumed: 2 }\n}\n\nfunction parseOptionValue(type: string, value: string, name: string): unknown {\n if (type === 'string') return value\n const number = Number(value)\n if (!Number.isFinite(number) || (type === 'integer' && !Number.isInteger(number))) {\n throw new UsageError('INVALID_ARGUMENT', `--${name} requires a ${type}`)\n }\n return number\n}\n\nfunction mergeCommandInput(\n inputObject: Record<string, unknown> | undefined,\n cliInput: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...(inputObject ?? {}) }\n for (const [key, value] of Object.entries(cliInput)) {\n if (Object.hasOwn(result, key)) {\n throw new UsageError('ARGUMENT_CONFLICT', `${key} is present in both --input and argv`)\n }\n result[key] = value\n }\n return result\n}\n\nfunction normalizeGlobalValue(name: string, value: string): string | OutputFormat {\n if (name === 'output') {\n if (!OUTPUT_FORMATS.includes(value as OutputFormat)) {\n throw new UsageError('INVALID_OUTPUT_FORMAT', `invalid output format: ${value}`)\n }\n return value as OutputFormat\n }\n return value\n}\n\nfunction setGlobal<K extends keyof GlobalOptions>(\n target: GlobalOptions,\n property: K,\n value: GlobalOptions[K],\n): void {\n if (target[property] !== undefined) {\n throw new UsageError('DUPLICATE_ARGUMENT', `option provided more than once: ${property}`)\n }\n target[property] = value\n}\n","export type HostKind = 'node' | 'deno'\nexport type DistributionKind = 'developer' | 'system'\nexport type HostErrorCode =\n | 'NotFound'\n | 'PermissionDenied'\n | 'AlreadyExists'\n | 'InvalidInput'\n | 'Unknown'\n\nexport class HostError extends Error {\n readonly code: HostErrorCode\n readonly path?: string\n\n constructor(code: HostErrorCode, message: string, path?: string, cause?: unknown) {\n super(message, { cause })\n this.name = 'HostError'\n this.code = code\n this.path = path\n }\n}\n\nexport function isHostError(error: unknown, code: HostErrorCode): error is HostError {\n return error instanceof HostError && error.code === code\n}\n\nexport interface HostFileInfo {\n isFile: boolean\n isDirectory: boolean\n isSymlink: boolean\n size: number\n mode: number | null\n mtime: Date | null\n dev: number | null\n ino: number | null\n}\n\nexport interface HostDirEntry {\n name: string\n isFile: boolean\n isDirectory: boolean\n isSymlink: boolean\n}\n\nexport interface HostFile {\n read(buffer: Uint8Array): Promise<number | null>\n write(buffer: Uint8Array): Promise<number>\n seek(offset: number): Promise<number>\n stat(): Promise<HostFileInfo>\n sync(): Promise<void>\n close(): Promise<void>\n}\n\nexport interface HostHash {\n update(bytes: Uint8Array): void\n digestHex(): string\n}\n\nexport interface HostCommandOutput {\n success: boolean\n code: number\n stdout: Uint8Array\n stderr: Uint8Array\n}\n\nexport interface HostPath {\n readonly sep: string\n basename(path: string): string\n dirname(path: string): string\n isAbsolute(path: string): boolean\n join(...parts: string[]): string\n relative(from: string, to: string): string\n resolve(...parts: string[]): string\n parse(path: string): { root: string; dir: string; base: string; ext: string; name: string }\n}\n\nexport interface DistributionPolicy {\n readonly name: 'developer-default' | 'system-default'\n readonly distribution: DistributionKind\n readonly packageRoot: string\n readonly readPaths: readonly string[]\n readonly writePaths: readonly string[]\n readonly environment: readonly string[]\n readonly subprocesses: readonly string[]\n readonly network: boolean\n readonly buckyosRoot?: string\n}\n\nexport interface ToolHost {\n readonly kind: HostKind\n readonly runtimeName: string\n readonly runtimeVersion: string\n readonly platform: string\n readonly arch: string\n readonly pid: number\n readonly executable: string\n readonly runtimeExecutable: string\n readonly policy: DistributionPolicy\n readonly path: HostPath\n\n cwd(): string\n homeDir(): string\n env(name: string): string | undefined\n exit(code: number): never\n setExitCode(code: number): void\n\n readTextFile(path: string): Promise<string>\n readFile(path: string): Promise<Uint8Array>\n writeTextFile(\n path: string,\n value: string,\n options?: { createNew?: boolean; mode?: number },\n ): Promise<void>\n writeFile(\n path: string,\n value: Uint8Array,\n options?: { createNew?: boolean; mode?: number },\n ): Promise<void>\n readDir(path: string): Promise<HostDirEntry[]>\n stat(path: string): Promise<HostFileInfo>\n lstat(path: string): Promise<HostFileInfo>\n realPath(path: string): Promise<string>\n makeTempDir(options?: { dir?: string; prefix?: string }): Promise<string>\n makeTempFile(options?: { dir?: string; prefix?: string }): Promise<string>\n rename(from: string, to: string): Promise<void>\n remove(path: string, options?: { recursive?: boolean }): Promise<void>\n mkdir(path: string, options?: { recursive?: boolean; mode?: number }): Promise<void>\n chmod(path: string, mode: number): Promise<void>\n symlink(target: string, path: string): Promise<void>\n copyFile(from: string, to: string): Promise<void>\n open(\n path: string,\n options: { read?: boolean; write?: boolean; createNew?: boolean; mode?: number },\n ): Promise<HostFile>\n\n // Policy check without a filesystem side effect: rejects paths outside the\n // distribution policy (or escaping it through symlinks) with PermissionDenied.\n assertAccess(path: string, operation: 'read' | 'write'): Promise<void>\n\n createHash(algorithm: 'sha256'): HostHash\n gzipFile(source: string, destination: string): Promise<void>\n run(command: string, args: string[]): Promise<HostCommandOutput>\n runGzip(command: string, args: string[], destination: string): Promise<HostCommandOutput>\n\n stdout(value: string | Uint8Array): Promise<void>\n stderr(value: string | Uint8Array): Promise<void>\n readStdin(): Promise<string>\n readLine(prompt: string): Promise<string | null>\n readSecret(prompt: string): Promise<string>\n inputIsTerminal(): boolean\n createLineReader(options: {\n history: string[]\n historySize: number\n completer(line: string): [string[], string]\n onSigint(): void\n }): HostLineReader\n}\n\nexport interface HostLineReader extends AsyncIterable<string> {\n write(value: string): void\n setPrompt(value: string): void\n prompt(): void\n close(): void\n}\n\nlet activeHost: ToolHost | undefined\n\nexport function installHost(host: ToolHost): void {\n if (activeHost && activeHost !== host) throw new Error('CLI host is already installed')\n activeHost = host\n}\n\nexport function getHost(): ToolHost {\n if (!activeHost) throw new Error('CLI host was not injected by a launcher')\n return activeHost\n}\n\nexport function resetHostForTest(): void {\n activeHost = undefined\n}\n\nexport const TOOL_ENVIRONMENT_NAMES = [\n 'HOME',\n 'USERPROFILE',\n 'APPDATA',\n 'BUCKYOS_TOOL_CONFIG_DIR',\n 'BUCKYOS_TOOL_PROFILE',\n 'BUCKYOS_TOOL_ZONE',\n 'BUCKYOS_TOOL_ENDPOINT',\n 'BUCKYOS_TOOL_IDENTITY',\n 'BUCKYOS_TOOL_OUTPUT',\n 'BUCKYOS_APPCLIENT_SESSION_TOKEN',\n 'BUCKYOS_ROOT',\n 'SOURCE_DATE_EPOCH',\n] as const\n\ninterface PolicyOptions {\n distribution: DistributionKind\n argv: string[]\n cwd: string\n packageRoot: string\n homeDir: string\n environment: Record<string, string | undefined>\n path: HostPath\n buckyosRoot?: string\n}\n\nexport function buildDistributionPolicy(options: PolicyOptions): DistributionPolicy {\n const { argv, cwd, packageRoot, homeDir, environment, path } = options\n const buckyosRoot = path.resolve(\n options.buckyosRoot ?? environment.BUCKYOS_ROOT ?? defaultBuckyosRoot(options),\n )\n const configRoot = path.resolve(\n environment.BUCKYOS_TOOL_CONFIG_DIR ?? path.join(homeDir, '.buckyos_tool'),\n )\n const readPaths = new Set([\n path.resolve(packageRoot),\n path.resolve(cwd),\n configRoot,\n path.resolve(path.join(homeDir, '.buckyos')),\n path.resolve(path.join(homeDir, '.buckycli')),\n ])\n const writePaths = new Set([path.resolve(cwd), configRoot])\n if (options.distribution === 'system') readPaths.add(buckyosRoot)\n\n const parsed = collectArgumentPaths(argv)\n if (\n options.distribution === 'system' && parsed.module === 'app' &&\n ['fetch', 'install'].includes(parsed.verb ?? '')\n ) {\n writePaths.add(path.join(buckyosRoot, 'cache', 'control_panel', 'pikg_staging', 'incoming'))\n }\n for (const candidate of parsed.read) readPaths.add(resolveInputPath(candidate, cwd, path))\n for (const candidate of parsed.readParents) {\n readPaths.add(path.dirname(resolveInputPath(candidate, cwd, path)))\n }\n for (const candidate of parsed.write) writePaths.add(resolveInputPath(candidate, cwd, path))\n for (const candidate of parsed.writeParents) {\n writePaths.add(path.dirname(resolveInputPath(candidate, cwd, path)))\n }\n const subprocesses = parsed.module === 'pikg' && ['init', 'build'].includes(parsed.verb ?? '')\n ? ['docker']\n : []\n const network = parsed.module !== undefined &&\n !['pikg', 'command', 'completion', 'config', 'provision'].includes(parsed.module)\n const allowedEnvironment = options.distribution === 'developer'\n ? TOOL_ENVIRONMENT_NAMES.filter((name) => name !== 'BUCKYOS_ROOT')\n : TOOL_ENVIRONMENT_NAMES\n\n return Object.freeze({\n name: options.distribution === 'system' ? 'system-default' : 'developer-default',\n distribution: options.distribution,\n packageRoot: path.resolve(packageRoot),\n readPaths: Object.freeze([...readPaths]),\n writePaths: Object.freeze([...writePaths]),\n environment: Object.freeze(allowedEnvironment),\n subprocesses: Object.freeze(subprocesses),\n network,\n ...(options.distribution === 'system' ? { buckyosRoot } : {}),\n })\n}\n\nfunction defaultBuckyosRoot(options: PolicyOptions): string {\n if (options.path.sep === '\\\\') {\n return options.environment.APPDATA\n ? options.path.join(options.environment.APPDATA, 'buckyos')\n : options.path.join(options.homeDir, 'AppData', 'Roaming', 'buckyos')\n }\n return '/opt/buckyos'\n}\n\nfunction resolveInputPath(value: string, cwd: string, path: HostPath): string {\n return path.isAbsolute(value) ? path.resolve(value) : path.resolve(cwd, value)\n}\n\nfunction collectArgumentPaths(argv: string[]): {\n read: string[]\n readParents: string[]\n write: string[]\n writeParents: string[]\n module?: string\n verb?: string\n} {\n const read: string[] = []\n const readParents: string[] = []\n const write: string[] = []\n const writeParents: string[] = []\n let module: string | undefined\n let verb: string | undefined\n let positional = 0\n const valueOptions = new Set([\n 'profile',\n 'zone',\n 'endpoint',\n 'identity',\n 'session-token',\n 'output',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'from',\n 'app-class',\n 'owner',\n 'policy',\n 'data',\n 'strategy',\n 'kind',\n 'source',\n 'version',\n 'name',\n ])\n const booleanOptions = new Set([\n 'replace',\n 'cli',\n 'wait',\n 'non-interactive',\n 'yes',\n 'no-color',\n 'verbose',\n 'help',\n 'version',\n ])\n for (let index = 0; index < argv.length; index++) {\n const token = argv[index]\n if (!module && !token.startsWith('-')) {\n module = token\n continue\n }\n if (module && !verb && !token.startsWith('-')) {\n verb = token\n continue\n }\n if (token.startsWith('--')) {\n const equal = token.indexOf('=')\n const name = token.slice(2, equal < 0 ? undefined : equal)\n if (booleanOptions.has(name)) continue\n const inline = equal < 0 ? undefined : token.slice(equal + 1)\n const value = inline ?? argv[index + 1]\n if (inline === undefined && value !== undefined && !value.startsWith('--')) index++\n if (value === undefined) continue\n if (name === 'config-dir') {\n read.push(value)\n write.push(value)\n } else if (name === 'allow-read') {\n read.push(value)\n } else if (['input', 'session-token-file', 'pikg'].includes(name)) {\n if (value !== '-') read.push(value)\n } else if (name === 'source' && module === 'pikg') {\n read.push(value)\n } else if (name === 'plan') {\n read.push(value)\n if (module === 'app' && verb === 'fetch') write.push(value)\n } else if (name === 'path') write.push(value)\n else if (name === 'app-doc' && module === 'app' && verb === 'publish') read.push(value)\n else if (name === 'file' && module === 'system-config' && verb === 'set-file') {\n read.push(value)\n } else if (name === 'root' && module === 'provision') {\n // status/check read the target root; activate also writes it.\n read.push(value)\n if (verb === 'activate') write.push(value)\n } else if (name === 'owner-key-backup' && module === 'provision') {\n // check inspects the backup location; activate creates the file there.\n readParents.push(value)\n if (verb === 'activate') writeParents.push(value)\n } else if (!valueOptions.has(name)) continue\n continue\n }\n if (module === 'app' && ['fetch', 'install'].includes(verb ?? '') && positional++ === 0) {\n if (!/^https?:\\/\\//i.test(token)) read.push(token)\n } else if (module === 'skill' && verb === 'install' && positional++ === 0) {\n read.push(token)\n } else if (module === 'pikg' && positional++ === 0) {\n read.push(token)\n if (verb === 'init' || verb === 'pack') write.push(token)\n else if (verb === 'build' || verb === 'clean') writeParents.push(token)\n }\n }\n return { read, readParents, write, writeParents, module, verb }\n}\n\nexport function policyView(host: ToolHost): Record<string, unknown> {\n return {\n executable: host.executable,\n runtime_executable: host.runtimeExecutable,\n distribution: host.policy.distribution,\n policy: host.policy.name,\n host: host.kind,\n runtime: host.runtimeName,\n runtime_version: host.runtimeVersion,\n platform: host.platform,\n arch: host.arch,\n package_root: host.policy.packageRoot,\n read_paths: [...host.policy.readPaths],\n write_paths: [...host.policy.writePaths],\n environment: [...host.policy.environment],\n subprocesses: [...host.policy.subprocesses],\n network: host.policy.network,\n }\n}\n\nexport async function readDistributionManifest(\n host: ToolHost = getHost(),\n): Promise<Record<string, unknown> | null> {\n const path = host.path.join(host.policy.packageRoot, 'distribution.json')\n try {\n const value = JSON.parse(await host.readTextFile(path)) as unknown\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n } catch (error) {\n if (isHostError(error, 'NotFound')) return null\n throw error\n }\n}\n\nexport function distributionManifestView(\n manifest: Record<string, unknown> | null,\n): Record<string, unknown> | null {\n if (!manifest) return null\n const { npm_files: files, ...summary } = manifest\n return {\n ...summary,\n npm_file_count: Array.isArray(files) ? files.length : null,\n }\n}\n","import type { GlobalOptions, OutputFormat } from './argv.ts'\nimport { parseDuration } from './argv.ts'\nimport { ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nexport interface ToolConfig {\n schema_version: 1\n default_profile?: string\n output?: OutputFormat\n}\n\nexport interface ProfileConfig {\n schema_version: 1\n zone?: string\n endpoint?: string\n identity?: string\n default_protocol?: 'http://' | 'https://'\n output?: OutputFormat\n}\n\nexport interface ImplicitDeviceIdentity {\n did: string\n name: string\n zoneDid: string\n buckyosRoot: string\n nodeIdentityPath: string\n publicRoot: string\n securityRoot: string\n}\n\nexport interface ResolvedConfig {\n configDir: string\n profileName?: string\n zone?: string\n endpoint?: string\n identity?: string\n identityRoot?: string\n securityRoot?: string\n sessionToken?: string\n sessionTokenFile?: string\n output: OutputFormat\n defaultProtocol: 'http://' | 'https://'\n timeoutMs: number\n traceId?: string\n idempotencyKey?: string\n wait: boolean\n nonInteractive: boolean\n yes: boolean\n noColor: boolean\n verbose: boolean\n implicitDeviceIdentity?: ImplicitDeviceIdentity\n sources: Record<string, string>\n}\n\nexport type Environment = Record<string, string | undefined>\n\nexport const ENVIRONMENT_NAMES = [\n 'HOME',\n 'USERPROFILE',\n 'APPDATA',\n 'BUCKYOS_TOOL_CONFIG_DIR',\n 'BUCKYOS_TOOL_PROFILE',\n 'BUCKYOS_TOOL_ZONE',\n 'BUCKYOS_TOOL_ENDPOINT',\n 'BUCKYOS_TOOL_IDENTITY',\n 'BUCKYOS_TOOL_OUTPUT',\n 'BUCKYOS_APPCLIENT_SESSION_TOKEN',\n 'BUCKYOS_ROOT',\n] as const\n\nconst PROFILE_NAME = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/\nconst DEFAULT_TIMEOUT_MS = 30_000\n\nexport class ConfigStore {\n readonly root: string\n\n constructor(root: string) {\n this.root = resolve(root)\n }\n\n async readConfig(): Promise<ToolConfig> {\n return await this.#readJson<ToolConfig>(join(this.root, 'config.json'), {\n schema_version: 1,\n })\n }\n\n async readProfile(name: string): Promise<ProfileConfig | undefined> {\n validateProfileName(name)\n return await this.#readJson<ProfileConfig>(this.profilePath(name), undefined)\n }\n\n async listProfiles(): Promise<string[]> {\n const directory = join(this.root, 'profiles')\n try {\n const names: string[] = []\n for (const entry of await getHost().readDir(directory)) {\n if (entry.isFile && entry.name.endsWith('.json')) {\n const name = entry.name.slice(0, -5)\n if (PROFILE_NAME.test(name)) names.push(name)\n }\n }\n return names.sort()\n } catch (error) {\n if (isHostError(error, 'NotFound')) return []\n throw error\n }\n }\n\n async writeConfig(config: ToolConfig): Promise<void> {\n validateToolConfig(config, 'config.json')\n await this.#atomicWrite(join(this.root, 'config.json'), config)\n }\n\n async writeProfile(name: string, profile: ProfileConfig): Promise<void> {\n validateProfileName(name)\n validateProfileConfig(profile, `profiles/${name}.json`)\n await this.#atomicWrite(this.profilePath(name), profile)\n }\n\n profilePath(name: string): string {\n validateProfileName(name)\n return join(this.root, 'profiles', `${name}.json`)\n }\n\n historyPath(): string {\n return join(this.root, 'state', 'repl_history')\n }\n\n async #readJson<T>(path: string, missing: T | undefined): Promise<T> {\n try {\n const parsed = JSON.parse(await getHost().readTextFile(path)) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new UsageError('INVALID_CONFIG', `${path} must contain a JSON object`)\n }\n if ((parsed as Record<string, unknown>).schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${path} has an unsupported schema_version`,\n )\n }\n if (path.endsWith('config.json') && !path.includes('/profiles/')) {\n validateToolConfig(parsed as ToolConfig, path)\n } else {\n validateProfileConfig(parsed as ProfileConfig, path)\n }\n return parsed as T\n } catch (error) {\n if (isHostError(error, 'NotFound') && missing !== undefined) return missing\n if (error instanceof SyntaxError) {\n throw new UsageError('INVALID_CONFIG', `${path} is not valid JSON`)\n }\n throw error\n }\n }\n\n async #atomicWrite(path: string, value: unknown): Promise<void> {\n const host = getHost()\n await host.mkdir(dirname(path), { recursive: true, mode: 0o700 })\n const temporary = `${path}.tmp-${host.pid}-${crypto.randomUUID()}`\n const body = `${JSON.stringify(value, null, 2)}\\n`\n try {\n await host.writeTextFile(temporary, body, { mode: 0o600, createNew: true })\n await host.rename(temporary, path)\n if (host.platform !== 'windows') await host.chmod(path, 0o600)\n } catch (error) {\n try {\n await host.remove(temporary)\n } catch (cleanupError) {\n void cleanupError\n }\n throw error\n }\n }\n}\n\nexport async function resolveConfig(\n explicit: GlobalOptions,\n environment: Environment = readEnvironment(),\n options: { interactive?: boolean; cwd?: string; homeDir?: string } = {},\n): Promise<{ resolved: ResolvedConfig; store: ConfigStore }> {\n const cwd = options.cwd ?? getHost().cwd()\n const homeDir = options.homeDir ?? environment.HOME ?? environment.USERPROFILE ??\n getHost().homeDir()\n const configDir = resolveConfigRoot(explicit, environment, cwd, homeDir)\n const store = new ConfigStore(configDir)\n const config = await store.readConfig()\n const profileName = explicit.profile ?? environment.BUCKYOS_TOOL_PROFILE ?? config.default_profile\n const profile = profileName ? await store.readProfile(profileName) : undefined\n if (profileName && !profile) {\n throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n }\n\n const sources: Record<string, string> = {\n config_dir: sourceOf(\n explicit.configDir,\n environment.BUCKYOS_TOOL_CONFIG_DIR,\n undefined,\n 'default',\n ),\n }\n const zone = select(\n 'zone',\n explicit.zone,\n environment.BUCKYOS_TOOL_ZONE,\n profile?.zone,\n undefined,\n sources,\n )\n const endpoint = select(\n 'endpoint',\n explicit.endpoint,\n environment.BUCKYOS_TOOL_ENDPOINT,\n profile?.endpoint,\n undefined,\n sources,\n )\n const identity = select(\n 'identity',\n explicit.identity,\n environment.BUCKYOS_TOOL_IDENTITY,\n profile?.identity,\n undefined,\n sources,\n )\n let output: OutputFormat\n if (options.interactive && explicit.output === undefined) {\n output = 'table'\n sources.output = 'interactive-default'\n } else {\n output = select(\n 'output',\n explicit.output,\n asOutput(environment.BUCKYOS_TOOL_OUTPUT),\n profile?.output,\n config.output ?? 'json',\n sources,\n )!\n }\n const defaultProtocol = profile?.default_protocol ?? inferProtocol(endpoint) ?? 'https://'\n const timeoutMs = explicit.timeout ? parseDuration(explicit.timeout) : DEFAULT_TIMEOUT_MS\n\n if (endpoint) validateEndpoint(endpoint)\n const sessionToken = explicit.sessionToken ?? environment.BUCKYOS_APPCLIENT_SESSION_TOKEN\n if (sessionToken) sources.session_token = explicit.sessionToken ? 'argument' : 'environment'\n if (profileName) {\n sources.profile = explicit.profile\n ? 'argument'\n : environment.BUCKYOS_TOOL_PROFILE\n ? 'environment'\n : 'config'\n }\n\n return {\n store,\n resolved: {\n configDir,\n profileName,\n zone,\n endpoint,\n identity,\n sessionToken,\n sessionTokenFile: explicit.sessionTokenFile,\n output,\n defaultProtocol,\n timeoutMs,\n traceId: explicit.traceId,\n idempotencyKey: explicit.idempotencyKey,\n wait: explicit.wait ?? false,\n nonInteractive: explicit.nonInteractive ?? false,\n yes: explicit.yes ?? false,\n noColor: explicit.noColor ?? false,\n verbose: explicit.verbose ?? false,\n sources,\n },\n }\n}\n\nexport function resolveConfigRoot(\n explicit: GlobalOptions,\n environment: Environment,\n cwd = getHost().cwd(),\n homeDir = environment.HOME ?? environment.USERPROFILE ?? getHost().homeDir(),\n): string {\n const value = explicit.configDir ?? environment.BUCKYOS_TOOL_CONFIG_DIR ??\n join(homeDir, '.buckyos_tool')\n return isAbsolute(value) ? value : resolve(cwd, value)\n}\n\nexport function localResolvedConfig(\n explicit: GlobalOptions,\n environment: Environment = readEnvironment(),\n options: { cwd?: string; homeDir?: string; interactive?: boolean } = {},\n): { resolved: ResolvedConfig; store: ConfigStore } {\n const cwd = options.cwd ?? getHost().cwd()\n const homeDir = options.homeDir ?? environment.HOME ?? environment.USERPROFILE ??\n getHost().homeDir()\n const configDir = resolveConfigRoot(explicit, environment, cwd, homeDir)\n const output = options.interactive && explicit.output === undefined\n ? 'table'\n : explicit.output ?? asOutput(environment.BUCKYOS_TOOL_OUTPUT) ?? 'json'\n return {\n store: new ConfigStore(configDir),\n resolved: {\n configDir,\n profileName: explicit.profile ?? environment.BUCKYOS_TOOL_PROFILE,\n zone: explicit.zone ?? environment.BUCKYOS_TOOL_ZONE,\n endpoint: explicit.endpoint ?? environment.BUCKYOS_TOOL_ENDPOINT,\n identity: explicit.identity ?? environment.BUCKYOS_TOOL_IDENTITY,\n sessionToken: explicit.sessionToken ?? environment.BUCKYOS_APPCLIENT_SESSION_TOKEN,\n sessionTokenFile: explicit.sessionTokenFile,\n output,\n defaultProtocol: inferProtocol(explicit.endpoint ?? environment.BUCKYOS_TOOL_ENDPOINT) ??\n 'https://',\n timeoutMs: explicit.timeout ? parseDuration(explicit.timeout) : DEFAULT_TIMEOUT_MS,\n traceId: explicit.traceId,\n idempotencyKey: explicit.idempotencyKey,\n wait: explicit.wait ?? false,\n nonInteractive: explicit.nonInteractive ?? false,\n yes: explicit.yes ?? false,\n noColor: explicit.noColor ?? false,\n verbose: explicit.verbose ?? false,\n sources: {\n config_dir: sourceOf(\n explicit.configDir,\n environment.BUCKYOS_TOOL_CONFIG_DIR,\n undefined,\n 'default',\n ),\n output: explicit.output\n ? 'argument'\n : environment.BUCKYOS_TOOL_OUTPUT\n ? 'environment'\n : 'default',\n },\n },\n }\n}\n\nexport function readEnvironment(): Environment {\n const allowed = getHost().policy.environment\n return Object.fromEntries(\n ENVIRONMENT_NAMES.map((\n name,\n ) => [name, allowed.includes(name) ? getHost().env(name) : undefined]),\n )\n}\n\nexport function effectiveConfigView(config: ResolvedConfig): Record<string, unknown> {\n return {\n schema_version: 1,\n config_dir: config.configDir,\n profile: config.profileName ?? null,\n zone: config.zone ?? null,\n endpoint: redactUrl(config.endpoint),\n identity: config.identity ?? null,\n identity_root: config.identityRoot ?? null,\n security_root: config.securityRoot ? '[CONFIGURED]' : null,\n output: config.output,\n default_protocol: config.defaultProtocol,\n timeout_ms: config.timeoutMs,\n session_token: config.sessionToken || config.sessionTokenFile\n ? {\n present: true,\n source: config.sources.session_token ?? (config.sessionTokenFile ? 'file' : 'unknown'),\n summary: '[REDACTED]',\n }\n : { present: false },\n sources: config.sources,\n }\n}\n\nexport function validateProfileName(name: string): void {\n if (!PROFILE_NAME.test(name)) {\n throw new UsageError('INVALID_PROFILE_NAME', `invalid profile name: ${name}`)\n }\n}\n\nfunction validateToolConfig(config: ToolConfig, source: string): void {\n if (config.schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${source} has an unsupported schema_version`,\n )\n }\n if (config.default_profile !== undefined) validateProfileName(config.default_profile)\n if (config.output !== undefined) asOutput(config.output, source)\n rejectUnknownKeys(config as unknown as Record<string, unknown>, [\n 'schema_version',\n 'default_profile',\n 'output',\n ], source)\n}\n\nfunction validateProfileConfig(profile: ProfileConfig, source: string): void {\n if (profile.schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${source} has an unsupported schema_version`,\n )\n }\n if (profile.output !== undefined) asOutput(profile.output, source)\n if (\n profile.default_protocol !== undefined &&\n !['http://', 'https://'].includes(profile.default_protocol)\n ) {\n throw new UsageError('INVALID_CONFIG', `${source}.default_protocol must be http:// or https://`)\n }\n if (profile.endpoint) validateEndpoint(profile.endpoint)\n rejectUnknownKeys(\n profile as unknown as Record<string, unknown>,\n ['schema_version', 'zone', 'endpoint', 'identity', 'default_protocol', 'output'],\n source,\n )\n}\n\nfunction rejectUnknownKeys(\n value: Record<string, unknown>,\n allowed: string[],\n source: string,\n): void {\n const allowedSet = new Set(allowed)\n const unknown = Object.keys(value).filter((key) => !allowedSet.has(key))\n if (unknown.length > 0) {\n throw new UsageError(\n 'INVALID_CONFIG',\n `${source} contains unsupported fields: ${unknown.join(', ')}`,\n )\n }\n}\n\nfunction asOutput(\n value: string | undefined,\n source = 'BUCKYOS_TOOL_OUTPUT',\n): OutputFormat | undefined {\n if (value === undefined) return undefined\n if (!['json', 'jsonl', 'table', 'text', 'raw'].includes(value)) {\n throw new UsageError('INVALID_OUTPUT_FORMAT', `${source} has invalid output format: ${value}`)\n }\n return value as OutputFormat\n}\n\nfunction select<T>(\n name: string,\n explicit: T | undefined,\n environment: T | undefined,\n profile: T | undefined,\n fallback: T | undefined,\n sources: Record<string, string>,\n): T | undefined {\n if (explicit !== undefined) {\n sources[name] = 'argument'\n return explicit\n }\n if (environment !== undefined) {\n sources[name] = 'environment'\n return environment\n }\n if (profile !== undefined) {\n sources[name] = 'profile'\n return profile\n }\n if (fallback !== undefined) sources[name] = 'default'\n return fallback\n}\n\nfunction sourceOf(\n explicit: unknown,\n environment: unknown,\n profile: unknown,\n fallback: string,\n): string {\n return explicit !== undefined\n ? 'argument'\n : environment !== undefined\n ? 'environment'\n : profile !== undefined\n ? 'profile'\n : fallback\n}\n\nfunction validateEndpoint(value: string): void {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new UsageError('INVALID_ENDPOINT', `invalid endpoint URL: ${value}`)\n }\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new UsageError('INVALID_ENDPOINT', 'endpoint must use http or https')\n }\n}\n\nfunction inferProtocol(endpoint: string | undefined): 'http://' | 'https://' | undefined {\n if (!endpoint) return undefined\n return endpoint.startsWith('http://')\n ? 'http://'\n : endpoint.startsWith('https://')\n ? 'https://'\n : undefined\n}\n\nfunction redactUrl(value: string | undefined): string | null {\n if (!value) return null\n try {\n const url = new URL(value)\n if (url.username || url.password) {\n url.username = '[REDACTED]'\n url.password = '[REDACTED]'\n }\n return url.toString()\n } catch {\n return '[INVALID_URL]'\n }\n}\n\nexport function configValueError(message: string): ToolError {\n return new ToolError('INVALID_CONFIG_VALUE', message, 2)\n}\n","import { buckyos, BuckyOSSDK, namelib, RuntimeType } from 'buckyos/node'\nimport type { SessionController } from './auth.ts'\nimport type { ResolvedConfig } from './config.ts'\nimport type { ResolvedConnection } from './context.ts'\nimport { ToolError, UsageError } from './errors.ts'\n\nexport interface RuntimeAdapter {\n initialize(config: ResolvedConfig, session: SessionController): Promise<ResolvedConnection>\n}\n\nexport interface RpcCallOptions {\n traceId: string\n timeoutMs: number\n signal?: AbortSignal\n}\n\nexport interface ServiceClientRegistry {\n call<T>(\n service: string,\n method: string,\n params: Record<string, unknown>,\n options: RpcCallOptions,\n ): Promise<T>\n createEventReader?(pattern: string, signal?: AbortSignal): Promise<EventReader>\n}\n\nexport interface EventReader {\n pullEvent(timeoutMs?: number): Promise<unknown | null>\n close(): Promise<void>\n}\n\ninterface RpcClient {\n call<T>(\n method: string,\n params: Record<string, unknown>,\n options: { traceId: string },\n ): Promise<T>\n}\n\ntype RpcClientConstructor = new (\n url: string,\n token?: string | null,\n sequence?: number | null,\n options?: { sessionTokenProvider?: () => Promise<string | null> },\n) => RpcClient\n\nexport class BuckyOSRuntimeAdapter implements RuntimeAdapter {\n #sdk = new BuckyOSSDK('node')\n\n async initialize(\n config: ResolvedConfig,\n session: SessionController,\n ): Promise<ResolvedConnection> {\n const authenticated = session.current()\n const zoneHost = resolveZoneHost(config)\n const initialize = this.#sdk.initBuckyOS as unknown as (\n appId: string,\n config: Record<string, unknown>,\n ) => Promise<void>\n await initialize.call(this.#sdk, authenticated.principal.appId, {\n appId: authenticated.principal.appId,\n ownerUserId: authenticated.principal.id,\n runtimeType: RuntimeType.AppClient,\n zoneHost,\n defaultProtocol: config.defaultProtocol,\n sessionToken: authenticated.token,\n privateKeySearchPaths: [],\n autoRenew: false,\n verifyHubServiceUrl: resolveServiceUrl(config, 'verify-hub'),\n })\n return {\n zone: config.zone ?? zoneHost,\n endpoint: config.endpoint ?? `${config.defaultProtocol}${zoneHost}`,\n defaultProtocol: config.defaultProtocol,\n }\n }\n}\n\nexport class BuckyOSServiceClientRegistry implements ServiceClientRegistry {\n readonly #config: ResolvedConfig\n readonly #session: SessionController\n readonly #clients = new Map<string, RpcClient>()\n\n constructor(config: ResolvedConfig, session: SessionController) {\n this.#config = config\n this.#session = session\n }\n\n async call<T>(\n service: string,\n method: string,\n params: Record<string, unknown>,\n options: RpcCallOptions,\n ): Promise<T> {\n let client = this.#clients.get(service)\n if (!client) {\n const RpcClient = buckyos.kRPCClient as unknown as RpcClientConstructor\n client = new RpcClient(resolveServiceUrl(this.#config, service), null, null, {\n sessionTokenProvider: async () => (await this.#session.ensureValid()).token,\n })\n this.#clients.set(service, client)\n }\n const request = client.call(method, params, { traceId: options.traceId }) as Promise<T>\n return await withDeadline(request, options.timeoutMs, options.signal)\n }\n\n async createEventReader(pattern: string, signal?: AbortSignal): Promise<EventReader> {\n return await buckyos.createEventReader(pattern, { keepaliveMs: 5_000, signal })\n }\n}\n\nexport class InteractiveSession {\n readonly authentication: SessionController\n readonly clients: ServiceClientRegistry\n readonly connection: ResolvedConnection\n readonly startedAt: number\n\n private constructor(\n authentication: SessionController,\n clients: ServiceClientRegistry,\n connection: ResolvedConnection,\n ) {\n this.authentication = authentication\n this.clients = clients\n this.connection = connection\n this.startedAt = Date.now()\n }\n\n static async create(\n config: ResolvedConfig,\n authentication: SessionController,\n runtime: RuntimeAdapter = new BuckyOSRuntimeAdapter(),\n clients?: ServiceClientRegistry,\n ): Promise<InteractiveSession> {\n await authentication.connect()\n const connection = await runtime.initialize(config, authentication)\n return new InteractiveSession(\n authentication,\n clients ?? new BuckyOSServiceClientRegistry(config, authentication),\n connection,\n )\n }\n\n async reconnect(): Promise<void> {\n await this.authentication.reconnect()\n }\n}\n\nexport function resolveServiceUrl(config: ResolvedConfig, service: string): string {\n if (config.endpoint) {\n const endpoint = new URL(config.endpoint)\n const marker = endpoint.pathname.indexOf('/kapi/')\n if (marker >= 0) endpoint.pathname = `${endpoint.pathname.slice(0, marker)}/kapi/${service}`\n else if (endpoint.pathname.endsWith('/kapi')) {\n endpoint.pathname = `${endpoint.pathname}/${service}`\n } else endpoint.pathname = `${endpoint.pathname.replace(/\\/$/, '')}/kapi/${service}`\n endpoint.search = ''\n endpoint.hash = ''\n return endpoint.toString().replace(/\\/$/, '')\n }\n const host = resolveZoneHost(config)\n return `${config.defaultProtocol}${host}/kapi/${service}`\n}\n\nexport function resolveZoneHost(config: ResolvedConfig): string {\n if (config.zone) {\n try {\n return namelib.DID.fromStr(config.zone).toRawHostName()\n } catch {\n throw new UsageError('INVALID_ZONE', `invalid zone host or DID: ${config.zone}`)\n }\n }\n if (config.endpoint) return new URL(config.endpoint).host\n throw new UsageError('CONNECTION_REQUIRED', 'an endpoint or zone is required for online commands')\n}\n\nexport async function withDeadline<T>(\n promise: Promise<T>,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<T> {\n if (signal?.aborted) throw new ToolError('CANCELED', 'operation canceled', 8)\n let timer: ReturnType<typeof setTimeout> | undefined\n let abortHandler: (() => void) | undefined\n const guards: Promise<never>[] = [\n new Promise((_, reject) => {\n timer = setTimeout(\n () => reject(new ToolError('TIMEOUT', 'operation timed out', 8, true)),\n timeoutMs,\n )\n }),\n ]\n if (signal) {\n guards.push(\n new Promise((_, reject) => {\n abortHandler = () => reject(new ToolError('CANCELED', 'operation canceled', 8))\n signal.addEventListener('abort', abortHandler, { once: true })\n }),\n )\n }\n try {\n return await Promise.race([promise, ...guards])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n if (signal && abortHandler) signal.removeEventListener('abort', abortHandler)\n }\n}\n","import { buckyos } from 'buckyos/node'\nimport type { ResolvedConfig } from './config.ts'\nimport { resolveServiceUrl } from './runtime.ts'\n\nexport const BUCKYOS_DEV_CONFIG_KEY = 'system/buckyos_dev_config'\nexport const BUCKYOS_DEV_CONFIG_SCHEMA_VERSION = 1\n\nexport interface BuckyOSDevConfig {\n schema_version: 1\n enabled: boolean\n enabled_at: number | null\n enabled_by: string | null\n}\n\nexport type DevelopmentModeDecision =\n | { state: 'enabled'; config: BuckyOSDevConfig }\n | { state: 'disabled'; config: BuckyOSDevConfig }\n | { state: 'unavailable'; reason: string }\n\nexport type DevelopmentModeReader = (\n config: ResolvedConfig,\n) => Promise<DevelopmentModeDecision>\n\ninterface PublicRpcClient {\n call<T>(method: string, params: Record<string, unknown>): Promise<T>\n}\n\n/**\n * Read the target Zone's public developer-mode setting.\n *\n * This deliberately uses control-panel's unauthenticated `system.dev_mode.get`\n * endpoint: developer mode must be known before a local identity is touched or\n * exchanged at verify-hub. Every error is converted to `unavailable`, which is\n * a fail-closed result for the identity resolver.\n */\nexport async function readTargetDevelopmentMode(\n config: ResolvedConfig,\n): Promise<DevelopmentModeDecision> {\n try {\n const url = resolveServiceUrl(config, 'control-panel')\n const client = new buckyos.kRPCClient(url) as unknown as PublicRpcClient\n const value = await withTimeout(\n client.call<unknown>('system.dev_mode.get', {}),\n config.timeoutMs,\n )\n const parsed = parseBuckyOSDevConfig(value)\n return parsed.enabled\n ? { state: 'enabled', config: parsed }\n : { state: 'disabled', config: parsed }\n } catch (error) {\n return {\n state: 'unavailable',\n reason: error instanceof Error ? error.message : String(error),\n }\n }\n}\n\nexport function parseBuckyOSDevConfig(value: unknown): BuckyOSDevConfig {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('BuckyOSDevConfig must be an object')\n }\n const config = value as Record<string, unknown>\n const keys = Object.keys(config).sort()\n const expectedKeys = ['enabled', 'enabled_at', 'enabled_by', 'schema_version']\n if (JSON.stringify(keys) !== JSON.stringify(expectedKeys)) {\n throw new Error('BuckyOSDevConfig contains missing or unsupported fields')\n }\n if (config.schema_version !== BUCKYOS_DEV_CONFIG_SCHEMA_VERSION) {\n throw new Error(`unsupported BuckyOSDevConfig schema_version ${String(config.schema_version)}`)\n }\n if (typeof config.enabled !== 'boolean') {\n throw new Error('BuckyOSDevConfig enabled must be a boolean')\n }\n const enabledAt = config.enabled_at\n const enabledBy = config.enabled_by\n const hasAuditFields = Number.isSafeInteger(enabledAt) && (enabledAt as number) > 0 &&\n typeof enabledBy === 'string' && enabledBy.trim().length > 0\n const hasNoAuditFields = enabledAt === null && enabledBy === null\n if (!hasAuditFields && !hasNoAuditFields) {\n throw new Error('BuckyOSDevConfig enabled_at and enabled_by must be valid and present together')\n }\n if (config.enabled && !hasAuditFields) {\n throw new Error('enabled BuckyOSDevConfig requires enable audit fields')\n }\n return {\n schema_version: 1,\n enabled: config.enabled,\n enabled_at: enabledAt as number | null,\n enabled_by: enabledBy as string | null,\n }\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error('developer-mode lookup timed out')), timeoutMs)\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n","import { namelib } from 'buckyos/node'\nimport { type Environment, readEnvironment, type ResolvedConfig } from './config.ts'\nimport { EXIT_AUTH, EXIT_PERMISSION, ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nconst join = (...parts: string[]) => getHost().path.join(...parts)\n\nconst LOCAL_NODE_GATEWAY_ENDPOINT = 'http://127.0.0.1:3180'\n\nexport interface IdentityMaterial {\n did: string\n subject: string\n issuer: string\n principalKind: 'user' | 'device'\n publicRoot: string\n securityRoot: string\n documentPath: string\n privateKeyPath: string\n privateKeyPem: string\n source: IdentityRootPair['source']\n}\n\nexport interface IdentityRootPair {\n publicRoot: string\n securityRoot: string\n source: 'buckyos-home' | 'buckycli-home' | 'current-device'\n}\n\nexport interface IdentityRootOptions {\n includeOperations?: boolean\n includeDeveloper?: boolean\n}\n\nexport const IDENTITY_CANDIDATE_LIMIT = 8\nexport const IDENTITY_REJECTION_CODES = Object.freeze([\n 'IDENTITY_KIND_NOT_ACCEPTED',\n 'AUTHENTICATION_REJECTED',\n])\n\nexport interface IdentityCandidate {\n material: IdentityMaterial\n source: IdentityRootPair['source']\n directory: string\n}\n\nexport interface IdentityCandidateScan {\n order: readonly IdentityRootPair['source'][]\n limit: number\n candidates: IdentityCandidate[]\n skipped: Array<{\n source: IdentityRootPair['source']\n identity?: string\n path: string\n reason: string\n }>\n}\n\nexport async function applyImplicitDeviceIdentity(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n): Promise<ResolvedConfig> {\n if (\n config.sessionToken || config.sessionTokenFile || config.identity || config.zone ||\n config.endpoint\n ) {\n return config\n }\n const device = await readCurrentDeviceIdentity(environment)\n if (!device) return config\n return {\n ...config,\n identity: device.did,\n zone: device.zoneDid,\n endpoint: LOCAL_NODE_GATEWAY_ENDPOINT,\n identityRoot: device.publicRoot,\n securityRoot: device.securityRoot,\n defaultProtocol: 'http://',\n implicitDeviceIdentity: device,\n sources: {\n ...config.sources,\n identity: 'current-device',\n zone: 'current-device',\n endpoint: 'local-node-gateway',\n identity_root: 'current-device',\n security_root: 'current-device',\n },\n }\n}\n\nexport async function readCurrentDeviceIdentity(\n environment: Environment = readEnvironment(),\n): Promise<NonNullable<ResolvedConfig['implicitDeviceIdentity']> | undefined> {\n if (\n getHost().policy.distribution === 'developer' && environment.BUCKYOS_ROOT === undefined\n ) return undefined\n const buckyosRoot = environment.BUCKYOS_ROOT ?? defaultBuckyOSRoot(environment)\n const nodeIdentityPath = join(buckyosRoot, 'etc', 'node_identity.json')\n let value: unknown\n try {\n value = JSON.parse(await getHost().readTextFile(nodeIdentityPath))\n } catch (error) {\n if (isHostError(error, 'NotFound')) return undefined\n if (isHostError(error, 'PermissionDenied')) {\n throw new ToolError(\n 'DEVICE_IDENTITY_READ_FAILED',\n `permission denied reading current device identity: ${nodeIdentityPath}`,\n EXIT_PERMISSION,\n )\n }\n throw new ToolError(\n 'DEVICE_IDENTITY_READ_FAILED',\n `failed to read current device identity: ${nodeIdentityPath}`,\n EXIT_AUTH,\n )\n }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n const document = value as Record<string, unknown>\n const did = nonEmptyString(document.device_did)\n const name = nonEmptyString(document.device_name)\n const zoneDid = nonEmptyString(document.zone_did)\n if (document.schema !== 'buckyos.node_identity.v2' || !did || !name || !zoneDid) {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n try {\n namelib.DID.fromStr(did)\n namelib.DID.fromStr(zoneDid)\n } catch {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n return {\n did,\n name,\n zoneDid,\n buckyosRoot,\n nodeIdentityPath,\n publicRoot: join(buckyosRoot, 'local', 'identity'),\n securityRoot: join(buckyosRoot, 'security'),\n }\n}\n\nexport function identityRootPairs(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): IdentityRootPair[] {\n const device = config.implicitDeviceIdentity\n if (device) {\n return [{\n publicRoot: device.publicRoot,\n securityRoot: device.securityRoot,\n source: 'current-device',\n }]\n }\n\n const home = environment.HOME ?? environment.USERPROFILE ?? getHost().homeDir()\n const pairs: IdentityRootPair[] = []\n if (options.includeOperations ?? true) {\n pairs.push({\n publicRoot: join(home, '.buckyos', 'local', 'identity'),\n securityRoot: join(home, '.buckyos', 'security'),\n source: 'buckyos-home',\n })\n }\n if (options.includeDeveloper ?? false) {\n pairs.push({\n publicRoot: join(home, '.buckycli', 'local', 'identity'),\n securityRoot: join(home, '.buckycli', 'security'),\n source: 'buckycli-home',\n })\n }\n return deduplicatePairs(pairs)\n}\n\nexport async function resolveIdentityMaterial(\n selectedIdentity: string,\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): Promise<IdentityMaterial> {\n const selected = selectedIdentity.trim()\n if (!selected) throw new UsageError('IDENTITY_REQUIRED', 'identity is empty')\n\n for (const roots of identityRootPairs(config, environment, options)) {\n for (const directory of await candidateDirectories(roots.publicRoot, selected)) {\n const material = await loadIdentityMaterial(roots, directory, selected)\n if (material) return material\n }\n }\n\n throw new ToolError(\n 'IDENTITY_NOT_FOUND',\n `no usable authentication material found for identity ${selected}`,\n EXIT_AUTH,\n )\n}\n\nexport async function scanIdentityCandidates(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): Promise<IdentityCandidateScan> {\n const candidates: IdentityCandidate[] = []\n const skipped: IdentityCandidateScan['skipped'] = []\n const seen = new Set<string>()\n const roots = identityRootPairs(config, environment, options)\n for (const pair of roots) {\n let directories: string[]\n try {\n directories = await candidateDirectories(pair.publicRoot, '')\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n skipped.push({ source: pair.source, path: pair.publicRoot, reason: 'policy-denied' })\n continue\n }\n throw error\n }\n for (const directory of directories) {\n if (candidates.length >= IDENTITY_CANDIDATE_LIMIT) break\n const documentPath = join(pair.publicRoot, directory, 'did.json')\n try {\n const material = await loadIdentityMaterial(pair, directory)\n if (!material) {\n skipped.push({ source: pair.source, path: documentPath, reason: 'not-usable' })\n continue\n }\n if (seen.has(material.did)) {\n skipped.push({\n source: pair.source,\n identity: material.did,\n path: documentPath,\n reason: 'duplicate',\n })\n continue\n }\n seen.add(material.did)\n candidates.push({ material, source: pair.source, directory })\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n skipped.push({ source: pair.source, path: documentPath, reason: 'policy-denied' })\n continue\n }\n if (error instanceof ToolError && error.code === 'IDENTITY_KEYREF_UNSUPPORTED') {\n skipped.push({\n source: pair.source,\n identity: typeof error.details.identity === 'string'\n ? error.details.identity\n : undefined,\n path: documentPath,\n reason: 'key-reference-unsupported',\n })\n continue\n }\n throw error\n }\n }\n if (candidates.length >= IDENTITY_CANDIDATE_LIMIT) break\n }\n return {\n order: Object.freeze(roots.map((pair) => pair.source)),\n limit: IDENTITY_CANDIDATE_LIMIT,\n candidates,\n skipped,\n }\n}\n\nexport async function identityCandidateView(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n developerModeEnabled = false,\n): Promise<Record<string, unknown>> {\n if (config.identity) {\n try {\n const material = await resolveIdentityMaterial(config.identity, config, environment, {\n includeDeveloper: developerModeEnabled,\n })\n return {\n mode: 'explicit',\n order: [material.did],\n limit: 1,\n candidates: [{\n identity: material.did,\n source: config.sources.identity ?? 'explicit',\n document_path: material.documentPath,\n }],\n skipped: [],\n }\n } catch (error) {\n return {\n mode: 'explicit',\n order: [config.identity],\n limit: 1,\n candidates: [],\n skipped: [{\n identity: config.identity,\n reason: error instanceof ToolError ? error.code : 'unavailable',\n }],\n }\n }\n }\n const scan = await scanIdentityCandidates(config, environment, {\n includeDeveloper: developerModeEnabled,\n })\n return {\n mode: 'search',\n order: scan.order,\n limit: scan.limit,\n candidates: scan.candidates.map((candidate) => ({\n identity: candidate.material.did,\n source: candidate.source,\n document_path: candidate.material.documentPath,\n })),\n skipped: scan.skipped,\n }\n}\n\nasync function loadIdentityMaterial(\n roots: IdentityRootPair,\n directory: string,\n selected?: string,\n): Promise<IdentityMaterial | undefined> {\n const documentPath = join(roots.publicRoot, directory, 'did.json')\n const document = await readIdentityDocument(documentPath)\n if (!document || selected && !identityMatches(document, selected)) return undefined\n const did = typeof document.id === 'string' ? document.id : ''\n const subject = typeof document.name === 'string' && document.name.trim()\n ? document.name.trim()\n : did\n if (!did || !subject) return undefined\n\n const privateKeyPath = join(roots.securityRoot, directory, 'authentication.private.pem')\n try {\n const privateKeyPem = (await getHost().readTextFile(privateKeyPath)).trim()\n if (!privateKeyPem) return undefined\n return {\n did,\n subject,\n issuer: subject,\n principalKind: typeof document.device_type === 'string' ? 'device' : 'user',\n publicRoot: roots.publicRoot,\n securityRoot: roots.securityRoot,\n documentPath,\n privateKeyPath,\n privateKeyPem,\n source: roots.source,\n }\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n\n const keyrefPath = join(roots.securityRoot, directory, 'authentication.keyref.json')\n try {\n await getHost().stat(keyrefPath)\n throw new ToolError(\n 'IDENTITY_KEYREF_UNSUPPORTED',\n 'the selected identity uses a key reference unsupported by this runtime',\n EXIT_AUTH,\n false,\n { identity: did, keyref_path: keyrefPath },\n )\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n return undefined\n}\n\nasync function candidateDirectories(publicRoot: string, identity: string): Promise<string[]> {\n if (identity.startsWith('did:')) {\n try {\n return [namelib.DID.fromStr(identity).toFilename()]\n } catch {\n throw new UsageError('INVALID_IDENTITY', `invalid DID: ${identity}`)\n }\n }\n const directories: string[] = []\n try {\n for (const entry of await getHost().readDir(publicRoot)) {\n if (entry.isDirectory) directories.push(entry.name)\n }\n } catch (error) {\n if (isHostError(error, 'NotFound')) return []\n throw error\n }\n return directories.sort()\n}\n\nasync function readIdentityDocument(path: string): Promise<Record<string, unknown> | null> {\n try {\n const value = JSON.parse(await getHost().readTextFile(path)) as unknown\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n } catch (error) {\n if (isHostError(error, 'NotFound') || error instanceof SyntaxError) return null\n throw error\n }\n}\n\nfunction identityMatches(document: Record<string, unknown>, selected: string): boolean {\n if (typeof document.id === 'string' && document.id === selected) return true\n return typeof document.name === 'string' && document.name === selected\n}\n\nexport function defaultBuckyOSRoot(environment: Environment = readEnvironment()): string {\n if (getHost().platform === 'windows') {\n const appData = environment.APPDATA\n return appData ? join(appData, 'buckyos') : 'C:\\\\BuckyOS'\n }\n return '/opt/buckyos'\n}\n\nfunction invalidDeviceIdentity(path: string): ToolError {\n return new ToolError(\n 'INVALID_DEVICE_IDENTITY',\n `current device identity is invalid: ${path}`,\n EXIT_AUTH,\n )\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction deduplicatePairs(pairs: IdentityRootPair[]): IdentityRootPair[] {\n const seen = new Set<string>()\n return pairs.filter((pair) => {\n const key = `${pair.publicRoot}\\0${pair.securityRoot}`\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n","import {\n buckyos,\n createAppInstanceId,\n parseSessionTokenClaims,\n VerifyHubClient,\n} from 'buckyos/node'\nimport { type Environment, readEnvironment, type ResolvedConfig } from './config.ts'\nimport {\n type DevelopmentModeDecision,\n type DevelopmentModeReader,\n readTargetDevelopmentMode,\n} from './development_mode.ts'\nimport { EXIT_AUTH, sanitizeMessage, ToolError } from './errors.ts'\nimport {\n IDENTITY_CANDIDATE_LIMIT,\n IDENTITY_REJECTION_CODES,\n type IdentityCandidate,\n type IdentityMaterial,\n resolveIdentityMaterial,\n scanIdentityCandidates,\n} from './identity.ts'\nimport { resolveServiceUrl } from './runtime.ts'\nimport { getHost } from '../runtime/host.ts'\n\ntype AuthTarget =\n | { kind: 'app'; app_instance_id: string }\n | { kind: 'system'; service_id: string }\n\nexport type AuthenticationKind =\n | 'session-token'\n | 'session-token-file'\n | 'environment'\n | 'identity'\n | 'password'\n | 'mock'\n\nexport interface ResolvedPrincipal {\n id: string\n appId: string\n appInstanceId?: string\n authentication: AuthenticationKind\n tokenExpiresAt?: string\n}\n\nexport interface AuthenticatedSession {\n token: string\n principal: ResolvedPrincipal\n claims: Record<string, unknown>\n renewable: boolean\n}\n\nexport interface AuthenticationTransport {\n loginByJwt(url: string, jwt: string, target: AuthTarget, timeoutMs: number): Promise<string>\n loginByPassword(\n url: string,\n username: string,\n password: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string>\n}\n\nexport interface AuthenticationDependencies {\n transport?: AuthenticationTransport\n readPassword?: (prompt: string) => Promise<string>\n readUsername?: (prompt: string) => Promise<string>\n readDevelopmentMode?: DevelopmentModeReader\n now?: () => number\n}\n\nexport interface SessionController {\n readonly config: ResolvedConfig\n connect(): Promise<AuthenticatedSession>\n ensureValid(): Promise<AuthenticatedSession>\n reconnect(): Promise<AuthenticatedSession>\n current(): AuthenticatedSession\n status(): Record<string, unknown>\n}\n\nconst LOGIN_APP_ID = 'buckycli'\nconst LOGIN_TOKEN_TTL_SECONDS = 10 * 60\n\nexport class AuthenticationSession implements SessionController {\n readonly config: ResolvedConfig\n readonly #environment: Environment\n readonly #transport: AuthenticationTransport\n readonly #readPassword: (prompt: string) => Promise<string>\n readonly #readUsername: (prompt: string) => Promise<string>\n readonly #readDevelopmentMode: DevelopmentModeReader\n readonly #now: () => number\n #session?: AuthenticatedSession\n #acceptedIdentity?: IdentityMaterial\n #developmentMode?: DevelopmentModeDecision\n #identityAttempts: Array<{ identity: string; code: string; message: string }> = []\n\n constructor(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n dependencies: AuthenticationDependencies = {},\n ) {\n this.config = config\n this.#environment = environment\n this.#transport = dependencies.transport ?? new SdkAuthenticationTransport()\n this.#readPassword = dependencies.readPassword ?? readSecret\n this.#readUsername = dependencies.readUsername ?? readVisible\n this.#readDevelopmentMode = dependencies.readDevelopmentMode ?? readTargetDevelopmentMode\n this.#now = dependencies.now ?? Date.now\n }\n\n async connect(): Promise<AuthenticatedSession> {\n if (this.#session) return this.#session\n this.#session = await this.#authenticate(false)\n return this.#session\n }\n\n async ensureValid(): Promise<AuthenticatedSession> {\n const session = await this.connect()\n const exp = numberClaim(session.claims.exp)\n const nowSeconds = Math.floor(this.#now() / 1_000)\n if (exp === undefined || exp > nowSeconds + 15) return session\n if (!session.renewable) {\n throw new ToolError(\n 'SESSION_EXPIRED',\n 'the externally supplied session token has expired',\n EXIT_AUTH,\n )\n }\n this.#session = await this.#authenticate(true)\n return this.#session\n }\n\n async reconnect(): Promise<AuthenticatedSession> {\n this.#session = await this.#authenticate(true)\n return this.#session\n }\n\n current(): AuthenticatedSession {\n if (!this.#session) {\n throw new ToolError('AUTH_REQUIRED', 'session is not initialized', EXIT_AUTH)\n }\n return this.#session\n }\n\n status(): Record<string, unknown> {\n const session = this.current()\n const expiresAt = session.principal.tokenExpiresAt\n const exp = numberClaim(session.claims.exp)\n const remainingSeconds = exp === undefined\n ? null\n : Math.max(0, exp - Math.floor(this.#now() / 1_000))\n return {\n authenticated: true,\n principal: session.principal.id,\n appid: session.principal.appId,\n app_instance_id: session.principal.appInstanceId ?? null,\n authentication: session.principal.authentication,\n renewable: session.renewable,\n expires_at: expiresAt ?? null,\n remaining_seconds: remainingSeconds,\n developer_mode: this.#developmentMode?.state ?? null,\n identity_attempts: this.#identityAttempts,\n }\n }\n\n async #authenticate(reconnect: boolean): Promise<AuthenticatedSession> {\n if (this.config.sessionToken) {\n const source = this.config.sources.session_token === 'environment'\n ? 'environment'\n : 'session-token'\n return externalSession(this.config.sessionToken, source, this.#now())\n }\n\n if (this.config.sessionTokenFile) {\n let token: string\n try {\n token = (await getHost().readTextFile(this.config.sessionTokenFile)).trim()\n } catch (error) {\n throw new ToolError(\n 'SESSION_TOKEN_FILE_ERROR',\n `failed to read session token file: ${\n error instanceof Error ? error.message : String(error)\n }`,\n EXIT_AUTH,\n )\n }\n if (!token) {\n throw new ToolError('INVALID_SESSION_TOKEN', 'session token file is empty', EXIT_AUTH)\n }\n return externalSession(token, 'session-token-file', this.#now())\n }\n\n const injected = this.#environment.BUCKYOS_APPCLIENT_SESSION_TOKEN?.trim()\n if (injected) return externalSession(injected, 'environment', this.#now())\n\n if (this.#acceptedIdentity) {\n if (this.#acceptedIdentity.source === 'buckycli-home') {\n await this.#requireDeveloperIdentityAccess()\n }\n return await this.#loginWithIdentity(this.#acceptedIdentity)\n }\n\n if (this.config.identity) {\n const material = await this.#resolveExplicitIdentity(this.config.identity)\n const session = await this.#loginWithIdentity(material)\n this.#acceptedIdentity = material\n return session\n }\n\n this.#identityAttempts = []\n const operations = await scanIdentityCandidates(this.config, this.#environment)\n const operationsSession = await this.#tryIdentityCandidates(operations.candidates)\n if (operationsSession) return operationsSession\n\n const developmentMode = await this.#checkDevelopmentMode()\n if (\n developmentMode.state === 'enabled' &&\n operations.candidates.length < IDENTITY_CANDIDATE_LIMIT\n ) {\n const operationsDids = new Set(\n operations.candidates.map((candidate) => candidate.material.did),\n )\n const developer = await scanIdentityCandidates(this.config, this.#environment, {\n includeOperations: false,\n includeDeveloper: true,\n })\n const remaining = IDENTITY_CANDIDATE_LIMIT - operations.candidates.length\n const candidates = developer.candidates.filter((candidate) =>\n !operationsDids.has(candidate.material.did)\n ).slice(0, remaining)\n const developerSession = await this.#tryIdentityCandidates(candidates)\n if (developerSession) return developerSession\n }\n if (this.#identityAttempts.length > 0) {\n throw new ToolError(\n 'IDENTITY_CANDIDATES_REJECTED',\n `all ${this.#identityAttempts.length} identity candidates were rejected`,\n EXIT_AUTH,\n false,\n { attempts: this.#identityAttempts },\n )\n }\n\n if (this.config.nonInteractive) {\n throw new ToolError(\n 'AUTH_REQUIRED',\n 'no session token or usable identity is available in non-interactive mode',\n EXIT_AUTH,\n )\n }\n const username = this.config.identity?.startsWith('did:')\n ? await this.#readUsername('Username: ')\n : this.config.identity ?? await this.#readUsername('Username: ')\n if (!username.trim()) throw new ToolError('AUTH_REQUIRED', 'username is required', EXIT_AUTH)\n const password = await this.#readPassword(reconnect ? 'Password (reconnect): ' : 'Password: ')\n const token = await this.#transport.loginByPassword(\n resolveServiceUrl(this.config, 'verify-hub'),\n username.trim(),\n password,\n appAuthTarget(username.trim()),\n this.config.timeoutMs,\n )\n return authenticatedSession(token, 'password', true, this.#now())\n }\n\n async #resolveExplicitIdentity(selectedIdentity: string): Promise<IdentityMaterial> {\n if (this.config.implicitDeviceIdentity) {\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment)\n }\n\n try {\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment)\n } catch (error) {\n if (!(error instanceof ToolError) || error.code !== 'IDENTITY_NOT_FOUND') throw error\n }\n\n await this.#requireDeveloperIdentityAccess()\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment, {\n includeOperations: false,\n includeDeveloper: true,\n })\n }\n\n async #tryIdentityCandidates(\n candidates: readonly IdentityCandidate[],\n ): Promise<AuthenticatedSession | undefined> {\n for (const candidate of candidates) {\n try {\n const session = await this.#loginWithIdentity(candidate.material)\n this.#acceptedIdentity = candidate.material\n return session\n } catch (error) {\n if (!isIdentityRejection(error)) throw error\n this.#identityAttempts.push({\n identity: candidate.material.did,\n code: error.code,\n message: sanitizeMessage(error.message),\n })\n }\n }\n return undefined\n }\n\n async #loginWithIdentity(material: IdentityMaterial): Promise<AuthenticatedSession> {\n const loginJwt = await createLoginJwt(\n material.subject,\n material.issuer,\n material.privateKeyPem,\n this.#now(),\n )\n const token = await this.#transport.loginByJwt(\n resolveServiceUrl(this.config, 'verify-hub'),\n loginJwt,\n identityAuthTarget(material.principalKind, material.subject),\n this.config.timeoutMs,\n )\n return authenticatedSession(token, 'identity', true, this.#now())\n }\n\n async #checkDevelopmentMode(): Promise<DevelopmentModeDecision> {\n this.#developmentMode = await this.#readDevelopmentMode(this.config)\n return this.#developmentMode\n }\n\n async #requireDeveloperIdentityAccess(): Promise<void> {\n const decision = await this.#checkDevelopmentMode()\n if (decision.state === 'enabled') return\n this.#acceptedIdentity = undefined\n if (decision.state === 'disabled') {\n throw new ToolError(\n 'DEVELOPER_IDENTITY_DISABLED',\n 'the target Zone has developer mode disabled; local developer identities are unavailable',\n EXIT_AUTH,\n )\n }\n throw new ToolError(\n 'DEVELOPER_MODE_UNAVAILABLE',\n 'the target Zone developer-mode configuration could not be verified',\n EXIT_AUTH,\n true,\n { reason: sanitizeMessage(decision.reason) },\n )\n }\n}\n\nfunction isIdentityRejection(error: unknown): error is ToolError {\n return error instanceof ToolError && IDENTITY_REJECTION_CODES.includes(error.code)\n}\n\nexport class SdkAuthenticationTransport implements AuthenticationTransport {\n async loginByJwt(\n url: string,\n jwt: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string> {\n const client = new buckyos.kRPCClient(url)\n const response = await withLocalTimeout(\n new VerifyHubClient(client).loginByJwt({ jwt, target }),\n timeoutMs,\n )\n if (!response.session_token) throw new Error('verify-hub returned no session token')\n return response.session_token\n }\n\n async loginByPassword(\n url: string,\n username: string,\n password: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string> {\n const client = new buckyos.kRPCClient(url)\n const verifyHub = new VerifyHubClient(client)\n const nonce = Date.now()\n verifyHub.setSeq(nonce)\n const response = await withLocalTimeout(\n verifyHub.loginByPassword({\n username,\n password: (buckyos.hashPassword as unknown as (\n username: string,\n password: string,\n nonce?: number | null,\n ) => string)(username, password, nonce),\n target,\n login_nonce: nonce,\n }),\n timeoutMs,\n )\n const normalized = VerifyHubClient.normalizeLoginResponse(response)\n if (!normalized.session_token) throw new Error('verify-hub returned no session token')\n return normalized.session_token\n }\n}\n\nfunction identityAuthTarget(\n principalKind: 'user' | 'device',\n subject: string,\n): AuthTarget {\n return principalKind === 'device'\n ? { kind: 'system', service_id: LOGIN_APP_ID }\n : appAuthTarget(subject)\n}\n\nfunction appAuthTarget(ownerUserId: string): AuthTarget {\n return {\n kind: 'app',\n app_instance_id: createAppInstanceId(LOGIN_APP_ID, ownerUserId),\n }\n}\n\nexport function authenticatedSession(\n token: string,\n authentication: AuthenticationKind,\n renewable: boolean,\n nowMs = Date.now(),\n): AuthenticatedSession {\n const claims = parseClaims(token)\n const exp = numberClaim(claims.exp)\n const nowSeconds = Math.floor(nowMs / 1_000)\n if (exp !== undefined && exp <= nowSeconds) {\n throw new ToolError('SESSION_EXPIRED', 'the session token has expired', EXIT_AUTH)\n }\n const id = stringClaim(claims.sub) ?? stringClaim(claims.userid)\n const appId = stringClaim(claims.appid) ?? stringClaim(claims.aud)\n if (!id || !appId) {\n throw new ToolError(\n 'INVALID_SESSION_TOKEN',\n 'session token is missing principal or appid claims',\n EXIT_AUTH,\n )\n }\n const appInstanceId = stringClaim(claims.app_instance_id) ??\n stringClaim((claims.extra as Record<string, unknown> | undefined)?.app_instance_id)\n return {\n token,\n claims,\n renewable,\n principal: {\n id,\n appId,\n appInstanceId,\n authentication,\n tokenExpiresAt: exp === undefined ? undefined : new Date(exp * 1_000).toISOString(),\n },\n }\n}\n\nfunction externalSession(\n token: string,\n authentication: Extract<\n AuthenticationKind,\n 'session-token' | 'session-token-file' | 'environment'\n >,\n nowMs: number,\n): AuthenticatedSession {\n return authenticatedSession(token, authentication, false, nowMs)\n}\n\nfunction parseClaims(token: string): Record<string, unknown> {\n const claims = parseSessionTokenClaims(token)\n if (!claims) {\n throw new ToolError('INVALID_SESSION_TOKEN', 'session token is not a valid JWT', EXIT_AUTH)\n }\n return claims as Record<string, unknown>\n}\n\nasync function createLoginJwt(\n subject: string,\n issuer: string,\n privateKeyPem: string,\n nowMs: number,\n): Promise<string> {\n const now = Math.floor(nowMs / 1_000)\n const header = { alg: 'EdDSA', kid: issuer, typ: 'JWT' }\n const payload = {\n token_type: 'Normal',\n appid: LOGIN_APP_ID,\n jti: crypto.randomUUID(),\n session: now,\n sub: subject,\n userid: subject,\n iss: issuer,\n exp: now + LOGIN_TOKEN_TTL_SECONDS,\n sudo: false,\n extra: {},\n }\n const signingInput = `${base64Url(JSON.stringify(header))}.${base64Url(JSON.stringify(payload))}`\n const keyBytes = pemBytes(privateKeyPem)\n let key: CryptoKey\n try {\n key = await crypto.subtle.importKey(\n 'pkcs8',\n keyBytes.slice().buffer as ArrayBuffer,\n { name: 'Ed25519' },\n false,\n ['sign'],\n )\n } catch {\n throw new ToolError(\n 'INVALID_PRIVATE_KEY',\n 'identity authentication key is not a valid Ed25519 PKCS8 key',\n EXIT_AUTH,\n )\n }\n const signature = await crypto.subtle.sign('Ed25519', key, new TextEncoder().encode(signingInput))\n return `${signingInput}.${base64Url(new Uint8Array(signature))}`\n}\n\nfunction pemBytes(pem: string): Uint8Array {\n const encoded = pem.replace(/-----[^-]+-----/g, '').replaceAll(/\\s/g, '')\n const binary = atob(encoded)\n return Uint8Array.from(binary, (character) => character.charCodeAt(0))\n}\n\nfunction base64Url(value: string | Uint8Array): string {\n const bytes = typeof value === 'string' ? new TextEncoder().encode(value) : value\n let binary = ''\n for (const byte of bytes) binary += String.fromCharCode(byte)\n return btoa(binary).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '')\n}\n\nfunction stringClaim(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction numberClaim(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nasync function withLocalTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new ToolError('TIMEOUT', 'authentication timed out', 8, true)),\n timeoutMs,\n )\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nasync function readVisible(prompt: string): Promise<string> {\n return (await getHost().readLine(prompt))?.trim() ?? ''\n}\n\nasync function readSecret(prompt: string): Promise<string> {\n if (!getHost().inputIsTerminal()) {\n throw new ToolError(\n 'INTERACTIVE_AUTH_UNAVAILABLE',\n 'password input requires a terminal',\n EXIT_AUTH,\n )\n }\n try {\n return await getHost().readSecret(prompt)\n } catch (error) {\n throw new ToolError(\n 'INTERACTIVE_AUTH_UNAVAILABLE',\n error instanceof Error ? error.message : String(error),\n EXIT_AUTH,\n )\n }\n}\n","import type { OutputFormat } from './argv.ts'\nimport type { ToolError } from './errors.ts'\n\nexport interface EnvelopeMeta {\n command: string\n trace_id: string\n duration_ms: number\n}\n\nexport interface SuccessEnvelope {\n schema_version: 1\n ok: true\n data: unknown\n meta: EnvelopeMeta\n}\n\nexport interface ErrorEnvelope {\n schema_version: 1\n ok: false\n error: {\n code: string\n message: string\n retryable: boolean\n details: Record<string, unknown>\n }\n meta: Omit<EnvelopeMeta, 'duration_ms'> & { duration_ms?: number }\n}\n\nexport function successEnvelope(data: unknown, meta: EnvelopeMeta): SuccessEnvelope {\n return { schema_version: 1, ok: true, data, meta }\n}\n\nexport function errorEnvelope(\n error: ToolError,\n meta: Omit<EnvelopeMeta, 'duration_ms'> & { duration_ms?: number },\n): ErrorEnvelope {\n return {\n schema_version: 1,\n ok: false,\n error: {\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n details: error.details,\n },\n meta,\n }\n}\n\nexport function renderSuccess(envelope: SuccessEnvelope, format: OutputFormat): string {\n if (format === 'json' || format === 'jsonl') return JSON.stringify(envelope)\n if (format === 'raw') {\n if (typeof envelope.data !== 'string') throw new Error('raw output requires a string result')\n return envelope.data\n }\n if (format === 'text') return renderText(envelope.data)\n return renderTable(envelope.data)\n}\n\nexport function renderError(envelope: ErrorEnvelope, format: OutputFormat): string {\n if (format === 'json' || format === 'jsonl' || format === 'raw') return JSON.stringify(envelope)\n const retryable = envelope.error.retryable ? ' (retryable)' : ''\n return `${envelope.error.code}${retryable}: ${envelope.error.message}`\n}\n\nfunction renderText(data: unknown): string {\n if (typeof data === 'string') return data\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n const object = data as Record<string, unknown>\n if (typeof object.script === 'string') return object.script\n if (typeof object.text === 'string') return object.text\n }\n return JSON.stringify(data, null, 2)\n}\n\nfunction renderTable(data: unknown): string {\n if (Array.isArray(data)) return renderRows(data)\n if (data && typeof data === 'object') {\n const object = data as Record<string, unknown>\n const arrayEntry = Object.entries(object).find(([, value]) => Array.isArray(value))\n if (arrayEntry) return renderRows(arrayEntry[1] as unknown[])\n const rows = Object.entries(object).map(([key, value]) => ({ key, value: displayValue(value) }))\n return renderRows(rows)\n }\n return String(data ?? '')\n}\n\nfunction renderRows(rows: unknown[]): string {\n if (rows.length === 0) return '(empty)'\n const objects = rows.map((row) =>\n row && typeof row === 'object' && !Array.isArray(row)\n ? row as Record<string, unknown>\n : { value: row }\n )\n const columns = [...new Set(objects.flatMap((row) => Object.keys(row)))]\n const rendered = objects.map((row) => columns.map((column) => displayValue(row[column])))\n const widths = columns.map((column, index) =>\n Math.max(column.length, ...rendered.map((row) => row[index].length))\n )\n const header = columns.map((column, index) => column.padEnd(widths[index])).join(' ')\n const separator = widths.map((width) => '-'.repeat(width)).join(' ')\n const body = rendered.map((row) =>\n row.map((value, index) => value.padEnd(widths[index])).join(' ')\n )\n return [header, separator, ...body].join('\\n')\n}\n\nfunction displayValue(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return JSON.stringify(value)\n}\n","import type { CommandDefinition, CommandModule, JsonSchema, RegisteredCommand } from './command.ts'\nimport { optionProperty } from './command.ts'\nimport { UsageError } from './errors.ts'\n\nconst KEBAB_CASE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/\n\nconst GLOBAL_OPTIONS = [\n { name: 'config-dir', property: 'configDir', type: 'string', scope: 'process' },\n {\n name: 'allow-read',\n property: 'allowRead',\n type: 'string',\n scope: 'process',\n repeatable: true,\n },\n { name: 'profile', property: 'profile', type: 'string', scope: 'session' },\n { name: 'zone', property: 'zone', type: 'string', scope: 'session' },\n { name: 'endpoint', property: 'endpoint', type: 'string', scope: 'session' },\n { name: 'identity', property: 'identity', type: 'string', scope: 'session' },\n {\n name: 'session-token',\n property: 'sessionToken',\n type: 'string',\n scope: 'session',\n secret: true,\n },\n {\n name: 'session-token-file',\n property: 'sessionTokenFile',\n type: 'string',\n scope: 'session',\n secret: true,\n },\n { name: 'cli', property: 'cli', type: 'boolean', scope: 'process' },\n {\n name: 'output',\n property: 'output',\n type: 'string',\n scope: 'command',\n enum: ['json', 'jsonl', 'table', 'text', 'raw'],\n },\n { name: 'input', property: 'input', type: 'string', scope: 'command' },\n { name: 'timeout', property: 'timeout', type: 'duration', scope: 'command' },\n { name: 'trace-id', property: 'traceId', type: 'string', scope: 'command' },\n {\n name: 'idempotency-key',\n property: 'idempotencyKey',\n type: 'string',\n scope: 'command',\n },\n { name: 'wait', property: 'wait', type: 'boolean', scope: 'command' },\n {\n name: 'non-interactive',\n property: 'nonInteractive',\n type: 'boolean',\n scope: 'process',\n },\n { name: 'yes', property: 'yes', type: 'boolean', scope: 'command' },\n { name: 'no-color', property: 'noColor', type: 'boolean', scope: 'process' },\n { name: 'verbose', property: 'verbose', type: 'boolean', scope: 'process' },\n { name: 'help', property: 'help', type: 'boolean', scope: 'process' },\n { name: 'version', property: 'version', type: 'boolean', scope: 'process' },\n]\n\nconst REPL_COMMAND_OPTION_NAMES = new Set([\n 'output',\n 'input',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'wait',\n 'yes',\n])\n\nexport class CommandRegistry {\n #modules = new Map<string, CommandModule>()\n #commands = new Map<string, RegisteredCommand>()\n\n register(module: CommandModule): void {\n if (!KEBAB_CASE.test(module.name)) {\n throw new Error(`invalid module name: ${module.name}`)\n }\n if (this.#modules.has(module.name)) {\n throw new Error(`duplicate module: ${module.name}`)\n }\n for (const definition of module.commands) {\n this.#validateDefinition(module.name, definition)\n const key = `${module.name}.${definition.verb}`\n if (this.#commands.has(key)) throw new Error(`duplicate command: ${key}`)\n this.#commands.set(key, {\n ...definition,\n module: module.name,\n moduleSummary: module.summary,\n })\n }\n this.#modules.set(module.name, module)\n }\n\n get(module: string, verb: string): RegisteredCommand {\n const command = this.#commands.get(`${module}.${verb}`)\n if (!command) {\n if (!this.#modules.has(module)) {\n throw new UsageError('UNKNOWN_MODULE', `unknown module: ${module}`)\n }\n throw new UsageError('UNKNOWN_COMMAND', `unknown command: ${module} ${verb}`)\n }\n return command\n }\n\n modules(): CommandModule[] {\n return [...this.#modules.values()].sort((a, b) => a.name.localeCompare(b.name))\n }\n\n commands(): RegisteredCommand[] {\n return [...this.#commands.values()].sort((a, b) =>\n `${a.module}.${a.verb}`.localeCompare(`${b.module}.${b.verb}`)\n )\n }\n\n describe(module: string, verb: string): Record<string, unknown> {\n const command = this.get(module, verb)\n return {\n schema_version: 1,\n module: command.module,\n verb: command.verb,\n summary: command.summary,\n description: command.description ?? command.summary,\n syntax: this.syntax(command),\n global_options: GLOBAL_OPTIONS,\n repl_command_options: GLOBAL_OPTIONS.filter((option) =>\n REPL_COMMAND_OPTION_NAMES.has(option.name)\n ),\n positionals: command.positionals ?? [],\n options: (command.options ?? []).map((option) => ({\n ...option,\n property: optionProperty(option),\n })),\n input_schema: command.inputSchema,\n output_schema: command.outputSchema,\n result_schema_version: command.resultSchemaVersion,\n access: command.access,\n async_mode: command.asyncMode,\n requires_session: command.requiresSession,\n execution: command.execution ?? (command.requiresSession ? 'service' : 'local'),\n network_access: command.networkAccess ?? command.requiresSession,\n examples: command.examples ?? [],\n }\n }\n\n syntax(command: RegisteredCommand): string {\n const positionals = (command.positionals ?? []).map((position) =>\n position.required === false ? `[${position.name}]` : `<${position.name}>`\n )\n const options = (command.options ?? []).map((option) =>\n option.type === 'boolean'\n ? `[--${option.name}]`\n : `[--${option.name} <${option.property ?? option.name}>]`\n )\n return ['buckyos', command.module, command.verb, ...positionals, ...options].join(' ')\n }\n\n completionCandidates(tokens: string[]): string[] {\n if (tokens.length <= 1) return this.modules().map((module) => module.name)\n const module = this.#modules.get(tokens[0])\n if (!module) return this.modules().map((candidate) => candidate.name)\n if (tokens.length === 2 && !tokens[1].startsWith('--')) {\n return module.commands.map((command) => command.verb).sort()\n }\n const verb = tokens[1]\n const command = this.#commands.get(`${module.name}.${verb}`)\n if (!command) return module.commands.map((candidate) => candidate.verb).sort()\n return [\n ...(command.options ?? []).map((option) => `--${option.name}`),\n '--input',\n '--timeout',\n '--trace-id',\n '--idempotency-key',\n '--output',\n '--wait',\n '--yes',\n '--help',\n ].sort()\n }\n\n #validateDefinition(module: string, definition: CommandDefinition): void {\n if (!KEBAB_CASE.test(definition.verb)) {\n throw new Error(`invalid verb name: ${module} ${definition.verb}`)\n }\n const positionals = definition.positionals ?? []\n const positionalNames = new Set<string>()\n for (const positional of positionals) {\n if (positionalNames.has(positional.name)) {\n throw new Error(`duplicate positional ${positional.name} in ${module}.${definition.verb}`)\n }\n positionalNames.add(positional.name)\n }\n const optionNames = new Set<string>()\n for (const option of definition.options ?? []) {\n if (!KEBAB_CASE.test(option.name) || optionNames.has(option.name)) {\n throw new Error(\n `invalid or duplicate option --${option.name} in ${module}.${definition.verb}`,\n )\n }\n optionNames.add(option.name)\n }\n this.#assertObjectSchema(definition.inputSchema, `${module}.${definition.verb} input`)\n this.#assertObjectSchema(definition.outputSchema, `${module}.${definition.verb} output`)\n }\n\n #assertObjectSchema(schema: JsonSchema, label: string): void {\n if (schema.type !== 'object') throw new Error(`${label} schema must be an object`)\n }\n}\n","import type { RegisteredCommand } from './command.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\nimport { optionProperty } from './command.ts'\nimport { parseShellLine } from './argv.ts'\n\nconst SECRET_WORDS =\n /(?:session[-_]?token|refresh[-_]?token|password|private[-_]?key|sudo[-_]?token)/i\n\nexport class ReplHistory {\n readonly path: string\n readonly limit: number\n #entries: string[] = []\n\n constructor(path: string, limit = 500) {\n this.path = path\n this.limit = limit\n }\n\n async load(): Promise<string[]> {\n try {\n this.#entries = (await getHost().readTextFile(this.path))\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(-this.limit)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n this.#entries = []\n }\n return [...this.#entries]\n }\n\n entries(): string[] {\n return [...this.#entries]\n }\n\n async add(line: string, command?: RegisteredCommand): Promise<void> {\n if (!shouldPersistHistory(line, command)) return\n if (this.#entries.at(-1) !== line) this.#entries.push(line)\n this.#entries = this.#entries.slice(-this.limit)\n const host = getHost()\n await host.mkdir(host.path.dirname(this.path), { recursive: true, mode: 0o700 })\n await host.writeTextFile(this.path, `${this.#entries.join('\\n')}\\n`, { mode: 0o600 })\n if (host.platform !== 'windows') await host.chmod(this.path, 0o600)\n }\n}\n\nexport function shouldPersistHistory(line: string, command?: RegisteredCommand): boolean {\n if (SECRET_WORDS.test(line)) return false\n if (!command) return true\n if (Object.values(command.inputSchema.properties ?? {}).some((schema) => schema.secret)) {\n return false\n }\n let tokens: string[]\n try {\n tokens = parseShellLine(line)\n } catch {\n return false\n }\n const secretOptions = new Set(\n (command.options ?? []).filter((option) => option.secret).flatMap((option) => [\n `--${option.name}`,\n optionProperty(option),\n ]),\n )\n return !tokens.some((token) => secretOptions.has(token.split('=', 1)[0]))\n}\n","import type { CommandRegistry } from './registry.ts'\nimport type { ConfigStore, ResolvedConfig } from './config.ts'\nimport { effectiveConfigView } from './config.ts'\nimport { parseShellLine } from './argv.ts'\nimport { normalizeError } from './errors.ts'\nimport { ReplHistory } from './history.ts'\nimport type { InteractiveSession } from './runtime.ts'\nimport { getHost, type HostLineReader } from '../runtime/host.ts'\n\nexport interface ReplOptions {\n registry: CommandRegistry\n config: ResolvedConfig\n configStore: ConfigStore\n session: InteractiveSession\n execute(tokens: string[], signal: AbortSignal): Promise<void>\n}\n\nexport async function runRepl(options: ReplOptions): Promise<void> {\n const history = new ReplHistory(options.configStore.historyPath())\n const savedHistory = await history.load()\n const completer = (line: string): [string[], string] => {\n const fragment = line.match(/[^\\s]*$/)?.[0] ?? ''\n const prefix = line.slice(0, line.length - fragment.length)\n let tokens: string[]\n try {\n tokens = parseShellLine(prefix)\n } catch {\n tokens = prefix.trim().split(/\\s+/).filter(Boolean)\n }\n tokens.push(fragment)\n const candidates = options.registry.completionCandidates(tokens)\n return [candidates.filter((candidate) => candidate.startsWith(fragment)), fragment]\n }\n let running: AbortController | undefined\n const readline: HostLineReader = getHost().createLineReader({\n history: [...savedHistory].reverse(),\n historySize: history.limit,\n completer,\n onSigint: () => {\n if (running) running.abort()\n else {\n readline.write('^C\\n')\n readline.prompt()\n }\n },\n })\n const prompt = replPrompt(options.config)\n readline.write('BuckyOS interactive session. Use :help for commands and :exit to quit.\\n')\n readline.setPrompt(prompt)\n readline.prompt()\n\n try {\n for await (const rawLine of readline) {\n const line = rawLine.trim()\n if (!line) {\n readline.prompt()\n continue\n }\n if (line.startsWith(':')) {\n const shouldExit = await handleBuiltin(line, options, history)\n if (shouldExit) break\n readline.prompt()\n continue\n }\n\n let tokens: string[]\n try {\n tokens = parseShellLine(line)\n } catch (error) {\n const normalized = normalizeError(error)\n readline.write(`${normalized.code}: ${normalized.message}\\n`)\n readline.prompt()\n continue\n }\n let command\n try {\n if (tokens.length >= 2) command = options.registry.get(tokens[0], tokens[1])\n } catch {\n command = undefined\n }\n await history.add(line, command)\n running = new AbortController()\n try {\n await options.execute(tokens, running.signal)\n } catch (error) {\n const normalized = normalizeError(error)\n readline.write(`${normalized.code}: ${normalized.message}\\n`)\n } finally {\n running = undefined\n }\n readline.prompt()\n }\n } finally {\n readline.close()\n }\n}\n\nasync function handleBuiltin(\n line: string,\n options: ReplOptions,\n history: ReplHistory,\n): Promise<boolean> {\n const command = line.split(/\\s+/, 1)[0]\n switch (command) {\n case ':exit':\n case ':quit':\n return true\n case ':help':\n await getHost().stderr(\n [\n 'Enter: <module> <verb> [primary-selector] [action-options]',\n 'Built-ins: :help :context :session :history :reconnect :exit :quit',\n `Modules: ${options.registry.modules().map((module) => module.name).join(', ')}`,\n '',\n ].join('\\n'),\n )\n break\n case ':context':\n await getHost().stderr(`${JSON.stringify(effectiveConfigView(options.config), null, 2)}\\n`)\n break\n case ':session':\n await getHost().stderr(\n `${JSON.stringify(options.session.authentication.status(), null, 2)}\\n`,\n )\n break\n case ':history':\n await getHost().stderr(\n `${history.entries().map((entry, index) => `${index + 1} ${entry}`).join('\\n')}\\n`,\n )\n break\n case ':reconnect':\n try {\n await options.session.reconnect()\n await getHost().stderr('session reconnected\\n')\n } catch (error) {\n const normalized = normalizeError(error)\n await getHost().stderr(`${normalized.code}: ${normalized.message}\\n`)\n }\n break\n default:\n await getHost().stderr(`unknown REPL command: ${command}\\n`)\n }\n return false\n}\n\nfunction replPrompt(config: ResolvedConfig): string {\n const profile = config.profileName ?? 'default'\n const zone = config.zone ?? (config.endpoint ? new URL(config.endpoint).host : 'unresolved')\n const identity = config.identity ?? 'external-session'\n return `buckyos[${profile}|${zone}|${identity}]> `\n}\n","import type { CommandModule } from '../core/command.ts'\nimport { ToolError } from '../core/errors.ts'\n\nconst EMPTY_INPUT = { type: 'object' as const, properties: {}, additionalProperties: false }\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\n\nexport function createAuthModule(): CommandModule {\n return {\n name: 'auth',\n summary: 'Inspect the current authenticated session',\n commands: [\n {\n verb: 'whoami',\n summary: 'Show the effective principal and application identity',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production auth whoami'],\n handler: (ctx) =>\n Promise.resolve({\n principal: ctx.principal.id,\n appid: ctx.principal.appId,\n app_instance_id: ctx.principal.appInstanceId ?? null,\n authentication: ctx.principal.authentication,\n zone: ctx.connection.zone,\n }),\n },\n {\n verb: 'session-status',\n summary: 'Show the in-memory session state without exposing credentials',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production auth session-status'],\n handler: (ctx) => {\n if (!ctx.session) {\n throw new ToolError('INTERNAL_ERROR', 'authenticated session is unavailable', 9)\n }\n return Promise.resolve(ctx.session.status())\n },\n },\n ],\n }\n}\n","import type { CommandModule } from '../core/command.ts'\nimport type { CommandRegistry } from '../core/registry.ts'\nimport {\n configValueError,\n effectiveConfigView,\n type ProfileConfig,\n type ToolConfig,\n validateProfileName,\n} from '../core/config.ts'\nimport { UsageError } from '../core/errors.ts'\n\nconst EMPTY_INPUT = {\n type: 'object' as const,\n properties: {},\n additionalProperties: false,\n}\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\n\nexport function createCoreModules(registry: CommandRegistry): CommandModule[] {\n return [createCommandModule(registry), createConfigModule(), createCompletionModule(registry)]\n}\n\nfunction createCommandModule(registry: CommandRegistry): CommandModule {\n return {\n name: 'command',\n summary: 'Discover the machine-readable command registry',\n commands: [\n {\n verb: 'list',\n summary: 'List registered modules and commands',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos command list'],\n handler: () =>\n Promise.resolve({\n modules: registry.modules().map((module) => ({\n name: module.name,\n summary: module.summary,\n commands: module.commands.map((command) => ({\n verb: command.verb,\n summary: command.summary,\n })),\n })),\n }),\n },\n {\n verb: 'describe',\n summary: 'Describe one command and its complete schemas',\n positionals: [\n { name: 'target_module', description: 'Module name' },\n { name: 'target_verb', description: 'Verb name' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n target_module: { type: 'string', minLength: 1 },\n target_verb: { type: 'string', minLength: 1 },\n },\n required: ['target_module', 'target_verb'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos command describe system status'],\n handler: (_ctx, input) =>\n Promise.resolve(\n registry.describe(String(input.target_module), String(input.target_verb)),\n ),\n },\n ],\n }\n}\n\nfunction createConfigModule(): CommandModule {\n return {\n name: 'config',\n summary: 'Manage local non-secret tool configuration',\n commands: [\n {\n verb: 'list',\n summary: 'List the global configuration and available profiles',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos config list'],\n handler: async (ctx) => ({\n config: await ctx.configStore.readConfig(),\n profiles: await ctx.configStore.listProfiles(),\n }),\n },\n {\n verb: 'get',\n summary: 'Read a global or profile configuration value',\n positionals: [{ name: 'key', description: 'Configuration key', required: false }],\n options: [\n {\n name: 'profile-name',\n property: 'profile_name',\n description: 'Read a profile',\n type: 'string',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n profile_name: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: [\n 'buckyos config get output',\n 'buckyos config get zone --profile-name production',\n ],\n handler: async (ctx, input) => {\n const profileName = optionalString(input.profile_name)\n const value = profileName\n ? await ctx.configStore.readProfile(profileName)\n : await ctx.configStore.readConfig()\n if (!value) throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n const key = optionalString(input.key)\n if (!key) return { value }\n if (!Object.hasOwn(value, key)) {\n throw new UsageError('CONFIG_KEY_NOT_FOUND', `configuration key not found: ${key}`)\n }\n return { key, value: (value as unknown as Record<string, unknown>)[key] }\n },\n },\n {\n verb: 'set',\n summary: 'Atomically set a global or profile configuration value',\n positionals: [{ name: 'key', description: 'Configuration key' }],\n options: [\n { name: 'value', description: 'Configuration value', type: 'string', required: true },\n {\n name: 'profile-name',\n property: 'profile_name',\n description: 'Write a profile',\n type: 'string',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n profile_name: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: [\n 'buckyos config set output --value json',\n 'buckyos config set zone --value corp.example.com --profile-name production',\n ],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const rawValue = String(input.value)\n const profileName = optionalString(input.profile_name)\n if (profileName) {\n validateProfileName(profileName)\n const profile = await ctx.configStore.readProfile(profileName) ?? { schema_version: 1 }\n setProfileValue(profile, key, rawValue)\n await ctx.configStore.writeProfile(profileName, profile)\n return {\n profile: profileName,\n key,\n value: (profile as unknown as Record<string, unknown>)[key],\n }\n }\n const config = await ctx.configStore.readConfig()\n setGlobalValue(config, key, rawValue)\n await ctx.configStore.writeConfig(config)\n return { profile: null, key, value: (config as unknown as Record<string, unknown>)[key] }\n },\n },\n {\n verb: 'use',\n summary: 'Select the default profile',\n positionals: [{ name: 'profile_name', description: 'Profile name' }],\n inputSchema: {\n type: 'object',\n properties: { profile_name: { type: 'string', minLength: 1 } },\n required: ['profile_name'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos config use production'],\n handler: async (ctx, input) => {\n const profileName = String(input.profile_name)\n if (!await ctx.configStore.readProfile(profileName)) {\n throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n }\n const config = await ctx.configStore.readConfig()\n config.default_profile = profileName\n await ctx.configStore.writeConfig(config)\n return { default_profile: profileName }\n },\n },\n {\n verb: 'check',\n summary: 'Validate configuration and show a redacted effective view',\n options: [\n {\n name: 'effective',\n description: 'Include the effective merged configuration',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: { effective: { type: 'boolean' } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos --profile production config check --effective'],\n handler: async (ctx, input) => ({\n valid: true,\n profile_count: (await ctx.configStore.listProfiles()).length,\n ...(input.effective ? { effective: effectiveConfigView(ctx.config) } : {}),\n }),\n },\n ],\n }\n}\n\nfunction createCompletionModule(registry: CommandRegistry): CommandModule {\n return {\n name: 'completion',\n summary: 'Generate shell completion scripts from the command registry',\n commands: [\n {\n verb: 'generate',\n summary: 'Generate completion for bash, zsh, or fish',\n options: [\n {\n name: 'shell',\n description: 'Target shell',\n type: 'string',\n required: true,\n enum: ['bash', 'zsh', 'fish'],\n },\n ],\n inputSchema: {\n type: 'object',\n properties: { shell: { type: 'string', enum: ['bash', 'zsh', 'fish'] } },\n required: ['shell'],\n additionalProperties: false,\n },\n outputSchema: {\n type: 'object',\n properties: { shell: { type: 'string' }, script: { type: 'string' } },\n required: ['shell', 'script'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos --output text completion generate --shell bash'],\n handler: (_ctx, input) => {\n const shell = String(input.shell)\n return Promise.resolve({ shell, script: completionScript(registry, shell) })\n },\n },\n ],\n }\n}\n\nfunction setGlobalValue(config: ToolConfig, key: string, value: string): void {\n if (key === 'default_profile') {\n validateProfileName(value)\n config.default_profile = value\n } else if (key === 'output') {\n config.output = outputValue(value)\n } else {\n throw configValueError(`unsupported global configuration key: ${key}`)\n }\n}\n\nfunction setProfileValue(profile: ProfileConfig, key: string, value: string): void {\n if (key === 'zone' || key === 'endpoint' || key === 'identity') profile[key] = value\n else if (key === 'default_protocol') {\n if (value !== 'http://' && value !== 'https://') {\n throw configValueError('default_protocol must be http:// or https://')\n }\n profile.default_protocol = value\n } else if (key === 'output') profile.output = outputValue(value)\n else throw configValueError(`unsupported profile configuration key: ${key}`)\n}\n\nfunction outputValue(value: string): 'json' | 'jsonl' | 'table' | 'text' | 'raw' {\n if (!['json', 'jsonl', 'table', 'text', 'raw'].includes(value)) {\n throw configValueError(`invalid output format: ${value}`)\n }\n return value as 'json' | 'jsonl' | 'table' | 'text' | 'raw'\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value ? value : undefined\n}\n\nfunction completionScript(registry: CommandRegistry, shell: string): string {\n const modules = registry.modules().map((module) => module.name).join(' ')\n const commands = registry.commands().map((command) => `${command.module}:${command.verb}`).join(\n ' ',\n )\n if (shell === 'fish') {\n return `complete -c buckyos -f\\ncomplete -c buckyos -n '__fish_use_subcommand' -a '${modules}'\\n# ${commands}\\n`\n }\n if (shell === 'zsh') {\n return `#compdef buckyos\\n_arguments '1:module:(${modules})' '*::argument:->args'\\n# ${commands}\\n`\n }\n return `_buckyos_complete() {\\n if [ \"${'${COMP_CWORD}'}\" -eq 1 ]; then\\n COMPREPLY=( $(compgen -W '${modules}' -- \"${'${COMP_WORDS[COMP_CWORD]}'}\") )\\n fi\\n}\\ncomplete -F _buckyos_complete buckyos\\n# ${commands}\\n`\n}\n","import type { CommandContext } from './context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from './errors.ts'\n\nexport function rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nexport async function callService<T = unknown>(\n ctx: CommandContext,\n service: string,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n try {\n return await ctx.clients.call<T>(service, method, params, rpcOptions(ctx))\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const stable = message.match(/\\b((?:TASK|AUDIT|DIAGNOSTIC|LOG)_[A-Z0-9_]+):/)\n if (stable) throw new ToolError(stable[1], message)\n throw error\n }\n}\n\nexport function expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, EXIT_INTERNAL)\n }\n return value as Record<string, unknown>\n}\n\nexport function expectString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be a string`, EXIT_INTERNAL)\n }\n return value\n}\n\nexport function inputString(input: Record<string, unknown>, key: string): string | undefined {\n const value = input[key]\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nexport function requiredInputString(input: Record<string, unknown>, key: string): string {\n const value = inputString(input, key)\n if (!value) throw new UsageError('INVALID_ARGUMENT', `${key} is required`)\n return value\n}\n\nexport function parseTimestamp(value: unknown, key: string): number | undefined {\n if (value === undefined) return undefined\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) return value\n if (typeof value !== 'string' || !value.trim()) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339 or Unix milliseconds`)\n }\n if (/^\\d+$/.test(value)) {\n const milliseconds = Number(value)\n if (Number.isSafeInteger(milliseconds)) return milliseconds\n }\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds)) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339 or Unix milliseconds`)\n }\n return milliseconds\n}\n\nexport function splitServices(value: unknown): string[] {\n const items = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',') : []\n return [...new Set(items.map((item) => String(item).trim()).filter(Boolean))]\n}\n","import type { CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { callService, expectObject } from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst EMPTY_INPUT: JsonSchema = { type: 'object', properties: {}, additionalProperties: false }\nconst BUCKYOS_INFO: JsonSchema = {\n type: 'object',\n properties: {\n version: { type: 'string' },\n build_version: { type: 'string' },\n release_channel: { type: 'string' },\n target: { type: 'string' },\n },\n additionalProperties: true,\n}\n\nexport function createSystemModule(): CommandModule {\n return {\n name: 'system',\n summary: 'Inspect BuckyOS Zone health and version state',\n commands: [\n {\n verb: 'status',\n summary: 'Get host resource state, configured service keys, and the BuckyOS version',\n description:\n 'state and warnings come from CPU/memory/disk/swap of the Control Panel host; services lists the keys under services/ with status unknown (not a per-service health check); buckyos is the system.buckyos_info.get record.',\n inputSchema: EMPTY_INPUT,\n outputSchema: {\n type: 'object',\n properties: { buckyos: BUCKYOS_INFO },\n required: ['buckyos'],\n additionalProperties: true,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production system status'],\n handler: async (ctx) => {\n const [status, buckyos] = await Promise.all([\n callService(ctx, CONTROL_PANEL, 'system.status', {}),\n buckyosInfo(ctx),\n ])\n return { ...expectObject(status, 'system.status'), buckyos }\n },\n },\n {\n verb: 'info',\n summary: 'Get the installed BuckyOS version, build version, and release channel',\n description:\n 'build_version is build<YYMMDD>.<branch>.<commit12>[.dirty]; any authenticated identity may read it.',\n inputSchema: EMPTY_INPUT,\n outputSchema: BUCKYOS_INFO,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system info'],\n handler: async (ctx) => await buckyosInfo(ctx),\n },\n ],\n }\n}\n\nasync function buckyosInfo(ctx: CommandContext): Promise<Record<string, unknown>> {\n return expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.buckyos_info.get', {}),\n 'system.buckyos_info.get',\n )\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst SERVICE_NAME = 'system_config'\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: false }\nconst KEY_INPUT: JsonSchema = {\n type: 'object',\n properties: { key: { type: 'string', minLength: 1 } },\n required: ['key'],\n additionalProperties: false,\n}\n\nexport function createSystemConfigModule(): CommandModule {\n return {\n name: 'system-config',\n summary: 'Read and modify the Zone system-config key-value store',\n commands: [\n {\n verb: 'get',\n summary: 'Get one system-config value',\n positionals: [{ name: 'key', description: 'System-config key' }],\n inputSchema: KEY_INPUT,\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n value: { type: 'string' },\n version: { type: 'integer' },\n text: { type: 'string' },\n },\n required: ['key', 'value', 'version', 'text'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos --profile production system-config get boot/config',\n 'buckyos --output text system-config get services/example/config',\n ],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const result = await callSystemConfig<unknown>(ctx, 'sys_config_get', { key })\n if (result === null) {\n throw new ToolError(\n 'RESOURCE_NOT_FOUND',\n `system-config key not found: ${key}`,\n )\n }\n if (!isConfigValue(result)) invalidResponse('sys_config_get')\n return { key, value: result.value, version: result.version, text: result.value }\n },\n },\n {\n verb: 'list',\n summary: 'List direct child keys under a system-config key',\n positionals: [\n { name: 'key', description: 'Parent key; omit to list the root', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { key: { type: 'string' } },\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n items: { type: 'array', items: { type: 'string' } },\n },\n required: ['key', 'items'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos system-config list',\n 'buckyos system-config list services',\n ],\n handler: async (ctx, input) => {\n const key = typeof input.key === 'string' ? input.key : ''\n const result = await callSystemConfig<unknown>(ctx, 'sys_config_list', { key })\n if (!Array.isArray(result) || !result.every((item) => typeof item === 'string')) {\n invalidResponse('sys_config_list')\n }\n return { key, items: result as string[] }\n },\n },\n setCommand(),\n setFileCommand(),\n mutationCommand({\n verb: 'append',\n summary: 'Append text to an existing system-config value',\n method: 'sys_config_append',\n valueProperty: 'append_value',\n resultProperty: 'appended',\n }),\n ],\n }\n}\n\nfunction setCommand(): CommandDefinition {\n return {\n verb: 'set',\n summary: 'Set one system-config value',\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n { name: 'value', description: 'Value to store', type: 'string', required: true },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: { key: { type: 'string' }, updated: { type: 'boolean' } },\n required: ['key', 'updated'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system-config set services/example/config --value enabled'],\n handler: async (ctx, input) => {\n const key = String(input.key)\n await callSystemConfig(ctx, 'sys_config_set', { key, value: String(input.value) })\n return { key, updated: true }\n },\n }\n}\n\nfunction setFileCommand(): CommandDefinition {\n return {\n verb: 'set-file',\n summary: 'Set one system-config value from a file',\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n {\n name: 'file',\n description: 'File whose content will be stored',\n type: 'string',\n required: true,\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n file: { type: 'string', minLength: 1 },\n },\n required: ['key', 'file'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: { key: { type: 'string' }, updated: { type: 'boolean' } },\n required: ['key', 'updated'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system-config set-file services/example/config --file ./config.json'],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const value = await readValueFile(String(input.file))\n if (!value) throw new UsageError('INVALID_ARGUMENT', 'system-config value must not be empty')\n await callSystemConfig(ctx, 'sys_config_set', { key, value })\n return { key, updated: true }\n },\n }\n}\n\nfunction mutationCommand(options: {\n verb: string\n summary: string\n method: string\n valueProperty: string\n resultProperty: string\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n { name: 'value', description: 'Value to append', type: 'string', required: true },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n [options.resultProperty]: { type: 'boolean' },\n },\n required: ['key', options.resultProperty],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [`buckyos system-config ${options.verb} system/rbac/policy --value 'p,...'`],\n handler: async (ctx, input) => {\n const key = String(input.key)\n await callSystemConfig(ctx, options.method, {\n key,\n [options.valueProperty]: String(input.value),\n })\n return { key, [options.resultProperty]: true }\n },\n }\n}\n\nasync function callSystemConfig<T = unknown>(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n return await ctx.clients.call<T>(SERVICE_NAME, method, params, {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n })\n}\n\nasync function readValueFile(path: string): Promise<string> {\n try {\n return await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError(\n 'INPUT_READ_FAILED',\n `failed to read value file: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n}\n\nfunction isConfigValue(value: unknown): value is { value: string; version: number } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const object = value as Record<string, unknown>\n return typeof object.value === 'string' && Number.isSafeInteger(object.version) &&\n Number(object.version) >= 0\n}\n\nfunction invalidResponse(method: string): never {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n `system-config returned an invalid response for ${method}`,\n EXIT_INTERNAL,\n )\n}\n","import { ToolError, UsageError } from '../core/errors.ts'\nimport {\n getHost,\n type HostDirEntry,\n type HostFile,\n type HostFileInfo,\n isHostError,\n} from '../runtime/host.ts'\n\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst relative = (from: string, to: string) => getHost().path.relative(from, to)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst BLOCK_SIZE = 512\nconst ZIP_LOCAL_SIGNATURE = 0x04034b50\nconst ZIP_CENTRAL_SIGNATURE = 0x02014b50\nconst ZIP_EOCD_SIGNATURE = 0x06054b50\nconst ZIP64_EOCD_SIGNATURE = 0x06064b50\nconst ZIP64_LOCATOR_SIGNATURE = 0x07064b50\nconst MAX_CENTRAL_DIRECTORY = 64 * 1024 * 1024\nexport const MAX_PIKG_ENTRIES = 4096\n\nconst CRC_TABLE = new Uint32Array(256)\nfor (let index = 0; index < CRC_TABLE.length; index++) {\n let value = index\n for (let bit = 0; bit < 8; bit++) value = (value >>> 1) ^ (value & 1 ? 0xedb88320 : 0)\n CRC_TABLE[index] = value >>> 0\n}\n\nexport interface FileDigest {\n size: number\n sha256: string\n crc32: number\n}\n\nexport interface ZipEntry {\n name: string\n compressedSize: number\n size: number\n crc32: number\n compression: number\n flags: number\n localOffset: number\n dataOffset: number\n externalAttributes: number\n isDirectory: boolean\n}\n\nexport interface OpenZip {\n path: string\n size: number\n entries: ZipEntry[]\n byName: Map<string, ZipEntry>\n}\n\ninterface TarSource {\n archivePath: string\n physicalPath: string\n kind: 'file' | 'directory'\n size: number\n executable: boolean\n identity: string\n contentDigest?: string\n}\n\ninterface ZipWriteSource {\n name: string\n bytes?: Uint8Array\n path?: string\n}\n\nexport async function digestFile(path: string): Promise<FileDigest> {\n const file = await getHost().open(path, { read: true })\n const sha = getHost().createHash('sha256')\n let crc = 0xffffffff\n let size = 0\n try {\n const buffer = new Uint8Array(256 * 1024)\n while (true) {\n const read = await file.read(buffer)\n if (read === null) break\n const chunk = buffer.subarray(0, read)\n sha.update(chunk)\n crc = updateCrc32(crc, chunk)\n size += read\n if (!Number.isSafeInteger(size)) throw new UsageError('FILE_TOO_LARGE', 'file is too large')\n }\n } finally {\n await file.close()\n }\n return { size, sha256: sha.digestHex(), crc32: (crc ^ 0xffffffff) >>> 0 }\n}\n\nexport function sha256Bytes(bytes: Uint8Array): string {\n const sha = getHost().createHash('sha256')\n sha.update(bytes)\n return sha.digestHex()\n}\n\nexport async function createDeterministicTarGz(\n sourceDir: string,\n destination: string,\n): Promise<void> {\n const root = await getHost().realPath(sourceDir)\n const before = await collectTarSources(root)\n const tarPath = `${destination}.tar-${crypto.randomUUID()}`\n const tar = await getHost().open(tarPath, { createNew: true, write: true, mode: 0o600 })\n try {\n for (const source of before) {\n const header = tarHeader(source)\n await writeAll(tar, header)\n if (source.kind === 'file') {\n await copyFileToWriter(source.physicalPath, tar)\n const padding = (BLOCK_SIZE - source.size % BLOCK_SIZE) % BLOCK_SIZE\n if (padding) await writeAll(tar, new Uint8Array(padding))\n }\n }\n await writeAll(tar, new Uint8Array(BLOCK_SIZE * 2))\n await tar.sync()\n } finally {\n await tar.close()\n }\n\n try {\n const after = await collectTarSources(root)\n if (JSON.stringify(before.map(sourceIdentity)) !== JSON.stringify(after.map(sourceIdentity))) {\n throw new ToolError('SOURCE_CHANGED', 'subpackage source changed while it was archived')\n }\n await gzipFile(tarPath, destination)\n } finally {\n await removeIfExists(tarPath)\n }\n}\n\nexport async function gzipFile(source: string, destination: string): Promise<void> {\n await getHost().gzipFile(source, destination)\n}\n\nexport interface TarFileEntry {\n path: string\n executable: boolean\n bytes: Uint8Array\n}\n\nexport async function readTarGz(bytes: Uint8Array, limit: number): Promise<TarFileEntry[]> {\n const tar = await gunzipBytes(bytes, limit)\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const text = (offset: number, length: number) =>\n decoder.decode(tar.subarray(offset, offset + length)).replace(/\\0.*$/s, '')\n const files: TarFileEntry[] = []\n const seen = new Set<string>()\n let offset = 0\n while (\n offset + BLOCK_SIZE <= tar.length && tar.subarray(offset, offset + BLOCK_SIZE).some(Boolean)\n ) {\n let raw: string\n let size: number\n let mode: number\n try {\n const prefix = text(offset + 257, 6) === 'ustar' ? text(offset + 345, 155) : ''\n raw = prefix ? `${prefix}/${text(offset, 100)}` : text(offset, 100)\n size = Number.parseInt(text(offset + 124, 12).trim() || '0', 8)\n mode = Number.parseInt(text(offset + 100, 8).trim() || '0', 8)\n } catch {\n throw invalidZip('payload', 'tar header is not valid UTF-8')\n }\n const type = String.fromCharCode(tar[offset + 156] || 0x30)\n const path = raw.replace(/^(?:\\.\\/)+/, '').replace(/\\/$/, '')\n const start = offset + BLOCK_SIZE\n if (!Number.isSafeInteger(size) || size < 0 || start + size > tar.length) {\n throw invalidZip('payload', `tar entry is truncated: ${raw}`)\n }\n offset = start + Math.ceil(size / BLOCK_SIZE) * BLOCK_SIZE\n if (type === '5' && (path === '' || path === '.')) continue\n if (\n !path || path.startsWith('/') || /^[A-Za-z]:/.test(path) || path.includes('\\\\') ||\n path.split('/').some((segment) => !segment || segment === '.' || segment === '..')\n ) {\n throw invalidZip('payload', `unsafe tar entry path: ${JSON.stringify(raw)}`)\n }\n if (type === '5') continue\n if (type !== '0') {\n throw invalidZip('payload', `tar entry is not a regular file or directory: ${path}`)\n }\n if (seen.has(path)) throw invalidZip('payload', `duplicate tar entry: ${path}`)\n seen.add(path)\n files.push({ path, executable: (mode & 0o111) !== 0, bytes: tar.slice(start, start + size) })\n }\n return files\n}\n\nasync function gunzipBytes(bytes: Uint8Array, limit: number): Promise<Uint8Array> {\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(bytes)\n controller.close()\n },\n }).pipeThrough(\n new DecompressionStream('gzip') as unknown as ReadableWritablePair<Uint8Array, Uint8Array>,\n )\n const chunks: Uint8Array[] = []\n let size = 0\n try {\n for await (const chunk of stream) {\n size += chunk.length\n if (size > limit) throw invalidZip('limits', 'payload expands beyond the size limit')\n chunks.push(chunk)\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', 'payload is not a valid gzip stream')\n }\n const result = new Uint8Array(size)\n let position = 0\n for (const chunk of chunks) {\n result.set(chunk, position)\n position += chunk.length\n }\n return result\n}\n\nexport async function writeStoredZip(\n destination: string,\n sources: ZipWriteSource[],\n): Promise<void> {\n if (sources.length > MAX_PIKG_ENTRIES) {\n throw new UsageError('TOO_MANY_ENTRIES', 'PIKG contains too many entries')\n }\n const names = new Set<string>()\n const prepared = [] as Array<\n ZipWriteSource & { nameBytes: Uint8Array; digest: FileDigest; offset: number; zip64: boolean }\n >\n for (const source of sources) {\n validateZipEntryName(source.name)\n if (names.has(source.name)) throw invalidZip('structure', `duplicate entry: ${source.name}`)\n names.add(source.name)\n if ((source.bytes === undefined) === (source.path === undefined)) {\n throw new Error(`zip source ${source.name} must provide exactly one body`)\n }\n const digest = source.bytes\n ? {\n size: source.bytes.byteLength,\n sha256: sha256Bytes(source.bytes),\n crc32: crc32(source.bytes),\n }\n : await digestFile(source.path!)\n prepared.push({\n ...source,\n nameBytes: new TextEncoder().encode(source.name),\n digest,\n offset: 0,\n zip64: digest.size > 0xffffffff,\n })\n }\n\n await getHost().mkdir(dirname(destination), { recursive: true })\n const output = await getHost().open(destination, { createNew: true, write: true, mode: 0o600 })\n let offset = 0\n const centralRecords: Uint8Array[] = []\n try {\n for (const source of prepared) {\n source.offset = offset\n source.zip64 ||= offset > 0xffffffff\n const localExtra = source.zip64 ? zip64Extra([source.digest.size, source.digest.size]) : EMPTY\n const local = new Uint8Array(30 + source.nameBytes.length + localExtra.length)\n const view = new DataView(local.buffer)\n view.setUint32(0, ZIP_LOCAL_SIGNATURE, true)\n view.setUint16(4, source.zip64 ? 45 : 20, true)\n view.setUint16(6, 0x0800, true)\n view.setUint16(8, 0, true)\n view.setUint32(14, source.digest.crc32, true)\n view.setUint32(18, source.zip64 ? 0xffffffff : source.digest.size, true)\n view.setUint32(22, source.zip64 ? 0xffffffff : source.digest.size, true)\n view.setUint16(26, source.nameBytes.length, true)\n view.setUint16(28, localExtra.length, true)\n local.set(source.nameBytes, 30)\n local.set(localExtra, 30 + source.nameBytes.length)\n await writeAll(output, local)\n offset += local.length\n if (source.bytes) {\n await writeAll(output, source.bytes)\n } else {\n await copyFileToWriter(source.path!, output)\n }\n offset += source.digest.size\n\n const centralExtra = source.zip64\n ? zip64Extra([source.digest.size, source.digest.size, source.offset])\n : EMPTY\n const central = new Uint8Array(46 + source.nameBytes.length + centralExtra.length)\n const centralView = new DataView(central.buffer)\n centralView.setUint32(0, ZIP_CENTRAL_SIGNATURE, true)\n centralView.setUint16(4, (3 << 8) | 45, true)\n centralView.setUint16(6, source.zip64 ? 45 : 20, true)\n centralView.setUint16(8, 0x0800, true)\n centralView.setUint16(10, 0, true)\n centralView.setUint32(16, source.digest.crc32, true)\n centralView.setUint32(20, source.zip64 ? 0xffffffff : source.digest.size, true)\n centralView.setUint32(24, source.zip64 ? 0xffffffff : source.digest.size, true)\n centralView.setUint16(28, source.nameBytes.length, true)\n centralView.setUint16(30, centralExtra.length, true)\n centralView.setUint32(38, 0o100644 << 16, true)\n centralView.setUint32(42, source.zip64 ? 0xffffffff : source.offset, true)\n central.set(source.nameBytes, 46)\n central.set(centralExtra, 46 + source.nameBytes.length)\n centralRecords.push(central)\n }\n\n const centralOffset = offset\n for (const record of centralRecords) {\n await writeAll(output, record)\n offset += record.length\n }\n const centralSize = offset - centralOffset\n const needsZip64 = prepared.some((source) => source.zip64) || centralOffset > 0xffffffff ||\n centralSize > 0xffffffff\n if (needsZip64) {\n const zip64Offset = offset\n const eocd64 = new Uint8Array(56)\n const view64 = new DataView(eocd64.buffer)\n view64.setUint32(0, ZIP64_EOCD_SIGNATURE, true)\n setUint64(view64, 4, 44)\n view64.setUint16(12, (3 << 8) | 45, true)\n view64.setUint16(14, 45, true)\n setUint64(view64, 24, prepared.length)\n setUint64(view64, 32, prepared.length)\n setUint64(view64, 40, centralSize)\n setUint64(view64, 48, centralOffset)\n await writeAll(output, eocd64)\n offset += eocd64.length\n const locator = new Uint8Array(20)\n const locatorView = new DataView(locator.buffer)\n locatorView.setUint32(0, ZIP64_LOCATOR_SIGNATURE, true)\n setUint64(locatorView, 8, zip64Offset)\n locatorView.setUint32(16, 1, true)\n await writeAll(output, locator)\n offset += locator.length\n }\n const eocd = new Uint8Array(22)\n const view = new DataView(eocd.buffer)\n view.setUint32(0, ZIP_EOCD_SIGNATURE, true)\n view.setUint16(8, needsZip64 ? 0xffff : prepared.length, true)\n view.setUint16(10, needsZip64 ? 0xffff : prepared.length, true)\n view.setUint32(12, needsZip64 ? 0xffffffff : centralSize, true)\n view.setUint32(16, needsZip64 ? 0xffffffff : centralOffset, true)\n await writeAll(output, eocd)\n await output.sync()\n } finally {\n await output.close()\n }\n}\n\nexport async function openZip(path: string): Promise<OpenZip> {\n const stat = await getHost().stat(path)\n if (!stat.isFile || stat.size < 22) throw invalidZip('container', 'PIKG is not a ZIP file')\n const file = await getHost().open(path, { read: true })\n try {\n const magic = await readAt(file, 0, 4)\n if (\n new DataView(magic.buffer, magic.byteOffset, magic.byteLength).getUint32(0, true) !==\n ZIP_LOCAL_SIGNATURE\n ) {\n throw invalidZip('container', 'PIKG magic mismatch')\n }\n const tailLength = Math.min(stat.size, 22 + 65535)\n const tail = await readAt(file, stat.size - tailLength, tailLength)\n const eocdPosition = findLastSignature(tail, ZIP_EOCD_SIGNATURE)\n if (eocdPosition < 0 || eocdPosition + 22 > tail.length) {\n throw invalidZip('container', 'ZIP end-of-central-directory record is missing')\n }\n const eocd = new DataView(\n tail.buffer,\n tail.byteOffset + eocdPosition,\n tail.length - eocdPosition,\n )\n const commentLength = eocd.getUint16(20, true)\n if (eocdPosition + 22 + commentLength !== tail.length) {\n throw invalidZip('container', 'ZIP has trailing data or a truncated comment')\n }\n if (eocd.getUint16(4, true) !== 0 || eocd.getUint16(6, true) !== 0) {\n throw invalidZip('container', 'multi-disk ZIP files are not supported')\n }\n let count = eocd.getUint16(10, true)\n if (eocd.getUint16(8, true) !== count) {\n throw invalidZip('container', 'ZIP entry counts disagree')\n }\n let centralSize = eocd.getUint32(12, true)\n let centralOffset = eocd.getUint32(16, true)\n if (count === 0xffff || centralSize === 0xffffffff || centralOffset === 0xffffffff) {\n const eocdAbsolute = stat.size - tailLength + eocdPosition\n if (eocdAbsolute < 20) throw invalidZip('container', 'ZIP64 locator is missing')\n const locatorBytes = await readAt(file, eocdAbsolute - 20, 20)\n const locator = new DataView(locatorBytes.buffer, locatorBytes.byteOffset, 20)\n if (locator.getUint32(0, true) !== ZIP64_LOCATOR_SIGNATURE) {\n throw invalidZip('container', 'ZIP64 locator signature mismatch')\n }\n if (locator.getUint32(4, true) !== 0 || locator.getUint32(16, true) !== 1) {\n throw invalidZip('container', 'multi-disk ZIP64 files are not supported')\n }\n const recordOffset = uint64(locator, 8)\n const recordBytes = await readAt(file, recordOffset, 56)\n const record = new DataView(recordBytes.buffer, recordBytes.byteOffset, 56)\n if (record.getUint32(0, true) !== ZIP64_EOCD_SIGNATURE) {\n throw invalidZip('container', 'ZIP64 end record signature mismatch')\n }\n if (record.getUint32(16, true) !== 0 || record.getUint32(20, true) !== 0) {\n throw invalidZip('container', 'multi-disk ZIP64 files are not supported')\n }\n if (uint64(record, 24) !== uint64(record, 32)) {\n throw invalidZip('container', 'ZIP64 entry counts disagree')\n }\n count = uint64(record, 32)\n centralSize = uint64(record, 40)\n centralOffset = uint64(record, 48)\n }\n if (count > MAX_PIKG_ENTRIES) throw invalidZip('structure', 'PIKG has too many entries')\n if (centralSize > MAX_CENTRAL_DIRECTORY) {\n throw invalidZip('structure', 'PIKG central directory exceeds the size limit')\n }\n if (centralOffset + centralSize > stat.size) {\n throw invalidZip('container', 'ZIP central directory is out of bounds')\n }\n const central = await readAt(file, centralOffset, centralSize)\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const entries: ZipEntry[] = []\n const byName = new Map<string, ZipEntry>()\n const fileNames = new Set<string>()\n const directories = new Set<string>()\n let position = 0\n for (let index = 0; index < count; index++) {\n if (position + 46 > central.length || u32(central, position) !== ZIP_CENTRAL_SIGNATURE) {\n throw invalidZip('structure', `central directory entry #${index} is truncated`)\n }\n const flags = u16(central, position + 8)\n const compression = u16(central, position + 10)\n const crc = u32(central, position + 16)\n let compressedSize = u32(central, position + 20)\n let size = u32(central, position + 24)\n const nameLength = u16(central, position + 28)\n const extraLength = u16(central, position + 30)\n const commentLength = u16(central, position + 32)\n const externalAttributes = u32(central, position + 38)\n let localOffset = u32(central, position + 42)\n const end = position + 46 + nameLength + extraLength + commentLength\n if (end > central.length) throw invalidZip('structure', 'central directory is truncated')\n let name: string\n try {\n name = decoder.decode(central.subarray(position + 46, position + 46 + nameLength))\n } catch {\n throw invalidZip('structure', `entry #${index} name is not UTF-8`)\n }\n validateZipEntryName(name)\n if (byName.has(name)) throw invalidZip('structure', `duplicate entry: ${name}`)\n if (flags & 0x0001) throw invalidZip('structure', `encrypted entry is not allowed: ${name}`)\n if (![0, 8].includes(compression)) {\n throw invalidZip('structure', `unsupported compression method for ${name}`)\n }\n const extra = central.subarray(\n position + 46 + nameLength,\n position + 46 + nameLength + extraLength,\n )\n if (size === 0xffffffff || compressedSize === 0xffffffff || localOffset === 0xffffffff) {\n const values = parseZip64Extra(extra)\n let valueIndex = 0\n if (size === 0xffffffff) size = requiredZip64(values, valueIndex++, name)\n if (compressedSize === 0xffffffff) {\n compressedSize = requiredZip64(values, valueIndex++, name)\n }\n if (localOffset === 0xffffffff) localOffset = requiredZip64(values, valueIndex++, name)\n }\n const mode = (externalAttributes >>> 16) & 0xffff\n if ((mode & 0xf000) === 0xa000) {\n throw invalidZip('structure', `symlink entry is not allowed: ${name}`)\n }\n const isDirectory = name.endsWith('/')\n const normalized = name.replace(/\\/$/, '')\n if (isDirectory) directories.add(normalized)\n else fileNames.add(name)\n const entry: ZipEntry = {\n name,\n compressedSize,\n size,\n crc32: crc,\n compression,\n flags,\n localOffset,\n dataOffset: 0,\n externalAttributes,\n isDirectory,\n }\n entries.push(entry)\n byName.set(name, entry)\n position = end\n }\n if (position !== central.length) {\n throw invalidZip('structure', 'central directory size mismatch')\n }\n for (const fileName of fileNames) {\n const parts = fileName.split('/')\n let prefix = ''\n for (const part of parts.slice(0, -1)) {\n prefix = prefix ? `${prefix}/${part}` : part\n directories.add(prefix)\n }\n }\n const conflict = [...fileNames].find((name) => directories.has(name))\n if (conflict) throw invalidZip('structure', `path is both file and directory: ${conflict}`)\n\n const intervals: Array<[number, number, string]> = []\n for (const entry of entries) {\n const local = await readAt(file, entry.localOffset, 30)\n if (u32(local, 0) !== ZIP_LOCAL_SIGNATURE) {\n throw invalidZip('structure', `local header is missing for ${entry.name}`)\n }\n const localFlags = u16(local, 6)\n const localCompression = u16(local, 8)\n const localNameLength = u16(local, 26)\n const localExtraLength = u16(local, 28)\n if (localFlags !== entry.flags || localCompression !== entry.compression) {\n throw invalidZip('structure', `local header disagrees for ${entry.name}`)\n }\n const localName = await readAt(file, entry.localOffset + 30, localNameLength)\n let decodedLocalName: string\n try {\n decodedLocalName = decoder.decode(localName)\n } catch {\n throw invalidZip('structure', `local entry name is not UTF-8: ${entry.name}`)\n }\n if (decodedLocalName !== entry.name) {\n throw invalidZip('structure', `local entry name disagrees for ${entry.name}`)\n }\n entry.dataOffset = entry.localOffset + 30 + localNameLength + localExtraLength\n const end = entry.dataOffset + entry.compressedSize\n if (end > centralOffset) {\n throw invalidZip('structure', `entry data is out of bounds: ${entry.name}`)\n }\n intervals.push([entry.localOffset, end, entry.name])\n }\n intervals.sort((left, right) => left[0] - right[0])\n for (let index = 1; index < intervals.length; index++) {\n if (intervals[index][0] < intervals[index - 1][1]) {\n throw invalidZip('structure', `overlapping ZIP entries: ${intervals[index][2]}`)\n }\n }\n return { path: resolve(path), size: stat.size, entries, byName }\n } finally {\n await file.close()\n }\n}\n\nexport async function readZipEntry(\n archive: OpenZip,\n entry: ZipEntry,\n limit: number,\n): Promise<Uint8Array> {\n if (entry.size > limit) throw invalidZip('limits', `entry exceeds size limit: ${entry.name}`)\n const chunks: Uint8Array[] = []\n let size = 0\n const verification = createEntryVerification(entry)\n try {\n for await (const chunk of zipEntryStream(archive.path, entry)) {\n size += chunk.byteLength\n if (size > limit || size > entry.size) {\n throw invalidZip('limits', `entry expands beyond its declared size: ${entry.name}`)\n }\n verification.update(chunk)\n chunks.push(chunk.slice())\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', `failed to read entry ${entry.name}`)\n }\n verification.finish(size)\n const result = new Uint8Array(size)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n return result\n}\n\nexport async function verifyZipEntry(\n archive: OpenZip,\n entry: ZipEntry,\n expectedSha256?: string,\n): Promise<FileDigest> {\n const verification = createEntryVerification(entry)\n try {\n for await (const chunk of zipEntryStream(archive.path, entry)) verification.update(chunk)\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', `failed to read entry ${entry.name}`)\n }\n const result = verification.finish()\n if (expectedSha256 && result.sha256 !== expectedSha256.toLowerCase()) {\n throw invalidZip('content', `content digest mismatch: ${entry.name}`, entry.name)\n }\n return result\n}\n\nfunction createEntryVerification(entry: ZipEntry): {\n update(chunk: Uint8Array): void\n finish(actualSize?: number): FileDigest\n} {\n const sha = getHost().createHash('sha256')\n let crc = 0xffffffff\n let size = 0\n return {\n update(chunk) {\n size += chunk.length\n if (size > entry.size) {\n throw invalidZip('limits', `entry is larger than declared: ${entry.name}`)\n }\n sha.update(chunk)\n crc = updateCrc32(crc, chunk)\n },\n finish(actualSize = size) {\n if (actualSize !== entry.size || size !== entry.size) {\n throw invalidZip('content', `entry size mismatch: ${entry.name}`, entry.name)\n }\n const actualCrc = (crc ^ 0xffffffff) >>> 0\n if (actualCrc !== entry.crc32) {\n throw invalidZip('content', `entry CRC mismatch: ${entry.name}`, entry.name)\n }\n return { size, sha256: sha.digestHex(), crc32: actualCrc }\n },\n }\n}\n\nfunction zipEntryStream(path: string, entry: ZipEntry): ReadableStream<Uint8Array> {\n let file: HostFile | undefined\n let remaining = entry.compressedSize\n const compressed = new ReadableStream<Uint8Array>({\n async start() {\n file = await getHost().open(path, { read: true })\n await file.seek(entry.dataOffset)\n },\n async pull(controller) {\n if (!file || remaining === 0) {\n void file?.close()\n controller.close()\n return\n }\n const buffer = new Uint8Array(Math.min(256 * 1024, remaining))\n const read = await file.read(buffer)\n if (read === null) {\n void file.close()\n controller.error(invalidZip('container', `truncated entry: ${entry.name}`))\n return\n }\n remaining -= read\n controller.enqueue(buffer.subarray(0, read))\n },\n cancel() {\n void file?.close()\n },\n })\n if (entry.compression === 0) return compressed\n return compressed.pipeThrough(\n new DecompressionStream('deflate-raw') as unknown as ReadableWritablePair<\n Uint8Array,\n Uint8Array\n >,\n )\n}\n\nasync function collectTarSources(root: string): Promise<TarSource[]> {\n const output: TarSource[] = []\n const activeDirectories = new Set<string>()\n async function walk(physicalDirectory: string, archivePrefix: string): Promise<void> {\n const realDirectory = await getHost().realPath(physicalDirectory)\n assertWithin(root, realDirectory, archivePrefix || '.')\n if (activeDirectories.has(realDirectory)) {\n throw new UsageError('INVALID_SOURCE', `symlink cycle in source: ${archivePrefix}`)\n }\n activeDirectories.add(realDirectory)\n try {\n const children = [] as HostDirEntry[]\n for (const child of await getHost().readDir(realDirectory)) children.push(child)\n children.sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0)\n for (const child of children) {\n if (child.name.includes('\\0') || child.name.includes('/') || child.name.includes('\\\\')) {\n throw new UsageError('INVALID_SOURCE', 'source contains an unsafe file name')\n }\n const archivePath = archivePrefix ? `${archivePrefix}/${child.name}` : child.name\n const unresolved = resolve(realDirectory, child.name)\n const info = await getHost().lstat(unresolved)\n const physical = info.isSymlink ? await getHost().realPath(unresolved) : unresolved\n assertWithin(root, physical, archivePath)\n const target = info.isSymlink ? await getHost().stat(physical) : info\n if (target.isDirectory) {\n output.push({\n archivePath: `${archivePath}/`,\n physicalPath: physical,\n kind: 'directory',\n size: 0,\n executable: true,\n identity: fileIdentity(info, physical, target),\n })\n await walk(physical, archivePath)\n } else if (target.isFile) {\n output.push({\n archivePath,\n physicalPath: physical,\n kind: 'file',\n size: target.size,\n executable: ((target.mode ?? 0) & 0o111) !== 0,\n identity: fileIdentity(info, physical, target),\n contentDigest: (await digestFile(physical)).sha256,\n })\n } else {\n throw new UsageError('INVALID_SOURCE', `unsupported special file: ${archivePath}`)\n }\n }\n } finally {\n activeDirectories.delete(realDirectory)\n }\n }\n await walk(root, '')\n return output\n}\n\nfunction fileIdentity(link: HostFileInfo, realPath: string, target: HostFileInfo): string {\n return JSON.stringify({\n realPath,\n linkMtime: link.mtime?.getTime() ?? null,\n mtime: target.mtime?.getTime() ?? null,\n size: target.size,\n dev: target.dev,\n ino: target.ino,\n mode: target.mode,\n })\n}\n\nfunction sourceIdentity(source: TarSource): unknown {\n return [\n source.archivePath,\n source.kind,\n source.size,\n source.executable,\n source.identity,\n source.contentDigest ?? null,\n ]\n}\n\nfunction assertWithin(root: string, candidate: string, label: string): void {\n const path = relative(root, candidate)\n if (\n path === '..' || path.startsWith(`..${getHost().path.sep}`) ||\n resolve(candidate) === resolve(root) && label !== '.'\n ) {\n throw new UsageError('INVALID_SOURCE', `symlink escapes source root: ${label}`)\n }\n}\n\nfunction tarHeader(source: TarSource): Uint8Array {\n const header = new Uint8Array(BLOCK_SIZE)\n const { name, prefix } = splitUstarPath(source.archivePath)\n writeString(header, 0, 100, name)\n writeOctal(\n header,\n 100,\n 8,\n source.kind === 'directory' ? 0o755 : source.executable ? 0o755 : 0o644,\n )\n writeOctal(header, 108, 8, 0)\n writeOctal(header, 116, 8, 0)\n writeOctal(header, 124, 12, source.size)\n writeOctal(header, 136, 12, 0)\n header.fill(0x20, 148, 156)\n header[156] = source.kind === 'directory' ? 0x35 : 0x30\n writeString(header, 257, 6, 'ustar\\0')\n writeString(header, 263, 2, '00')\n writeString(header, 345, 155, prefix)\n let checksum = 0\n for (const byte of header) checksum += byte\n writeChecksum(header, checksum)\n return header\n}\n\nfunction splitUstarPath(path: string): { name: string; prefix: string } {\n const encoder = new TextEncoder()\n if (encoder.encode(path).length <= 100) return { name: path, prefix: '' }\n const directory = path.endsWith('/')\n const core = directory ? path.slice(0, -1) : path\n const parts = core.split('/')\n for (let index = parts.length - 1; index > 0; index--) {\n const prefix = parts.slice(0, index).join('/')\n const name = `${parts.slice(index).join('/')}${directory ? '/' : ''}`\n if (encoder.encode(prefix).length <= 155 && encoder.encode(name).length <= 100) {\n return { name, prefix }\n }\n }\n throw new UsageError('INVALID_SOURCE', `source path is too long for a portable tar: ${path}`)\n}\n\nfunction writeString(target: Uint8Array, offset: number, length: number, value: string): void {\n const bytes = new TextEncoder().encode(value)\n if (bytes.length > length) throw new UsageError('INVALID_SOURCE', 'tar field is too long')\n target.set(bytes, offset)\n}\n\nfunction writeOctal(target: Uint8Array, offset: number, length: number, value: number): void {\n const text = value.toString(8).padStart(length - 1, '0')\n if (text.length >= length) throw new UsageError('FILE_TOO_LARGE', 'tar field overflows')\n writeString(target, offset, length, `${text}\\0`)\n}\n\nfunction writeChecksum(target: Uint8Array, value: number): void {\n const text = value.toString(8).padStart(6, '0')\n writeString(target, 148, 8, `${text}\\0 `)\n}\n\nfunction validateZipEntryName(name: string): void {\n if (!name || name.includes('\\0') || name.includes('\\\\') || name.startsWith('/')) {\n throw invalidZip('structure', `unsafe entry name: ${JSON.stringify(name)}`)\n }\n if (/^[A-Za-z]:/.test(name)) throw invalidZip('structure', `absolute entry name: ${name}`)\n const directory = name.endsWith('/')\n const segments = name.split('/')\n for (let index = 0; index < segments.length; index++) {\n const segment = segments[index]\n if (\n segment === '.' || segment === '..' ||\n (!segment && !(directory && index === segments.length - 1))\n ) {\n throw invalidZip('structure', `unsafe entry name: ${name}`)\n }\n }\n}\n\nfunction invalidZip(stage: string, message: string, entry?: string): ToolError {\n return new ToolError('INVALID_PACKAGE', message, 6, false, {\n stage,\n ...(entry ? { entry } : {}),\n })\n}\n\nfunction crc32(bytes: Uint8Array): number {\n return (updateCrc32(0xffffffff, bytes) ^ 0xffffffff) >>> 0\n}\n\nfunction updateCrc32(crc: number, bytes: Uint8Array): number {\n let value = crc\n for (const byte of bytes) value = CRC_TABLE[(value ^ byte) & 0xff] ^ (value >>> 8)\n return value >>> 0\n}\n\nasync function writeAll(file: HostFile, bytes: Uint8Array): Promise<void> {\n let offset = 0\n while (offset < bytes.length) offset += await file.write(bytes.subarray(offset))\n}\n\nasync function copyFileToWriter(path: string, output: HostFile): Promise<void> {\n const input = await getHost().open(path, { read: true })\n try {\n const buffer = new Uint8Array(256 * 1024)\n while (true) {\n const read = await input.read(buffer)\n if (read === null) break\n await writeAll(output, buffer.subarray(0, read))\n }\n } finally {\n await input.close()\n }\n}\n\nasync function readAt(file: HostFile, offset: number, length: number): Promise<Uint8Array> {\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) || offset < 0 || length < 0) {\n throw invalidZip('container', 'ZIP offset is invalid')\n }\n await file.seek(offset)\n const output = new Uint8Array(length)\n let position = 0\n while (position < length) {\n const read = await file.read(output.subarray(position))\n if (read === null) throw invalidZip('container', 'ZIP file is truncated')\n position += read\n }\n return output\n}\n\nfunction findLastSignature(bytes: Uint8Array, signature: number): number {\n for (let index = bytes.length - 4; index >= 0; index--) {\n if (u32(bytes, index) === signature) return index\n }\n return -1\n}\n\nfunction parseZip64Extra(extra: Uint8Array): number[] {\n let position = 0\n while (position + 4 <= extra.length) {\n const id = u16(extra, position)\n const length = u16(extra, position + 2)\n const end = position + 4 + length\n if (end > extra.length) throw invalidZip('structure', 'ZIP extra field is truncated')\n if (id === 0x0001) {\n if (length % 8 !== 0) throw invalidZip('structure', 'ZIP64 extra field is malformed')\n const view = new DataView(extra.buffer, extra.byteOffset + position + 4, length)\n const values: number[] = []\n for (let offset = 0; offset < length; offset += 8) values.push(uint64(view, offset))\n return values\n }\n position = end\n }\n throw invalidZip('structure', 'ZIP64 extra field is missing')\n}\n\nfunction requiredZip64(values: number[], index: number, name: string): number {\n const value = values[index]\n if (value === undefined) throw invalidZip('structure', `ZIP64 values are missing for ${name}`)\n return value\n}\n\nfunction zip64Extra(values: number[]): Uint8Array {\n const output = new Uint8Array(4 + values.length * 8)\n const view = new DataView(output.buffer)\n view.setUint16(0, 0x0001, true)\n view.setUint16(2, values.length * 8, true)\n values.forEach((value, index) => setUint64(view, 4 + index * 8, value))\n return output\n}\n\nfunction setUint64(view: DataView, offset: number, value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error('uint64 value is unsafe')\n view.setBigUint64(offset, BigInt(value), true)\n}\n\nfunction uint64(view: DataView, offset: number): number {\n const value = view.getBigUint64(offset, true)\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw invalidZip('limits', 'ZIP64 value is too large')\n }\n return Number(value)\n}\n\nfunction u16(bytes: Uint8Array, offset: number): number {\n return new DataView(bytes.buffer, bytes.byteOffset + offset, 2).getUint16(0, true)\n}\n\nfunction u32(bytes: Uint8Array, offset: number): number {\n return new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getUint32(0, true)\n}\n\nasync function removeIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nconst EMPTY = new Uint8Array()\n","import { ndn } from 'buckyos/node'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\nimport {\n digestFile,\n type FileDigest,\n openZip,\n readZipEntry,\n sha256Bytes,\n verifyZipEntry,\n writeStoredZip,\n} from './pikg_archive.ts'\n\nconst basename = (path: string) => getHost().path.basename(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nexport const PACKAGE_META_SCHEMA = 'buckyos.pikg.package-meta.v1'\nexport const DIST_MANIFEST_NAME = '.buckyos-pikg-dist.json'\nexport const APPDOC_ENTRY = 'APPDOC.json'\nexport const APPDOC_JWT_ENTRY = 'APPDOC.jwt'\nexport const PACKAGE_META_ENTRY = 'PACKAGE_META.json'\nexport const MAX_APPDOC_BYTES = 1024 * 1024\nexport const MAX_METADATA_ENTRY_BYTES = 8 * 1024 * 1024\nexport const MAX_METADATA_TOTAL_BYTES = 64 * 1024 * 1024\n\nconst SAFE_SUBPACKAGE = /^[A-Za-z0-9._-]+$/\nconst SAFE_BNS_LABEL = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst SHA256_DIGEST = /^sha256:([0-9a-fA-F]{64})$/\nconst OBJECT_ID = /^(appdoc|pkg):[0-9a-f]{64}$/\n\nexport interface ContentIndexEntry {\n sub_pkg_name: string\n path: string\n format: 'tar.gz'\n size: number\n digest: string\n}\n\nexport interface PackageMetaFile {\n '@schema': typeof PACKAGE_META_SCHEMA\n app_doc_id: string\n package_objects: Record<string, Record<string, unknown>>\n content_index: Record<string, ContentIndexEntry>\n}\n\nexport interface ValidatedSubpackage {\n key: string\n selector: Record<string, string> | null\n required: boolean\n pkg_id: string\n pkg_objid: string\n payload_path: string\n payload_size: number\n payload_digest: string\n docker_image_name?: string\n docker_image_digest?: string\n}\n\nexport interface ValidatedPikg {\n appDoc: Record<string, unknown>\n appDocObjectId: string\n packageMeta: PackageMetaFile\n subpackages: ValidatedSubpackage[]\n hasJsonAppDoc: boolean\n hasSignedAppDoc: boolean\n canonicalMatch: boolean\n}\n\nexport interface PikgInspectionResult {\n schema_version: 1\n protocol: string\n pikg_path: string\n size: number\n pikg_digest: string\n valid: true\n app: {\n did: string\n app_id: string\n name?: string\n app_type: string\n version: string\n owner: string\n app_doc_object_id: string\n }\n app_doc_form: 'unsigned' | 'signed' | 'both'\n canonical_match: boolean\n subpackages: Array<Record<string, unknown>>\n offline_content_validation: 'passed'\n signature_validation: 'not-present' | 'not-resolvable-offline'\n publication_validation: 'not-checked'\n}\n\nexport function validateSubpackageName(name: string): void {\n if (!SAFE_SUBPACKAGE.test(name) || name === '.' || name === '..') {\n throw new UsageError('INVALID_SUBPACKAGE_NAME', `invalid subpackage name: ${name}`)\n }\n}\n\nexport function normalizeArch(value: string): string {\n switch (value.trim().toLowerCase()) {\n case 'amd64':\n case 'x86_64':\n case 'x64':\n return 'x86_64'\n case 'arm64':\n case 'aarch64':\n return 'aarch64'\n default:\n return value.trim().toLowerCase()\n }\n}\n\nexport function normalizeOs(value: string): string {\n switch (value.trim().toLowerCase()) {\n case 'darwin':\n case 'apple':\n case 'macos':\n case 'osx':\n return 'macos'\n case 'win':\n case 'win32':\n case 'windows':\n return 'windows'\n default:\n return value.trim().toLowerCase()\n }\n}\n\nexport function derivedSelector(key: string): Record<string, string> | undefined {\n const selectors: Record<string, Record<string, string>> = {\n amd64_docker_image: { os: 'linux', arch: 'x86_64' },\n aarch64_docker_image: { os: 'linux', arch: 'aarch64' },\n amd64_linux_app: { os: 'linux', arch: 'x86_64' },\n aarch64_linux_app: { os: 'linux', arch: 'aarch64' },\n amd64_win_app: { os: 'windows', arch: 'x86_64' },\n aarch64_win_app: { os: 'windows', arch: 'aarch64' },\n amd64_apple_app: { os: 'macos', arch: 'x86_64' },\n aarch64_apple_app: { os: 'macos', arch: 'aarch64' },\n web: {},\n agent: {},\n agent_skills: {},\n agent_tools: {},\n script: {},\n }\n return selectors[key]\n}\n\nexport function canonicalSelector(\n value: unknown,\n label: string,\n): Record<string, string> | undefined {\n if (value === undefined) return undefined\n const selector = expectObject(value, label)\n rejectUnknown(selector, ['os', 'arch', 'min_kernel_version'], label)\n const output: Record<string, string> = {}\n for (const key of ['os', 'arch', 'min_kernel_version']) {\n if (selector[key] !== undefined) {\n output[key] = expectNonEmptyString(selector[key], `${label}.${key}`)\n }\n }\n if (output.os) output.os = normalizeOs(output.os)\n if (output.arch) output.arch = normalizeArch(output.arch)\n return output\n}\n\nexport function assertSelectorCompatible(\n key: string,\n selector: Record<string, string> | undefined,\n label: string,\n): void {\n const derived = derivedSelector(key)\n if (!derived || !selector) return\n for (const field of ['os', 'arch']) {\n if (derived[field] !== undefined && selector[field] !== derived[field]) {\n throw new UsageError(\n 'SELECTOR_CONFLICT',\n `${label}.${field} conflicts with the selector derived from ${key}`,\n )\n }\n }\n}\n\nexport function deriveAppNamespace(\n appDid: string,\n): string {\n return appIdFromDid(appDid)\n}\n\nexport function appIdFromDid(appDid: string): string {\n const app = parseDid(appDid, 'did')\n if (\n app.id.includes('#') || app.id.includes('/') || app.id.includes('%') || app.id.includes(':')\n ) {\n throw new UsageError(\n 'INVALID_APP_ID',\n 'App DID must use hostname form without path, fragment, port, or encoding',\n )\n }\n const labels = app.id.split('.')\n if (labels.some((label) => !SAFE_BNS_LABEL.test(label))) {\n throw new UsageError('INVALID_APP_ID', 'App DID must contain canonical lowercase DNS labels')\n }\n if (app.method === 'web') {\n if (labels.length >= 3 && labels.at(-1) === 'did') {\n throw new UsageError(\n 'INVALID_APP_ID',\n 'did:web hostname conflicts with the reserved non-Web .did form',\n )\n }\n return app.id\n }\n return `${app.id}.${app.method}.did`\n}\n\nexport function createPackageMeta(\n packageName: string,\n version: string,\n author: string,\n owner: string,\n payload: FileDigest,\n timestamp: number,\n): { value: Record<string, unknown>; objectId: string } {\n const content = ndn.ChunkId.fromMix256Result(\n payload.size,\n ndn.hexToBytes(payload.sha256),\n ).toString()\n const value: Record<string, unknown> = {\n name: packageName,\n author,\n owner,\n create_time: timestamp,\n last_update_time: timestamp,\n size: payload.size,\n content,\n version,\n }\n const objectId = ndn.buildNamedObjectByJson(ndn.OBJ_TYPE_PKG, value)[0].toString()\n return { value, objectId }\n}\n\nexport function validatePermissions(value: unknown, label: string): unknown[] {\n if (!Array.isArray(value)) throw invalid('schema', `${label} must be an array`)\n return value.map((raw, index) => {\n const item = expectObject(raw, `${label}[${index}]`)\n assertKnownFields(item, ['scope_path', 'required', 'actions', 'exp'], `${label}[${index}]`)\n expectNonEmptyString(item.scope_path, `${label}[${index}].scope_path`)\n if (typeof item.required !== 'boolean') {\n throw invalid('schema', `${label}[${index}].required must be boolean`)\n }\n if (\n item.actions !== undefined &&\n (!Array.isArray(item.actions) || item.actions.some((action) => typeof action !== 'string'))\n ) {\n throw invalid('schema', `${label}[${index}].actions must be a string array`)\n }\n if (\n item.exp !== null && item.exp !== undefined &&\n (typeof item.exp !== 'number' || !Number.isInteger(item.exp) || item.exp < 0 ||\n item.exp > 0xffffffff)\n ) {\n throw invalid('schema', `${label}[${index}].exp must be null or a uint32`)\n }\n return raw\n })\n}\n\nexport function validateServiceConfigTips(\n value: unknown,\n label: string,\n): Record<string, unknown> {\n const config = expectObject(value, label)\n for (\n const field of [\n 'service_endpoints',\n 'data_mount_points',\n 'local_cache_mount_points',\n 'external_mount_points',\n 'rdb_instances',\n 'bash_envs',\n 'runtime_caps',\n ]\n ) {\n if (config[field] !== undefined) expectObject(config[field], `${label}.${field}`)\n }\n for (\n const [name, raw] of Object.entries(\n expectObject(config.service_endpoints ?? {}, `${label}.service_endpoints`),\n )\n ) {\n const endpoint = expectObject(raw, `${label}.service_endpoints.${name}`)\n assertKnownFields(\n endpoint,\n ['protocol', 'inner_port', 'required', 'description', 'expose'],\n `${label}.service_endpoints.${name}`,\n )\n if (!['http', 'https', 'tcp', 'udp'].includes(String(endpoint.protocol))) {\n throw invalid('schema', `${label}.service_endpoints.${name}.protocol is invalid`)\n }\n expectUint(endpoint.inner_port, `${label}.service_endpoints.${name}.inner_port`, 0xffff)\n optionalBoolean(endpoint.required, `${label}.service_endpoints.${name}.required`)\n validateStringMap(\n endpoint.description ?? {},\n `${label}.service_endpoints.${name}.description`,\n )\n if (endpoint.expose !== undefined && endpoint.expose !== null) {\n const expose = expectObject(endpoint.expose, `${label}.service_endpoints.${name}.expose`)\n assertKnownFields(\n expose,\n ['route', 'scope', 'allow_guest'],\n `${label}.service_endpoints.${name}.expose`,\n )\n const route = expectObject(expose.route, `${label}.service_endpoints.${name}.expose.route`)\n if (route.type === 'web') {\n assertKnownFields(route, ['type'], `${label}.service_endpoints.${name}.expose.route`)\n } else if (route.type === 'port') {\n assertKnownFields(\n route,\n ['type', 'preferred_port'],\n `${label}.service_endpoints.${name}.expose.route`,\n )\n if (route.preferred_port !== undefined) {\n expectUint(\n route.preferred_port,\n `${label}.service_endpoints.${name}.expose.route.preferred_port`,\n 0xffff,\n )\n }\n } else {\n throw invalid('schema', `${label}.service_endpoints.${name}.expose.route.type is invalid`)\n }\n optionalString(expose.scope, `${label}.service_endpoints.${name}.expose.scope`)\n optionalBoolean(\n expose.allow_guest,\n `${label}.service_endpoints.${name}.expose.allow_guest`,\n )\n }\n }\n for (\n const field of [\n 'data_mount_points',\n 'local_cache_mount_points',\n 'external_mount_points',\n ]\n ) {\n for (\n const [name, raw] of Object.entries(expectObject(config[field] ?? {}, `${label}.${field}`))\n ) {\n if (raw === null) continue\n const mount = expectObject(raw, `${label}.${field}.${name}`)\n assertKnownFields(\n mount,\n ['mount_point_name', 'access', 'reason'],\n `${label}.${field}.${name}`,\n )\n expectNonEmptyString(mount.mount_point_name, `${label}.${field}.${name}.mount_point_name`)\n expectNonEmptyString(mount.access, `${label}.${field}.${name}.access`)\n validateStringMap(mount.reason, `${label}.${field}.${name}.reason`)\n }\n }\n for (\n const [name, raw] of Object.entries(\n expectObject(config.rdb_instances ?? {}, `${label}.rdb_instances`),\n )\n ) {\n const database = expectObject(raw, `${label}.rdb_instances.${name}`)\n assertKnownFields(\n database,\n ['backend', 'version', 'schema', 'connection'],\n `${label}.rdb_instances.${name}`,\n )\n if (!['sqlite', 'postgres'].includes(String(database.backend))) {\n throw invalid('schema', `${label}.rdb_instances.${name}.backend is invalid`)\n }\n if (database.version !== undefined) {\n expectUint(\n database.version,\n `${label}.rdb_instances.${name}.version`,\n Number.MAX_SAFE_INTEGER,\n )\n }\n const schemas = validateStringMap(\n database.schema ?? {},\n `${label}.rdb_instances.${name}.schema`,\n )\n for (const backend of Object.keys(schemas)) {\n if (!['sqlite', 'postgres'].includes(backend)) {\n throw invalid('schema', `${label}.rdb_instances.${name}.schema.${backend} is invalid`)\n }\n }\n optionalString(database.connection, `${label}.rdb_instances.${name}.connection`)\n }\n if (config.instance_volume !== undefined) {\n const volume = expectObject(config.instance_volume, `${label}.instance_volume`)\n assertKnownFields(\n volume,\n ['mode', 'quota_mib', 'ephemeral_contents'],\n `${label}.instance_volume`,\n )\n if (\n volume.mode !== undefined &&\n !['required', 'optional', 'disabled'].includes(String(volume.mode))\n ) {\n throw invalid('schema', `${label}.instance_volume.mode is invalid`)\n }\n if (volume.quota_mib !== undefined) {\n expectUint(volume.quota_mib, `${label}.instance_volume.quota_mib`, Number.MAX_SAFE_INTEGER)\n }\n if (\n volume.ephemeral_contents !== undefined &&\n (!Array.isArray(volume.ephemeral_contents) ||\n volume.ephemeral_contents.some((item) => typeof item !== 'string'))\n ) {\n throw invalid('schema', `${label}.instance_volume.ephemeral_contents must be a string array`)\n }\n }\n for (\n const [name, raw] of Object.entries(expectObject(config.bash_envs ?? {}, `${label}.bash_envs`))\n ) {\n const environment = expectObject(raw, `${label}.bash_envs.${name}`)\n assertKnownFields(environment, ['required', 'description'], `${label}.bash_envs.${name}`)\n if (typeof environment.required !== 'boolean') {\n throw invalid('schema', `${label}.bash_envs.${name}.required must be boolean`)\n }\n validateStringMap(environment.description ?? {}, `${label}.bash_envs.${name}.description`)\n }\n validateStringMap(config.runtime_caps ?? {}, `${label}.runtime_caps`)\n optionalString(config.container_param, `${label}.container_param`)\n optionalString(config.start_param, `${label}.start_param`)\n return config\n}\n\nexport function appDocObjectId(value: Record<string, unknown>): string {\n return ndn.buildNamedObjectByJson('appdoc', value)[0].toString()\n}\n\nexport async function validateSnapshot(\n distDir: string,\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n): Promise<ValidatedPikg> {\n const payloads = new Map<string, FileDigest>()\n for (const entryValue of Object.values(packageMeta.content_index)) {\n const entry = validateContentIndexEntry(entryValue, 'content_index')\n const path = join(distDir, entry.path)\n const digest = await digestFile(path)\n payloads.set(entry.path, digest)\n }\n return validateObjectGraph(appDoc, packageMeta, payloads, true, false, true)\n}\n\nexport async function packSnapshot(\n distDir: string,\n destination: string,\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n): Promise<void> {\n const validated = await validateSnapshot(distDir, appDoc, packageMeta)\n const encoder = new TextEncoder()\n await writeStoredZip(destination, [\n { name: APPDOC_ENTRY, bytes: encoder.encode(`${JSON.stringify(appDoc, null, 2)}\\n`) },\n {\n name: PACKAGE_META_ENTRY,\n bytes: encoder.encode(`${JSON.stringify(packageMeta, null, 2)}\\n`),\n },\n ...validated.subpackages.map((subpackage) => ({\n name: subpackage.payload_path,\n path: join(distDir, subpackage.payload_path),\n })),\n ])\n}\n\nexport async function inspectPikg(path: string): Promise<PikgInspectionResult> {\n const archive = await openZip(path)\n let metadataTotal = 0\n for (const entry of archive.entries) {\n if (\n entry.name === APPDOC_ENTRY || entry.name === APPDOC_JWT_ENTRY ||\n entry.name === PACKAGE_META_ENTRY ||\n entry.name.startsWith('objects/') && entry.name.endsWith('.json')\n ) {\n const limit = entry.name === APPDOC_ENTRY || entry.name === APPDOC_JWT_ENTRY\n ? MAX_APPDOC_BYTES\n : MAX_METADATA_ENTRY_BYTES\n if (entry.size > limit) throw invalid('limits', `metadata entry exceeds limit: ${entry.name}`)\n metadataTotal += entry.size\n }\n }\n if (metadataTotal > MAX_METADATA_TOTAL_BYTES) {\n throw invalid('limits', 'PIKG metadata exceeds the total size limit')\n }\n if (archive.byName.has('APPDOC.wt')) {\n throw invalid('appdoc', 'legacy APPDOC.wt is not supported')\n }\n const jsonEntry = archive.byName.get(APPDOC_ENTRY)\n const jwtEntry = archive.byName.get(APPDOC_JWT_ENTRY)\n if (!jsonEntry && !jwtEntry) throw invalid('appdoc', 'PIKG has no App Document')\n\n const jsonDoc = jsonEntry\n ? parseJsonObject(\n await readZipEntry(archive, jsonEntry, MAX_APPDOC_BYTES),\n APPDOC_ENTRY,\n )\n : undefined\n const jwt = jwtEntry\n ? new TextDecoder('utf-8', { fatal: true }).decode(\n await readZipEntry(archive, jwtEntry, MAX_APPDOC_BYTES),\n ).trim()\n : undefined\n const jwtDoc = jwt ? decodeJwtClaims(jwt) : undefined\n if (jsonDoc && jwtDoc && appDocObjectId(jsonDoc) !== appDocObjectId(jwtDoc)) {\n throw invalid('appdoc', 'APPDOC.json and APPDOC.jwt have different canonical documents')\n }\n const appDoc = jwtDoc ?? jsonDoc!\n const metaEntry = archive.byName.get(PACKAGE_META_ENTRY)\n if (!metaEntry) throw invalid('package-meta', 'PACKAGE_META.json is required')\n const packageMeta = parsePackageMeta(\n parseJsonObject(\n await readZipEntry(archive, metaEntry, MAX_METADATA_ENTRY_BYTES),\n PACKAGE_META_ENTRY,\n ),\n )\n for (\n const entry of archive.entries.filter((candidate) => candidate.name.startsWith('objects/'))\n ) {\n const match = /^objects\\/([^/]+)\\.json$/.exec(entry.name)\n if (!match) {\n throw invalid(\n 'object-graph',\n `invalid object entry path: ${entry.name}`,\n entry.name,\n )\n }\n let objectId: InstanceType<typeof ndn.ObjId>\n try {\n objectId = ndn.ObjId.fromString(match[1])\n } catch {\n throw invalid('object-graph', `invalid object entry ID: ${entry.name}`, entry.name)\n }\n const value = parseJsonValue(\n await readZipEntry(archive, entry, MAX_METADATA_ENTRY_BYTES),\n entry.name,\n )\n const computed = ndn.buildNamedObjectByJson(objectId.objType, value)[0]\n if (!computed.equals(objectId)) {\n throw invalid('object-graph', `object entry ID mismatch: ${entry.name}`, entry.name)\n }\n }\n const payloads = new Map<string, FileDigest>()\n for (const value of Object.values(packageMeta.content_index)) {\n const content = validateContentIndexEntry(value, 'content_index')\n const entry = archive.byName.get(content.path)\n if (!entry) throw invalid('content-index', `content entry is missing: ${content.path}`)\n if (entry.size !== content.size) {\n throw invalid('content-index', `content entry size mismatch: ${content.path}`, content.path)\n }\n const expected = parseSha256(content.digest, `content_index.${content.digest}`)\n payloads.set(content.path, await verifyZipEntry(archive, entry, expected))\n }\n const validated = validateObjectGraph(\n appDoc,\n packageMeta,\n payloads,\n Boolean(jsonEntry),\n Boolean(jwtEntry),\n !jsonDoc || !jwtDoc || appDocObjectId(jsonDoc) === appDocObjectId(jwtDoc),\n )\n const pikgDigest = await digestFile(path)\n return {\n schema_version: 1,\n protocol: PACKAGE_META_SCHEMA,\n pikg_path: resolve(path),\n size: pikgDigest.size,\n pikg_digest: `sha256:${pikgDigest.sha256}`,\n valid: true,\n app: {\n did: String(appDoc.did),\n app_id: appIdFromDid(String(appDoc.did)),\n ...(typeof appDoc.name === 'string' ? { name: appDoc.name } : {}),\n app_type: String(appDoc.app_type),\n version: String(appDoc.version),\n owner: String(appDoc.owner),\n app_doc_object_id: validated.appDocObjectId,\n },\n app_doc_form: jsonEntry && jwtEntry ? 'both' : jwtEntry ? 'signed' : 'unsigned',\n canonical_match: validated.canonicalMatch,\n subpackages: validated.subpackages.map((subpackage) => ({\n key: subpackage.key,\n selector: subpackage.selector,\n required: subpackage.required,\n pkg_id: subpackage.pkg_id,\n pkg_objid: subpackage.pkg_objid,\n payload: {\n path: subpackage.payload_path,\n size: subpackage.payload_size,\n digest: subpackage.payload_digest,\n },\n ...(subpackage.docker_image_name ? { docker_image_name: subpackage.docker_image_name } : {}),\n ...(subpackage.docker_image_digest\n ? { docker_image_digest: subpackage.docker_image_digest }\n : {}),\n })),\n offline_content_validation: 'passed',\n signature_validation: jwtEntry ? 'not-resolvable-offline' : 'not-present',\n publication_validation: 'not-checked',\n }\n}\n\nexport function parsePackageMeta(value: Record<string, unknown>): PackageMetaFile {\n try {\n rejectUnknown(\n value,\n ['@schema', 'app_doc_id', 'package_objects', 'content_index'],\n PACKAGE_META_ENTRY,\n )\n } catch (error) {\n if (error instanceof UsageError) throw invalid('package-meta', error.message)\n throw error\n }\n if (value['@schema'] !== PACKAGE_META_SCHEMA) {\n throw invalid('package-meta', `unsupported PACKAGE_META.json schema: ${value['@schema']}`)\n }\n const appDocId = expectNonEmptyString(value.app_doc_id, 'PACKAGE_META.json.app_doc_id')\n if (!OBJECT_ID.test(appDocId) || !appDocId.startsWith('appdoc:')) {\n throw invalid('package-meta', 'PACKAGE_META.json.app_doc_id is invalid')\n }\n const packageObjects = expectObject(value.package_objects, 'PACKAGE_META.json.package_objects')\n const contentIndex = expectObject(value.content_index, 'PACKAGE_META.json.content_index')\n return {\n '@schema': PACKAGE_META_SCHEMA,\n app_doc_id: appDocId,\n package_objects: packageObjects as Record<string, Record<string, unknown>>,\n content_index: contentIndex as Record<string, ContentIndexEntry>,\n }\n}\n\nfunction validateObjectGraph(\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n payloads: Map<string, FileDigest>,\n hasJson: boolean,\n hasSigned: boolean,\n canonicalMatch: boolean,\n): ValidatedPikg {\n validateAppDocShape(appDoc)\n const appId = appDocObjectId(appDoc)\n if (packageMeta.app_doc_id !== appId) {\n throw invalid('object-graph', 'PACKAGE_META.json app_doc_id does not match APPDOC')\n }\n const appVersion = String(appDoc.version)\n const namespace = deriveNamespaceForPackage(appDoc)\n const pkgList = appDoc.pkg_list as Record<string, unknown>\n const referenced = new Set<string>()\n const subpackages: ValidatedSubpackage[] = []\n const contentBySubpackage = new Map<string, ContentIndexEntry>()\n for (const [digest, raw] of Object.entries(packageMeta.content_index)) {\n const entry = validateContentIndexEntry(raw, `content_index.${digest}`)\n if (entry.digest !== digest) throw invalid('content-index', `digest key mismatch: ${digest}`)\n const expectedHex = parseSha256(digest, `content_index.${digest}`)\n const payload = payloads.get(entry.path)\n if (!payload) throw invalid('content-index', `payload is missing: ${entry.path}`, entry.path)\n if (payload.size !== entry.size || payload.sha256 !== expectedHex) {\n throw invalid('content', `payload does not match content index: ${entry.path}`, entry.path)\n }\n if (contentBySubpackage.has(entry.sub_pkg_name)) {\n throw invalid('content-index', `subpackage has more than one payload: ${entry.sub_pkg_name}`)\n }\n contentBySubpackage.set(entry.sub_pkg_name, entry)\n }\n\n const dependencyNames = new Set<string>()\n for (\n const [key, rawDesc] of Object.entries(pkgList).sort(([left], [right]) =>\n left.localeCompare(right)\n )\n ) {\n validateSubpackageNameForPackage(key)\n const desc = expectObject(rawDesc, `APPDOC.pkg_list.${key}`)\n rejectUnknown(\n desc,\n [\n 'pkg_id',\n 'pkg_objid',\n 'docker_image_name',\n 'docker_image_digest',\n 'source_url',\n 'selector',\n 'required',\n ],\n `APPDOC.pkg_list.${key}`,\n )\n if (desc.source_url !== undefined) {\n throw invalid('self-contained', `source_url is not allowed for bundled App: ${key}`)\n }\n const pkgId = expectNonEmptyString(desc.pkg_id, `APPDOC.pkg_list.${key}.pkg_id`)\n const parsedId = parsePackageId(pkgId, key)\n if (parsedId.version !== appVersion) {\n throw invalid('namespace', `subpackage ${key} must use App version ${appVersion}`)\n }\n const uniqueName = packageUniqueName(parsedId.name, key)\n const namespacePrefix = uniqueName.endsWith(`.${namespace}`)\n ? uniqueName.slice(0, -namespace.length - 1)\n : undefined\n if (\n uniqueName !== namespace &&\n (!namespacePrefix || namespacePrefix.includes('.') ||\n !/^[a-z0-9][a-z0-9_-]*$/.test(namespacePrefix))\n ) {\n throw invalid('namespace', `subpackage ${key} is outside App package namespace`)\n }\n const pkgObjid = expectNonEmptyString(desc.pkg_objid, `APPDOC.pkg_list.${key}.pkg_objid`)\n if (!OBJECT_ID.test(pkgObjid) || !pkgObjid.startsWith('pkg:')) {\n throw invalid('object-graph', `subpackage ${key} has an invalid pkg_objid`)\n }\n const packageObject = packageMeta.package_objects[pkgObjid]\n if (!packageObject) throw invalid('object-graph', `PackageMeta is missing for ${key}`)\n const computed = ndn.buildNamedObjectByJson(ndn.OBJ_TYPE_PKG, packageObject)[0].toString()\n if (computed !== pkgObjid) {\n throw invalid('object-graph', `PackageMeta Object ID mismatch: ${key}`)\n }\n const metaName = expectNonEmptyString(packageObject.name, `PackageMeta(${key}).name`)\n const metaVersion = expectNonEmptyString(packageObject.version, `PackageMeta(${key}).version`)\n if (metaName !== parsedId.name || metaVersion !== parsedId.version) {\n throw invalid('namespace', `PackageMeta identity does not match pkg_id: ${key}`)\n }\n if (packageObject.owner !== appDoc.owner || packageObject.author !== appDoc.author) {\n throw invalid('namespace', `PackageMeta owner/author does not match AppDoc: ${key}`)\n }\n const metaDeps = packageObject.deps\n if (\n metaDeps !== undefined &&\n Object.keys(expectObject(metaDeps, `PackageMeta(${key}).deps`)).length\n ) {\n throw invalid(\n 'self-contained',\n `third-party PackageMeta dependencies are not allowed: ${key}`,\n )\n }\n const entry = contentBySubpackage.get(key)\n if (!entry) throw invalid('content-index', `content index is missing for ${key}`)\n if (entry.path !== `${key}.tar.gz` || entry.format !== 'tar.gz') {\n throw invalid('content-index', `subpackage ${key} has a noncanonical payload path`)\n }\n const metaSize = expectSafeInteger(packageObject.size, `PackageMeta(${key}).size`)\n if (metaSize !== entry.size) throw invalid('content', `PackageMeta size mismatch: ${key}`)\n validateChunkContent(\n expectNonEmptyString(packageObject.content, `PackageMeta(${key}).content`),\n entry.size,\n parseSha256(entry.digest, `content_index.${entry.digest}`),\n key,\n )\n const selector = canonicalSelectorForPackage(desc.selector, `APPDOC.pkg_list.${key}.selector`)\n assertSelectorForPackage(key, selector)\n if (desc.required !== undefined && typeof desc.required !== 'boolean') {\n throw invalid('appdoc', `required must be boolean: ${key}`)\n }\n const dockerImageName = optionalNonEmptyString(\n desc.docker_image_name,\n `APPDOC.pkg_list.${key}.docker_image_name`,\n )\n const dockerImageDigest = optionalNonEmptyString(\n desc.docker_image_digest,\n `APPDOC.pkg_list.${key}.docker_image_digest`,\n )\n if (dockerImageDigest && !SHA256_DIGEST.test(dockerImageDigest)) {\n throw invalid('appdoc', `invalid Docker image digest: ${key}`)\n }\n referenced.add(pkgObjid)\n dependencyNames.add(metaName)\n subpackages.push({\n key,\n selector: selector ?? derivedSelector(key) ?? null,\n required: desc.required === undefined ? true : desc.required,\n pkg_id: pkgId,\n pkg_objid: pkgObjid,\n payload_path: entry.path,\n payload_size: entry.size,\n payload_digest: entry.digest,\n ...(dockerImageName ? { docker_image_name: dockerImageName } : {}),\n ...(dockerImageDigest ? { docker_image_digest: dockerImageDigest } : {}),\n })\n }\n if (subpackages.length === 0) throw invalid('appdoc', 'AppDoc.pkg_list must not be empty')\n for (const key of Object.keys(packageMeta.package_objects)) {\n if (!referenced.has(key)) {\n throw invalid('object-graph', `unreferenced PackageMeta object: ${key}`)\n }\n }\n if (contentBySubpackage.size !== subpackages.length) {\n throw invalid('content-index', 'content index and pkg_list have different subpackages')\n }\n if (dependencyNames.size !== subpackages.length) {\n throw invalid('self-contained', 'AppDoc package identities are not unique')\n }\n return {\n appDoc,\n appDocObjectId: appId,\n packageMeta,\n subpackages,\n hasJsonAppDoc: hasJson,\n hasSignedAppDoc: hasSigned,\n canonicalMatch,\n }\n}\n\nexport function validateAppDocShape(appDoc: Record<string, unknown>): void {\n rejectUnknown(\n appDoc,\n [\n 'schema_version',\n 'doc_type',\n 'did',\n 'name',\n 'copyright',\n 'tags',\n 'categories',\n 'base_on',\n 'directory',\n 'references',\n 'version',\n 'version_tag',\n 'app_type',\n 'owner',\n 'controller',\n 'author',\n 'create_time',\n 'last_update_time',\n 'exp',\n 'pkg_list',\n 'show_name',\n 'presentation',\n 'sdk_version',\n 'req_capbilities',\n 'permissions',\n 'content_handlers',\n 'selector_type',\n 'service_config_tips',\n ],\n 'APPDOC',\n )\n if (appDoc.schema_version !== 1) {\n throw invalid('appdoc', 'APPDOC.schema_version must be 1')\n }\n for (\n const field of [\n 'did',\n 'version',\n 'app_type',\n 'owner',\n 'controller',\n 'author',\n 'show_name',\n 'selector_type',\n ]\n ) {\n expectNonEmptyString(appDoc[field], `APPDOC.${field}`)\n }\n if (appDoc.doc_type !== 'app') throw invalid('appdoc', 'APPDOC.doc_type must be app')\n if (!['service', 'dapp', 'web', 'agent', 'agent_skills'].includes(String(appDoc.app_type))) {\n throw invalid('appdoc', 'APPDOC.app_type is invalid')\n }\n if (appDoc.name !== undefined) expectNonEmptyString(appDoc.name, 'APPDOC.name')\n optionalString(appDoc.copyright, 'APPDOC.copyright')\n for (const field of ['tags', 'categories']) {\n const values = appDoc[field]\n if (\n values !== undefined &&\n (!Array.isArray(values) || values.length === 0 ||\n values.some((value) => typeof value !== 'string'))\n ) {\n throw invalid('appdoc', `APPDOC.${field} must be a non-empty string array when present`)\n }\n }\n if (appDoc.base_on !== undefined) {\n const baseOn = expectNonEmptyString(appDoc.base_on, 'APPDOC.base_on')\n try {\n ndn.ObjId.fromString(baseOn)\n } catch {\n throw invalid('appdoc', 'APPDOC.base_on must be an ObjectId')\n }\n }\n for (const field of ['directory', 'references']) {\n if (appDoc[field] === undefined) continue\n const entries = expectObject(appDoc[field], `APPDOC.${field}`)\n if (Object.keys(entries).length === 0) {\n throw invalid('appdoc', `APPDOC.${field} must not be empty when present`)\n }\n for (const [key, value] of Object.entries(entries)) {\n expectObject(value, `APPDOC.${field}.${key}`)\n }\n }\n expectSafeInteger(appDoc.create_time, 'APPDOC.create_time')\n expectSafeInteger(appDoc.last_update_time, 'APPDOC.last_update_time')\n if (expectSafeInteger(appDoc.exp, 'APPDOC.exp') === 0) {\n throw invalid('appdoc', 'APPDOC.exp must be greater than zero')\n }\n appIdFromDid(String(appDoc.did))\n parseDid(String(appDoc.owner), 'owner')\n parseDid(String(appDoc.controller), 'controller')\n parseDid(String(appDoc.author), 'author')\n if (appDoc.permissions !== undefined && !Array.isArray(appDoc.permissions)) {\n throw invalid('appdoc', 'APPDOC.permissions must be an array')\n }\n validatePermissions(appDoc.permissions ?? [], 'APPDOC.permissions')\n if (appDoc.content_handlers !== undefined && !Array.isArray(appDoc.content_handlers)) {\n throw invalid('appdoc', 'APPDOC.content_handlers must be an array')\n }\n validateServiceConfigTips(appDoc.service_config_tips, 'APPDOC.service_config_tips')\n const pkgList = expectObject(appDoc.pkg_list, 'APPDOC.pkg_list')\n if (Object.keys(pkgList).length === 0) {\n throw invalid('appdoc', 'APPDOC.pkg_list must not be empty')\n }\n if (appDoc.app_type === 'agent_skills') {\n expectNonEmptyString(appDoc.name, 'APPDOC.name')\n if (Object.keys(pkgList).join() !== 'agent_skills') {\n throw invalid('appdoc', 'an agent_skills App must contain only the agent_skills sub package')\n }\n }\n deriveNamespaceForPackage(appDoc)\n}\n\nfunction deriveNamespaceForPackage(appDoc: Record<string, unknown>): string {\n try {\n return deriveAppNamespace(String(appDoc.did))\n } catch (error) {\n if (error instanceof UsageError) throw invalid('namespace', error.message)\n throw error\n }\n}\n\nfunction validateContentIndexEntry(value: unknown, label: string): ContentIndexEntry {\n const entry = expectObject(value, label)\n rejectUnknown(entry, ['sub_pkg_name', 'path', 'format', 'size', 'digest'], label)\n const subpackage = expectNonEmptyString(entry.sub_pkg_name, `${label}.sub_pkg_name`)\n validateSubpackageNameForPackage(subpackage)\n const path = expectNonEmptyString(entry.path, `${label}.path`)\n if (path !== `${subpackage}.tar.gz`) {\n throw invalid('content-index', `invalid payload path: ${path}`)\n }\n if (entry.format !== 'tar.gz') throw invalid('content-index', `invalid payload format: ${path}`)\n const size = expectSafeInteger(entry.size, `${label}.size`)\n const digest = expectNonEmptyString(entry.digest, `${label}.digest`)\n parseSha256(digest, `${label}.digest`)\n return { sub_pkg_name: subpackage, path, format: 'tar.gz', size, digest }\n}\n\nfunction validateChunkContent(content: string, size: number, sha256: string, key: string): void {\n let chunk: InstanceType<typeof ndn.ChunkId>\n try {\n chunk = ndn.ChunkId.fromString(content)\n } catch {\n throw invalid('content', `PackageMeta content is not a ChunkId: ${key}`)\n }\n if (!['sha256', 'mix256'].includes(chunk.chunkType)) {\n throw invalid('content', `unsupported PackageMeta ChunkId type: ${key}`)\n }\n const hash = ndn.hexToBytes(sha256)\n const expected = chunk.chunkType === 'mix256'\n ? ndn.ChunkId.fromMix256Result(size, hash)\n : ndn.ChunkId.fromSha256Result(hash)\n if (chunk.toString() !== expected.toString()) {\n throw invalid('content', `PackageMeta ChunkId digest mismatch: ${key}`)\n }\n}\n\nfunction parsePackageId(value: string, key: string): { name: string; version: string } {\n const parts = value.split('#')\n if (parts.length !== 2 || !parts[0] || !parts[1] || parts[1].startsWith('$')) {\n throw invalid('namespace', `subpackage ${key} must use an exact-version pkg_id`)\n }\n return { name: parts[0], version: parts[1] }\n}\n\nfunction packageUniqueName(packageName: string, key: string): string {\n const parts = packageName.split('.')\n const environments = new Set([\n 'all',\n 'nightly-linux-amd64',\n 'nightly-linux-aarch64',\n 'nightly-windows-amd64',\n 'nightly-windows-aarch64',\n 'nightly-apple-amd64',\n 'nightly-apple-aarch64',\n ])\n const unique = parts.length > 1 && environments.has(parts[0])\n ? parts.slice(1).join('.')\n : parts.join('.')\n if (!unique || unique.split('.').some((label) => !/^[a-z0-9][a-z0-9_-]*$/.test(label))) {\n throw invalid('namespace', `subpackage ${key} has an invalid package name`)\n }\n return unique\n}\n\nfunction decodeJwtClaims(jwt: string): Record<string, unknown> {\n const segments = jwt.split('.')\n if (segments.length !== 3 || !segments[1]) throw invalid('appdoc', 'APPDOC.jwt is malformed')\n try {\n const normalized = segments[1].replaceAll('-', '+').replaceAll('_', '/')\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')\n const binary = atob(padded)\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0))\n return parseJsonObject(bytes, APPDOC_JWT_ENTRY)\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalid('appdoc', 'APPDOC.jwt claims are not valid JSON')\n }\n}\n\nfunction parseJsonObject(bytes: Uint8Array, label: string): Record<string, unknown> {\n return expectObject(parseJsonValue(bytes, label), label)\n}\n\nfunction parseJsonValue(bytes: Uint8Array, label: string): unknown {\n try {\n return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes))\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalid('metadata', `${label} is not valid JSON`)\n }\n}\n\nfunction parseDid(value: string, label: string): { method: string; id: string } {\n const match = /^did:([a-z0-9]+):(.+)$/.exec(value)\n if (!match) throw new UsageError('INVALID_DID', `${label} must be a DID`)\n return { method: match[1], id: match[2] }\n}\n\nfunction parseSha256(value: string, label: string): string {\n const match = SHA256_DIGEST.exec(value)\n if (!match) throw invalid('digest', `${label} must be sha256:<64 lowercase hex>`)\n return match[1].toLowerCase()\n}\n\nfunction canonicalSelectorForPackage(\n value: unknown,\n label: string,\n): Record<string, string> | undefined {\n try {\n return canonicalSelector(value, label)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nfunction assertSelectorForPackage(key: string, selector: Record<string, string> | undefined): void {\n try {\n assertSelectorCompatible(key, selector, `APPDOC.pkg_list.${key}.selector`)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nfunction validateSubpackageNameForPackage(name: string): void {\n try {\n validateSubpackageName(name)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nexport function expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw invalid('schema', `${label} must be an object`)\n }\n return value as Record<string, unknown>\n}\n\nexport function expectNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw invalid('schema', `${label} must be a string`)\n }\n return value\n}\n\nfunction optionalNonEmptyString(value: unknown, label: string): string | undefined {\n return value === undefined ? undefined : expectNonEmptyString(value, label)\n}\n\nfunction expectSafeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw invalid('schema', `${label} must be a non-negative safe integer`)\n }\n return value\n}\n\nfunction expectUint(value: unknown, label: string, maximum: number): number {\n const result = expectSafeInteger(value, label)\n if (result > maximum) throw invalid('schema', `${label} is too large`)\n return result\n}\n\nfunction optionalBoolean(value: unknown, label: string): void {\n if (value !== undefined && typeof value !== 'boolean') {\n throw invalid('schema', `${label} must be boolean`)\n }\n}\n\nfunction optionalString(value: unknown, label: string): void {\n if (value !== undefined && typeof value !== 'string') {\n throw invalid('schema', `${label} must be a string`)\n }\n}\n\nfunction validateStringMap(value: unknown, label: string): Record<string, unknown> {\n const result = expectObject(value, label)\n if (Object.values(result).some((item) => typeof item !== 'string')) {\n throw invalid('schema', `${label} values must be strings`)\n }\n return result\n}\n\nfunction assertKnownFields(\n value: Record<string, unknown>,\n allowed: string[],\n label: string,\n): void {\n const accepted = new Set(allowed)\n const unknown = Object.keys(value).find((key) => !accepted.has(key))\n if (unknown) throw invalid('schema', `${label}.${unknown} is not allowed`)\n}\n\nexport function rejectUnknown(\n value: Record<string, unknown>,\n allowed: string[],\n label: string,\n): void {\n const accepted = new Set(allowed)\n const unknown = Object.keys(value).filter((key) => !accepted.has(key))\n if (unknown.length) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${label}.${unknown[0]} is not allowed`)\n }\n}\n\nfunction invalid(stage: string, message: string, entry?: string): ToolError {\n return new ToolError('INVALID_PACKAGE', message, 6, false, {\n stage,\n ...(entry ? { entry: basename(entry) } : {}),\n })\n}\n\nexport function stableJsonDigest(value: unknown): string {\n return sha256Bytes(new TextEncoder().encode(ndn.toCanonicalJsonString(value)))\n}\n\nexport function validateContentHandlers(value: unknown, permissions: unknown[]): unknown[] {\n if (!Array.isArray(value)) throw invalid('appdoc', 'content_handlers must be an array')\n const ids = new Set<string>()\n for (const raw of value) {\n const h = expectObject(raw, 'content handler')\n const id = expectNonEmptyString(h.handler_id, 'handler_id')\n if (!/^[a-zA-Z0-9_-]+$/.test(id) || ids.has(id)) throw invalid('appdoc', 'invalid or duplicate handler_id')\n ids.add(id)\n if (!Number.isSafeInteger(h.version) || Number(h.version) < 1) throw invalid('appdoc', 'invalid handler version')\n if (!Array.isArray(h.selectors) || !h.selectors.length) throw invalid('appdoc', 'missing selectors')\n for (const rawSelector of h.selectors) {\n const s = expectObject(rawSelector, 'selector')\n if (!['mime', 'objType', 'schema', 'ext'].some(k => k in s)) throw invalid('appdoc', 'empty selector')\n for (const key of ['mime', 'objType', 'schema']) {\n const v = s[key]\n if (v !== undefined && !(typeof v === 'string' && v.length) && !(Array.isArray(v) && v.length && v.every(i => typeof i === 'string' && i.length))) throw invalid('appdoc', 'invalid selector field')\n }\n if (s.maxSize !== undefined && (!Number.isSafeInteger(s.maxSize) || Number(s.maxSize) < 0)) throw invalid('appdoc', 'invalid maxSize')\n }\n const intents = expectObject(h.intents, 'intents')\n if (Object.keys(intents).length !== 1 || !intents.open) throw invalid('appdoc', 'only open intent is supported')\n const open = expectObject(intents.open, 'open')\n const entry = expectObject(open.entry, 'entry')\n const path = expectNonEmptyString(entry.path, 'entry.path')\n let decoded: string\n try { decoded = decodeURIComponent(path) } catch { throw invalid('appdoc', 'invalid entry path') }\n if (entry.type !== 'web' || !decoded.startsWith('/') || decoded.startsWith('//') || decoded.includes('..') || decoded.includes('\\\\') || decoded.includes('://') || decoded.includes('#') || /[\\r\\n]/.test(decoded)) throw invalid('appdoc', 'unsafe Web entry')\n if (open.priority !== undefined && (!Number.isSafeInteger(open.priority) || Number(open.priority) < 0 || Number(open.priority) > 80)) throw invalid('appdoc', 'priority must be 0..80')\n if (open.window !== undefined && open.window !== 'new' && open.window !== 'reuse') throw invalid('appdoc', 'invalid window policy')\n if (open.multiSource !== undefined && typeof open.multiSource !== 'boolean') throw invalid('appdoc', 'invalid multiSource')\n if (open.modes !== undefined && (!Array.isArray(open.modes) || !open.modes.length || open.modes.some(m => m !== 'view' && m !== 'edit'))) throw invalid('appdoc', 'invalid modes')\n if (h.permissions !== undefined && (!Array.isArray(h.permissions) || h.permissions.some(scope => !permissions.some(p => p && typeof p === 'object' && (p as Record<string, unknown>).scope_path === scope)))) throw invalid('appdoc', 'handler permissions exceed App permissions')\n }\n return value\n}\n","// Generated by scripts/generate-cli-version.mjs. Do not edit.\nexport const PACKAGE_VERSION = '0.7.140'\nexport const TOOL_VERSION = PACKAGE_VERSION\nexport const SDK_VERSION = PACKAGE_VERSION\nexport const PROTOCOL_VERSION = '1'\n","import type { CommandContext } from '../core/context.ts'\nimport type { CommandModule } from '../core/command.ts'\nimport { EXIT_PERMISSION, EXIT_UNAVAILABLE, ToolError, UsageError } from '../core/errors.ts'\nimport { createDeterministicTarGz, digestFile, sha256Bytes } from './pikg_archive.ts'\nimport {\n APPDOC_ENTRY,\n appDocObjectId,\n assertSelectorCompatible,\n canonicalSelector,\n createPackageMeta,\n deriveAppNamespace,\n derivedSelector,\n DIST_MANIFEST_NAME,\n expectNonEmptyString,\n expectObject,\n inspectPikg,\n normalizeArch,\n PACKAGE_META_ENTRY,\n PACKAGE_META_SCHEMA,\n type PackageMetaFile,\n packSnapshot,\n parsePackageMeta,\n rejectUnknown,\n stableJsonDigest,\n validatePermissions,\n validateContentHandlers,\n validateServiceConfigTips,\n validateSnapshot,\n validateSubpackageName,\n} from './pikg_protocol.ts'\nimport {\n distributionManifestView,\n getHost,\n type HostFileInfo,\n isHostError,\n policyView,\n readDistributionManifest,\n} from '../runtime/host.ts'\nimport { PROTOCOL_VERSION, SDK_VERSION, TOOL_VERSION } from '../version.ts'\nimport { identityCandidateView } from '../core/identity.ts'\n\nconst basename = (path: string) => getHost().path.basename(path)\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst relative = (from: string, to: string) => getHost().path.relative(from, to)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst APP_DOCUMENT_LIFETIME_SECONDS = 5 * 365 * 24 * 60 * 60\nconst SAFE_PIKG_FILE = /^[A-Za-z0-9._-]+\\.pikg$/\nconst APP_NAME = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst VERSION = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst SHA256_ID = /^sha256:[0-9a-f]{64}$/\nconst OBJECT_ID = /^(?:appdoc|pkg):[0-9a-f]{64}$/\nconst SAFE_GENERATED_FILE = /^[A-Za-z0-9._-]+$/\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\nconst APP_KINDS = ['static-web', 'script', 'docker', 'agent-skills']\nconst PATH_KINDS: Record<string, { key: string; category: string; selectorType: string }> = {\n 'static-web': { key: 'web', category: 'web', selectorType: 'static' },\n script: { key: 'script', category: 'dapp', selectorType: 'single' },\n 'agent-skills': { key: 'agent_skills', category: 'agent_skills', selectorType: 'single' },\n}\n\nexport interface DockerImageInfo {\n id: string\n architecture: string\n canonicalName: string\n}\n\nexport interface DockerClient {\n inspect(reference: string): Promise<DockerImageInfo>\n save(imageId: string, destinationTarGz: string): Promise<void>\n}\n\nexport interface PikgModuleDependencies {\n docker?: DockerClient\n now?: () => number\n}\n\ninterface AppMeta {\n schema_version: 1\n did: string\n name: string\n version: string\n owner: string\n author: string\n show_name: string\n categories: string[]\n permissions: unknown[]\n content_handlers?: unknown[]\n selector_type: string\n service_config_tips: Record<string, unknown>\n}\n\ninterface PathSource {\n type: 'path'\n path: string\n}\n\ninterface DockerSource {\n type: 'docker-image'\n image: string\n}\n\ninterface SubpackageInput {\n selector?: Record<string, string>\n required: boolean\n source: PathSource | DockerSource\n}\n\ninterface PikgMeta {\n schema_version: 1\n output_dir: string\n pikg_file: string\n sub_pkgs: Record<string, SubpackageInput>\n}\n\ninterface GeneratedFileRecord {\n size: number\n digest: string\n}\n\ninterface DistManifest {\n schema_version: 1\n tool_version: string\n meta_root_id: string\n source_fingerprint: string\n app_doc_object_id: string\n pikg_file: string\n generated_files: Record<string, GeneratedFileRecord>\n subpackages: Record<\n string,\n { source_kind: string; size: number; digest: string; pkg_objid: string }\n >\n}\n\ninterface PreparedSubpackage {\n key: string\n input: SubpackageInput\n payloadPath: string\n digest: GeneratedFileRecord\n docker?: DockerImageInfo\n}\n\nfunction packageEnvironmentQualifier(\n key: string,\n selector: Record<string, string> | undefined,\n): string {\n const effective = selector ?? derivedSelector(key)\n const os = effective?.os\n const arch = effective?.arch\n if (!os || !arch) return 'all'\n const environmentOs = os === 'macos' ? 'apple' : os\n const environmentArch = arch === 'x86_64' ? 'amd64' : arch\n const qualifier = `nightly-${environmentOs}-${environmentArch}`\n return new Set([\n 'nightly-linux-amd64',\n 'nightly-linux-aarch64',\n 'nightly-windows-amd64',\n 'nightly-windows-aarch64',\n 'nightly-apple-amd64',\n 'nightly-apple-aarch64',\n ]).has(qualifier)\n ? qualifier\n : 'all'\n}\n\nexport function createPikgModule(dependencies: PikgModuleDependencies = {}): CommandModule {\n const docker = dependencies.docker ?? new LocalDockerClient()\n const now = dependencies.now ?? reproducibleBuildTimestamp\n return {\n name: 'pikg',\n summary: 'Build and verify local PIKG release candidates',\n commands: [\n {\n verb: 'doctor',\n summary: 'Inspect the local SDK, Tool, host policy, metadata, and target profile',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg doctor', 'buckyos pikg doctor ./dapp_meta'],\n handler: async (ctx, input) => await doctorCommand(ctx, input),\n },\n {\n verb: 'init',\n summary: 'Create local PIKG development metadata',\n description: 'Creates only dapp_meta/app.json and dapp_meta/pikg.json.',\n positionals: [\n { name: 'project_dir', description: 'Existing App project directory', required: false },\n ],\n options: [\n { name: 'name', description: 'App name', type: 'string' },\n { name: 'owner', description: 'Owner DID', type: 'string' },\n {\n name: 'kind',\n description: 'Initial App kind',\n type: 'string',\n enum: APP_KINDS,\n },\n {\n name: 'source',\n description: 'Build output path or local Docker image',\n type: 'string',\n },\n { name: 'version', description: 'Initial App version', type: 'string' },\n { name: 'app-did', property: 'app_did', description: 'Explicit App DID', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n project_dir: { type: 'string', minLength: 1 },\n name: { type: 'string', minLength: 1 },\n owner: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: APP_KINDS },\n source: { type: 'string', minLength: 1 },\n version: { type: 'string', minLength: 1 },\n app_did: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos pikg init .',\n 'buckyos --non-interactive pikg init . --owner did:bns:root --kind static-web --source ./web/dist',\n 'buckyos --non-interactive pikg init . --owner did:bns:root --kind agent-skills --source ./skills',\n ],\n handler: async (ctx, input) => await initCommand(ctx, input, docker),\n },\n {\n verb: 'build',\n summary: 'Build a managed dapp_dist snapshot',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg build ./dapp_meta'],\n handler: async (ctx, input) => await buildCommand(ctx, input, docker, now),\n },\n {\n verb: 'pack',\n summary: 'Pack and verify a complete PIKG',\n positionals: [\n { name: 'dist_dir', description: 'Managed dapp_dist directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { dist_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg pack ./dapp_dist'],\n handler: async (ctx, input) => await packCommand(ctx, input),\n },\n {\n verb: 'info',\n summary: 'Strictly verify and inspect a local PIKG',\n positionals: [{ name: 'pikg_path', description: 'Local .pikg file' }],\n inputSchema: {\n type: 'object',\n properties: { pikg_path: { type: 'string', minLength: 1 } },\n required: ['pikg_path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg info ./dapp_dist/demo-0.1.0.pikg'],\n handler: async (ctx, input) =>\n await inspectPikg(resolveFromCwd(ctx, expectInputString(input, 'pikg_path'))),\n },\n {\n verb: 'clean',\n summary: 'Safely delete a managed dapp_dist',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos --non-interactive --yes pikg clean ./dapp_meta'],\n handler: async (ctx, input) => await cleanCommand(ctx, input),\n },\n ],\n }\n}\n\nfunction reproducibleBuildTimestamp(): number {\n const configured = getHost().env('SOURCE_DATE_EPOCH')\n if (configured === undefined) return Math.floor(Date.now() / 1000)\n if (!/^\\d+$/.test(configured)) {\n throw new UsageError(\n 'INVALID_SOURCE_DATE_EPOCH',\n 'SOURCE_DATE_EPOCH must be a non-negative integer number of seconds',\n )\n }\n const seconds = Number(configured)\n if (!Number.isSafeInteger(seconds)) {\n throw new UsageError(\n 'INVALID_SOURCE_DATE_EPOCH',\n 'SOURCE_DATE_EPOCH is outside the supported integer range',\n )\n }\n return seconds\n}\n\nasync function doctorCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = resolveFromCwd(ctx, metaInput)\n const checks: Array<Record<string, unknown>> = []\n let appMeta: Record<string, unknown> | undefined\n let pikgMeta: Record<string, unknown> | undefined\n for (\n const [name, path] of [\n ['app_metadata', join(metaDir, 'app.json')],\n ['pikg_metadata', join(metaDir, 'pikg.json')],\n ] as const\n ) {\n try {\n const value = await readJson(path, name)\n if (name === 'app_metadata') appMeta = value\n else pikgMeta = value\n checks.push({ name, status: 'ok', path })\n } catch (error) {\n checks.push({\n name,\n status: isHostError(error, 'NotFound') ? 'missing' : 'error',\n path,\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n }\n if (appMeta && pikgMeta) {\n try {\n const app = parseAppMeta(appMeta)\n const pikg = parsePikgMeta(pikgMeta, app)\n const missingSources: string[] = []\n for (const subpackage of Object.values(pikg.sub_pkgs)) {\n if (subpackage.source.type !== 'path') continue\n const source = resolve(metaDir, subpackage.source.path)\n try {\n await getHost().lstat(source)\n } catch (error) {\n if (isHostError(error, 'NotFound')) missingSources.push(source)\n else throw error\n }\n }\n checks.push({\n name: 'build_outputs',\n status: missingSources.length === 0 ? 'ok' : 'missing',\n missing: missingSources,\n })\n } catch (error) {\n checks.push({\n name: 'metadata_schema',\n status: 'error',\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n }\n const globalConfig = await ctx.configStore.readConfig()\n const profileName = ctx.config.profileName ?? globalConfig.default_profile\n const profile = profileName ? await ctx.configStore.readProfile(profileName) : undefined\n const host = getHost()\n return {\n healthy: checks.every((check) => check.status === 'ok'),\n tool_version: TOOL_VERSION,\n sdk_version: SDK_VERSION,\n protocol_version: PROTOCOL_VERSION,\n ...policyView(host),\n distribution_manifest: distributionManifestView(await readDistributionManifest(host)),\n target: {\n profile: profileName ?? null,\n zone: ctx.config.zone ?? profile?.zone ?? null,\n endpoint: ctx.config.endpoint ?? profile?.endpoint ?? null,\n compatibility: 'not-checked',\n },\n identity_candidates: await identityCandidateView(ctx.config),\n checks,\n }\n}\n\nasync function initCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n docker: DockerClient,\n): Promise<Record<string, unknown>> {\n const projectInput = optionalInputString(input, 'project_dir') ?? '.'\n const projectDir = await realDirectory(resolveFromCwd(ctx, projectInput), 'project directory')\n let name = optionalInputString(input, 'name') ?? normalizeAppName(basename(projectDir))\n const canPrompt = !ctx.config.nonInteractive && !ctx.interactive && ctx.io.inputIsTerminal\n if (!name) name = await requiredPrompt(ctx, canPrompt, 'App name: ', 'name')\n let owner = optionalInputString(input, 'owner')\n if (!owner) owner = await requiredPrompt(ctx, canPrompt, 'Owner DID: ', 'owner')\n let kind = optionalInputString(input, 'kind')\n if (!kind) {\n kind = await requiredPrompt(\n ctx,\n canPrompt,\n `App kind (${APP_KINDS.join('/')}): `,\n 'kind',\n )\n }\n if (!APP_KINDS.includes(kind)) {\n throw new UsageError('INVALID_APP_KIND', `invalid App kind: ${kind}`)\n }\n let source = optionalInputString(input, 'source')\n if (!source) source = await requiredPrompt(ctx, canPrompt, 'Source: ', 'source')\n const version = optionalInputString(input, 'version') ?? '0.1.0'\n validateAppName(name)\n validateVersion(version)\n const derivedDid = deriveAppDid(name, owner)\n const appDid = optionalInputString(input, 'app_did') ?? derivedDid\n deriveAppNamespace(appDid)\n\n let subpackageKey: string\n let sourceValue: Record<string, string>\n let selector: Record<string, string> | undefined\n let sourceSummary: Record<string, unknown>\n if (kind === 'docker') {\n const image = await docker.inspect(source)\n const arch = normalizeArch(image.architecture)\n subpackageKey = arch === 'x86_64'\n ? 'amd64_docker_image'\n : arch === 'aarch64'\n ? 'aarch64_docker_image'\n : (() => {\n throw new UsageError('UNSUPPORTED_ARCHITECTURE', `unsupported Docker architecture: ${arch}`)\n })()\n selector = { os: 'linux', arch }\n sourceValue = { type: 'docker-image', image: source }\n sourceSummary = { type: 'docker-image', image: image.canonicalName, image_id: image.id }\n } else {\n subpackageKey = PATH_KINDS[kind].key\n const absoluteSource = resolve(projectDir, source)\n const persistedSource = isAbsolute(source)\n ? resolve(source)\n : toPortablePath(relative(join(projectDir, 'dapp_meta'), absoluteSource))\n sourceValue = { type: 'path', path: persistedSource }\n sourceSummary = { type: 'path', path: displaySource(projectDir, absoluteSource) }\n try {\n await getHost().lstat(absoluteSource)\n } catch (error) {\n if (isHostError(error, 'NotFound')) {\n await ctx.io.stderr(`warning: source does not exist yet: ${sourceSummary.path}\\n`)\n } else throw error\n }\n }\n\n const appMeta: AppMeta = {\n schema_version: 1,\n did: appDid,\n name,\n version,\n owner,\n author: owner,\n show_name: name,\n categories: [PATH_KINDS[kind]?.category ?? 'dapp'],\n permissions: [],\n selector_type: PATH_KINDS[kind]?.selectorType ?? 'single',\n service_config_tips: {},\n }\n const pikgMeta = {\n schema_version: 1,\n output_dir: '../dapp_dist',\n pikg_file: `${name}-${version}.pikg`,\n sub_pkgs: {\n [subpackageKey]: {\n ...(selector ? { selector } : {}),\n required: true,\n source: sourceValue,\n },\n },\n }\n parseAppMeta({ ...appMeta })\n parsePikgMeta(pikgMeta)\n const metaDir = join(projectDir, 'dapp_meta')\n await initializeMetaDirectory(projectDir, metaDir, appMeta, pikgMeta)\n return {\n project_dir: projectDir,\n meta_dir: metaDir,\n generated_files: [join(metaDir, 'app.json'), join(metaDir, 'pikg.json')],\n app: {\n did: appDid,\n name,\n version,\n owner,\n author: owner,\n show_name: name,\n categories: appMeta.categories,\n permissions: [],\n selector_type: appMeta.selector_type,\n service_config_tips: {},\n },\n subpackage: {\n key: subpackageKey,\n kind,\n source: sourceSummary,\n required: true,\n ...(selector ? { selector } : {}),\n },\n output_dir: join(projectDir, 'dapp_dist'),\n pikg_file: pikgMeta.pikg_file,\n next_command: `buckyos pikg build ${metaDir}`,\n }\n}\n\nasync function buildCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n docker: DockerClient,\n now: () => number,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = await realDirectory(resolveFromCwd(ctx, metaInput), 'dapp_meta')\n const appMeta = parseAppMeta(await readJson(join(metaDir, 'app.json'), 'app.json'))\n const pikgMeta = parsePikgMeta(await readJson(join(metaDir, 'pikg.json'), 'pikg.json'), appMeta)\n const configuredDist = resolve(metaDir, pikgMeta.output_dir)\n await rejectLeafSymlink(configuredDist, 'UNSAFE_OUTPUT_DIR')\n const distDir = await canonicalTarget(configuredDist)\n const projectDir = dirname(metaDir)\n const sourcePaths: string[] = []\n for (const subpackage of Object.values(pikgMeta.sub_pkgs)) {\n if (subpackage.source.type === 'path') {\n sourcePaths.push(await getHost().realPath(resolve(metaDir, subpackage.source.path)))\n }\n }\n assertBuildPaths(metaDir, distDir, sourcePaths)\n await validateReplaceableDist(distDir, metaRootId(metaDir))\n await getHost().mkdir(dirname(distDir), { recursive: true })\n const temporary = await getHost().makeTempDir({\n dir: dirname(distDir),\n prefix: '.buckyos-pikg-build-',\n })\n try {\n const prepared: PreparedSubpackage[] = []\n for (\n const [key, subpackage] of Object.entries(pikgMeta.sub_pkgs).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n ) {\n const payloadPath = join(temporary, `${key}.tar.gz`)\n let dockerInfo: DockerImageInfo | undefined\n if (subpackage.source.type === 'path') {\n const sourcePath = await getHost().realPath(resolve(metaDir, subpackage.source.path))\n const info = await getHost().stat(sourcePath)\n if (info.isDirectory) {\n await createDeterministicTarGz(sourcePath, payloadPath)\n } else if (info.isFile && sourcePath.toLowerCase().endsWith('.tar.gz')) {\n const before = await digestFile(sourcePath)\n const beforeStat = statIdentity(await getHost().stat(sourcePath))\n await getHost().copyFile(sourcePath, payloadPath)\n const after = await digestFile(sourcePath)\n const afterStat = statIdentity(await getHost().stat(sourcePath))\n const copied = await digestFile(payloadPath)\n if (\n beforeStat !== afterStat || before.size !== after.size ||\n before.sha256 !== after.sha256 || copied.size !== before.size ||\n copied.sha256 !== before.sha256\n ) {\n throw new ToolError('SOURCE_CHANGED', `source changed while copied: ${key}`)\n }\n } else {\n throw new UsageError(\n 'INVALID_SOURCE',\n `${key} source must be a directory or .tar.gz file`,\n )\n }\n } else {\n dockerInfo = await docker.inspect(subpackage.source.image)\n if (!SHA256_ID.test(dockerInfo.id)) {\n throw new ToolError(\n 'DOCKER_IDENTITY_INVALID',\n `Docker image ${key} has no immutable image ID`,\n )\n }\n await docker.save(dockerInfo.id, payloadPath)\n const after = await docker.inspect(dockerInfo.id)\n if (after.id !== dockerInfo.id) {\n throw new ToolError(\n 'SOURCE_CHANGED',\n `Docker image identity changed while exporting: ${key}`,\n )\n }\n }\n const digest = await digestFile(payloadPath)\n prepared.push({\n key,\n input: subpackage,\n payloadPath,\n digest: { size: digest.size, digest: `sha256:${digest.sha256}` },\n ...(dockerInfo ? { docker: dockerInfo } : {}),\n })\n }\n\n const timestamp = now()\n if (!Number.isSafeInteger(timestamp) || timestamp < 0) throw new Error('invalid clock value')\n const namespace = deriveAppNamespace(appMeta.did)\n const packageObjects: Record<string, Record<string, unknown>> = {}\n const contentIndex: PackageMetaFile['content_index'] = {}\n const pkgList: Record<string, Record<string, unknown>> = {}\n const generatedSubpackages: DistManifest['subpackages'] = {}\n const packageNames = new Set<string>()\n for (const item of prepared) {\n const packageName = `${packageEnvironmentQualifier(item.key, item.input.selector)}.${\n packageSuffix(item.key)\n }.${namespace}`\n if (packageNames.has(packageName)) {\n throw new UsageError('PACKAGE_NAME_COLLISION', `subpackage names collide at ${packageName}`)\n }\n packageNames.add(packageName)\n const payloadHash = item.digest.digest.slice('sha256:'.length)\n const packageMeta = createPackageMeta(\n packageName,\n appMeta.version,\n appMeta.author,\n appMeta.owner,\n { size: item.digest.size, sha256: payloadHash, crc32: 0 },\n timestamp,\n )\n packageObjects[packageMeta.objectId] = packageMeta.value\n if (contentIndex[item.digest.digest]) {\n throw new UsageError(\n 'DUPLICATE_PAYLOAD_DIGEST',\n `subpackages cannot share the same payload digest: ${item.key}`,\n )\n }\n contentIndex[item.digest.digest] = {\n sub_pkg_name: item.key,\n path: `${item.key}.tar.gz`,\n format: 'tar.gz',\n size: item.digest.size,\n digest: item.digest.digest,\n }\n const selector = item.input.selector\n pkgList[item.key] = {\n pkg_id: `${packageName}#${appMeta.version}`,\n pkg_objid: packageMeta.objectId,\n ...(item.docker\n ? {\n docker_image_name: item.docker.canonicalName,\n docker_image_digest: item.docker.id,\n }\n : {}),\n ...(selector ? { selector } : {}),\n required: item.input.required,\n }\n generatedSubpackages[item.key] = {\n source_kind: item.input.source.type,\n size: item.digest.size,\n digest: item.digest.digest,\n pkg_objid: packageMeta.objectId,\n }\n }\n const appDoc: Record<string, unknown> = {\n schema_version: 1,\n doc_type: 'app',\n did: appMeta.did,\n name: appMeta.name,\n version: appMeta.version,\n app_type: appMeta.categories[0],\n author: appMeta.author,\n owner: appMeta.owner,\n controller: appMeta.owner,\n create_time: timestamp,\n last_update_time: timestamp,\n exp: timestamp + APP_DOCUMENT_LIFETIME_SECONDS,\n categories: appMeta.categories,\n pkg_list: pkgList,\n show_name: appMeta.show_name,\n ...(appMeta.permissions.length ? { permissions: appMeta.permissions } : {}),\n ...(appMeta.content_handlers?.length ? { content_handlers: appMeta.content_handlers } : {}),\n selector_type: appMeta.selector_type,\n service_config_tips: appMeta.service_config_tips,\n }\n const appObjectId = appDocObjectId(appDoc)\n const packageMeta: PackageMetaFile = {\n '@schema': PACKAGE_META_SCHEMA,\n app_doc_id: appObjectId,\n package_objects: packageObjects,\n content_index: contentIndex,\n }\n await writeJson(join(temporary, APPDOC_ENTRY), appDoc)\n await writeJson(join(temporary, PACKAGE_META_ENTRY), packageMeta)\n const validated = await validateSnapshot(temporary, appDoc, packageMeta)\n const generatedFiles: DistManifest['generated_files'] = {}\n for (\n const name of [\n APPDOC_ENTRY,\n PACKAGE_META_ENTRY,\n ...prepared.map((item) => `${item.key}.tar.gz`),\n ]\n ) {\n const digest = await digestFile(join(temporary, name))\n generatedFiles[name] = { size: digest.size, digest: `sha256:${digest.sha256}` }\n }\n const manifest: DistManifest = {\n schema_version: 1,\n tool_version: TOOL_VERSION,\n meta_root_id: metaRootId(metaDir),\n source_fingerprint: `sha256:${\n stableJsonDigest({\n app: appMeta,\n pikg: pikgMeta,\n payloads: generatedSubpackages,\n })\n }`,\n app_doc_object_id: appObjectId,\n pikg_file: pikgMeta.pikg_file,\n generated_files: generatedFiles,\n subpackages: generatedSubpackages,\n }\n await writeJson(join(temporary, DIST_MANIFEST_NAME), manifest)\n await replaceDirectory(temporary, distDir)\n return {\n meta_dir: metaDir,\n dist_dir: distDir,\n app_did: appMeta.did,\n app_doc_object_id: appObjectId,\n subpackage_count: validated.subpackages.length,\n subpackages: validated.subpackages.map((item) => ({\n key: item.key,\n source_kind: pikgMeta.sub_pkgs[item.key].source.type,\n size: item.payload_size,\n digest: item.payload_digest,\n pkg_objid: item.pkg_objid,\n })),\n ready_for_pack: true,\n next_command: `buckyos pikg pack ${distDir}`,\n project_dir: projectDir,\n }\n } catch (error) {\n await removeTreeIfExists(temporary)\n throw error\n }\n}\n\nasync function packCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const distInput = optionalInputString(input, 'dist_dir') ?? './dapp_dist'\n const distDir = await safeExistingDirectory(resolveFromCwd(ctx, distInput), 'dapp_dist')\n const manifest = await validateManagedDist(distDir, undefined, true)\n const appDoc = await readJson(join(distDir, APPDOC_ENTRY), APPDOC_ENTRY)\n const packageMeta = parsePackageMeta(\n await readJson(join(distDir, PACKAGE_META_ENTRY), PACKAGE_META_ENTRY),\n )\n const validated = await validateSnapshot(distDir, appDoc, packageMeta)\n if (validated.appDocObjectId !== manifest.app_doc_object_id) {\n throw new ToolError(\n 'INVALID_PACKAGE',\n 'snapshot AppDoc Object ID differs from ownership manifest',\n )\n }\n const temporary = join(distDir, `.${manifest.pikg_file}.tmp-${crypto.randomUUID()}`)\n const finalPath = join(distDir, manifest.pikg_file)\n try {\n await packSnapshot(distDir, temporary, appDoc, packageMeta)\n const inspection = await inspectPikg(temporary)\n if (inspection.app.app_doc_object_id !== manifest.app_doc_object_id) {\n throw new ToolError(\n 'INVALID_PACKAGE',\n 'PIKG self-check returned a different AppDoc Object ID',\n )\n }\n await replaceFile(temporary, finalPath)\n const digest = await digestFile(finalPath)\n return {\n dist_dir: distDir,\n pikg_path: finalPath,\n size: digest.size,\n pikg_digest: `sha256:${digest.sha256}`,\n app_doc_object_id: inspection.app.app_doc_object_id,\n validation: 'passed',\n }\n } catch (error) {\n await removeFileIfExists(temporary)\n throw error\n }\n}\n\nasync function cleanCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = await realDirectory(resolveFromCwd(ctx, metaInput), 'dapp_meta')\n const appMeta = parseAppMeta(await readJson(join(metaDir, 'app.json'), 'app.json'))\n const pikgMeta = parsePikgMeta(\n await readJson(join(metaDir, 'pikg.json'), 'pikg.json'),\n appMeta,\n )\n const configuredDist = resolve(metaDir, pikgMeta.output_dir)\n assertSafeCleanTarget(ctx, metaDir, configuredDist, [])\n await rejectLeafSymlink(configuredDist, 'UNSAFE_CLEAN_TARGET')\n const distDir = await canonicalTarget(configuredDist)\n try {\n await getHost().lstat(distDir)\n } catch (error) {\n if (isHostError(error, 'NotFound')) {\n return { meta_dir: metaDir, dist_dir: distDir, removed: false }\n }\n throw error\n }\n const sourcePaths: string[] = []\n for (const subpackage of Object.values(pikgMeta.sub_pkgs)) {\n if (subpackage.source.type === 'path') {\n try {\n sourcePaths.push(await getHost().realPath(resolve(metaDir, subpackage.source.path)))\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n }\n }\n assertSafeCleanTarget(ctx, metaDir, distDir, sourcePaths)\n await validateManagedDist(distDir, metaRootId(metaDir), true, 'UNSAFE_CLEAN_TARGET')\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || ctx.interactive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'pikg clean requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n )\n }\n const answer = await ctx.io.prompt(`Delete managed PIKG output ${distDir}? [y/N] `)\n if (!answer || !['y', 'yes'].includes(answer.trim().toLowerCase())) {\n throw new ToolError('CONFIRMATION_DECLINED', 'PIKG clean was declined', EXIT_PERMISSION)\n }\n }\n await getHost().remove(distDir, { recursive: true })\n return { meta_dir: metaDir, dist_dir: distDir, removed: true }\n}\n\nfunction parseAppMeta(value: Record<string, unknown>): AppMeta {\n rejectUnknown(\n value,\n [\n 'schema_version',\n 'did',\n 'name',\n 'version',\n 'owner',\n 'author',\n 'show_name',\n 'categories',\n 'permissions',\n 'content_handlers',\n 'selector_type',\n 'service_config_tips',\n ],\n 'app.json',\n )\n if (value.schema_version !== 1) {\n throw new UsageError('UNSUPPORTED_SCHEMA_VERSION', 'app.json.schema_version must be 1')\n }\n const name = developmentString(value.name, 'app.json.name')\n validateAppName(name)\n const version = developmentString(value.version, 'app.json.version')\n validateVersion(version)\n const did = developmentString(value.did, 'app.json.did')\n const owner = developmentString(value.owner, 'app.json.owner')\n deriveAppNamespace(did)\n const categories = value.categories\n if (\n !Array.isArray(categories) || !categories.length ||\n categories.some((item) => typeof item !== 'string')\n ) {\n throw new UsageError(\n 'SCHEMA_VALIDATION_FAILED',\n 'app.json.categories must be a non-empty string array',\n )\n }\n const permissions = developmentValidation(\n () => validatePermissions(value.permissions ?? [], 'app.json.permissions'),\n )\n const serviceConfig = developmentValidation(() =>\n validateServiceConfigTips(\n value.service_config_tips ?? {},\n 'app.json.service_config_tips',\n )\n )\n return {\n schema_version: 1,\n did,\n name,\n version,\n owner,\n author: developmentString(value.author, 'app.json.author'),\n show_name: developmentString(value.show_name, 'app.json.show_name'),\n categories: categories as string[],\n permissions,\n ...(value.content_handlers === undefined ? {} : { content_handlers: developmentValidation(() => validateContentHandlers(value.content_handlers, permissions)) }),\n selector_type: developmentString(value.selector_type, 'app.json.selector_type'),\n service_config_tips: serviceConfig,\n }\n}\n\nfunction parsePikgMeta(value: Record<string, unknown>, app?: AppMeta): PikgMeta {\n rejectUnknown(value, ['schema_version', 'output_dir', 'pikg_file', 'sub_pkgs'], 'pikg.json')\n if (value.schema_version !== 1) {\n throw new UsageError('UNSUPPORTED_SCHEMA_VERSION', 'pikg.json.schema_version must be 1')\n }\n const outputDir = value.output_dir === undefined\n ? '../dapp_dist'\n : developmentString(value.output_dir, 'pikg.json.output_dir')\n const defaultPikgFile = app ? `${app.name}-${app.version}.pikg` : undefined\n const pikgFile = value.pikg_file === undefined\n ? defaultPikgFile ?? (() => {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', 'pikg.json.pikg_file is required')\n })()\n : developmentString(value.pikg_file, 'pikg.json.pikg_file')\n if (\n !SAFE_PIKG_FILE.test(pikgFile) || pikgFile.includes('..') || basename(pikgFile) !== pikgFile\n ) {\n throw new UsageError('INVALID_PIKG_FILE', 'pikg_file must be a safe .pikg file name')\n }\n const rawSubpackages = developmentObject(value.sub_pkgs, 'pikg.json.sub_pkgs')\n if (!Object.keys(rawSubpackages).length) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', 'pikg.json.sub_pkgs must not be empty')\n }\n const subpackages: Record<string, SubpackageInput> = {}\n for (const [key, raw] of Object.entries(rawSubpackages)) {\n validateSubpackageName(key)\n const subpackage = developmentObject(raw, `pikg.json.sub_pkgs.${key}`)\n rejectUnknown(subpackage, ['selector', 'required', 'source'], `pikg.json.sub_pkgs.${key}`)\n const selector = developmentValidation(() =>\n canonicalSelector(subpackage.selector, `pikg.json.sub_pkgs.${key}.selector`)\n )\n assertSelectorCompatible(key, selector, `pikg.json.sub_pkgs.${key}.selector`)\n if (subpackage.required !== undefined && typeof subpackage.required !== 'boolean') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${key}.required must be boolean`)\n }\n const source = developmentObject(subpackage.source, `pikg.json.sub_pkgs.${key}.source`)\n if (source.type === 'path') {\n rejectUnknown(source, ['type', 'path'], `pikg.json.sub_pkgs.${key}.source`)\n subpackages[key] = {\n ...(selector ? { selector } : {}),\n required: subpackage.required === undefined ? true : subpackage.required,\n source: { type: 'path', path: developmentString(source.path, `${key}.source.path`) },\n }\n } else if (source.type === 'docker-image') {\n rejectUnknown(source, ['type', 'image'], `pikg.json.sub_pkgs.${key}.source`)\n subpackages[key] = {\n ...(selector ? { selector } : {}),\n required: subpackage.required === undefined ? true : subpackage.required,\n source: {\n type: 'docker-image',\n image: developmentString(source.image, `${key}.source.image`),\n },\n }\n } else {\n throw new UsageError('INVALID_SOURCE', `${key}.source.type must be path or docker-image`)\n }\n }\n return {\n schema_version: 1,\n output_dir: outputDir,\n pikg_file: pikgFile,\n sub_pkgs: subpackages,\n }\n}\n\nasync function initializeMetaDirectory(\n projectDir: string,\n metaDir: string,\n appMeta: AppMeta,\n pikgMeta: Record<string, unknown>,\n): Promise<void> {\n let existedEmpty = false\n try {\n const stat = await getHost().lstat(metaDir)\n if (!stat.isDirectory || stat.isSymlink) {\n throw new UsageError(\n 'ALREADY_EXISTS',\n 'dapp_meta already exists and is not an empty directory',\n )\n }\n for (const _entry of await getHost().readDir(metaDir)) {\n throw new UsageError('ALREADY_EXISTS', 'dapp_meta already contains files')\n }\n existedEmpty = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n const temporary = await getHost().makeTempDir({ dir: projectDir, prefix: '.buckyos-pikg-init-' })\n try {\n await writeJson(join(temporary, 'app.json'), appMeta)\n await writeJson(join(temporary, 'pikg.json'), pikgMeta)\n parseAppMeta(await readJson(join(temporary, 'app.json'), 'app.json'))\n parsePikgMeta(await readJson(join(temporary, 'pikg.json'), 'pikg.json'), appMeta)\n if (existedEmpty) await getHost().remove(metaDir)\n try {\n await getHost().rename(temporary, metaDir)\n } catch (error) {\n if (existedEmpty) await getHost().mkdir(metaDir)\n throw error\n }\n } catch (error) {\n await removeTreeIfExists(temporary)\n throw error\n }\n}\n\nasync function validateReplaceableDist(distDir: string, expectedMetaRootId: string): Promise<void> {\n try {\n await getHost().lstat(distDir)\n } catch (error) {\n if (isHostError(error, 'NotFound')) return\n throw error\n }\n await validateManagedDist(distDir, expectedMetaRootId, true)\n}\n\nasync function validateManagedDist(\n distDir: string,\n expectedMetaRootId?: string,\n verifyFiles = true,\n unsafeCode = 'UNSAFE_DIST_TARGET',\n): Promise<DistManifest> {\n try {\n const info = await getHost().lstat(distDir)\n if (!info.isDirectory || info.isSymlink) throw new Error('target is not a real directory')\n const manifest = parseDistManifest(\n await readJson(join(distDir, DIST_MANIFEST_NAME), DIST_MANIFEST_NAME),\n )\n if (expectedMetaRootId && manifest.meta_root_id !== expectedMetaRootId) {\n throw new Error('ownership manifest belongs to another dapp_meta')\n }\n const allowed = new Set([\n DIST_MANIFEST_NAME,\n manifest.pikg_file,\n ...Object.keys(manifest.generated_files),\n ])\n for (const entry of await getHost().readDir(distDir)) {\n if (!entry.isFile || entry.isSymlink || !allowed.has(entry.name)) {\n throw new Error(`unmanaged entry exists: ${entry.name}`)\n }\n }\n for (const name of Object.keys(manifest.generated_files)) {\n const info = await getHost().lstat(join(distDir, name))\n if (!info.isFile || info.isSymlink) throw new Error(`generated file is unsafe: ${name}`)\n if (verifyFiles) {\n const expected = manifest.generated_files[name]\n const actual = await digestFile(join(distDir, name))\n if (actual.size !== expected.size || `sha256:${actual.sha256}` !== expected.digest) {\n throw new Error(`generated file was modified: ${name}`)\n }\n }\n }\n return manifest\n } catch (error) {\n if (error instanceof ToolError && error.code === unsafeCode) throw error\n throw new ToolError(\n unsafeCode,\n `managed dist validation failed: ${error instanceof Error ? error.message : String(error)}`,\n 6,\n )\n }\n}\n\nfunction parseDistManifest(value: Record<string, unknown>): DistManifest {\n rejectUnknown(\n value,\n [\n 'schema_version',\n 'tool_version',\n 'meta_root_id',\n 'source_fingerprint',\n 'app_doc_object_id',\n 'pikg_file',\n 'generated_files',\n 'subpackages',\n ],\n DIST_MANIFEST_NAME,\n )\n if (value.schema_version !== 1) throw new Error('unsupported ownership manifest version')\n const pikgFile = String(value.pikg_file ?? '')\n if (\n !SAFE_PIKG_FILE.test(pikgFile) || pikgFile.includes('..') || basename(pikgFile) !== pikgFile\n ) {\n throw new Error('ownership manifest has an unsafe pikg_file')\n }\n const generatedRaw = expectObject(value.generated_files, `${DIST_MANIFEST_NAME}.generated_files`)\n const generated: Record<string, GeneratedFileRecord> = {}\n for (const [name, raw] of Object.entries(generatedRaw)) {\n if (\n !SAFE_GENERATED_FILE.test(name) || name === '.' || name === '..' || name.includes('\\\\') ||\n basename(name) !== name || name === DIST_MANIFEST_NAME || name === pikgFile\n ) {\n throw new Error(`ownership manifest has an unsafe generated file: ${name}`)\n }\n const record = expectObject(raw, `generated_files.${name}`)\n rejectUnknown(record, ['size', 'digest'], `generated_files.${name}`)\n if (typeof record.size !== 'number' || !Number.isSafeInteger(record.size) || record.size < 0) {\n throw new Error(`generated_files.${name}.size is invalid`)\n }\n if (typeof record.digest !== 'string' || !SHA256_ID.test(record.digest)) {\n throw new Error(`generated_files.${name}.digest is invalid`)\n }\n generated[name] = { size: record.size, digest: record.digest }\n }\n if (!generated[APPDOC_ENTRY] || !generated[PACKAGE_META_ENTRY]) {\n throw new Error('ownership manifest is missing required metadata files')\n }\n return {\n schema_version: 1,\n tool_version: String(value.tool_version ?? ''),\n meta_root_id: validateDigestString(value.meta_root_id, 'meta_root_id'),\n source_fingerprint: validateDigestString(value.source_fingerprint, 'source_fingerprint'),\n app_doc_object_id: validateObjectId(value.app_doc_object_id, 'app_doc_object_id'),\n pikg_file: pikgFile,\n generated_files: generated,\n subpackages: expectObject(value.subpackages, 'subpackages') as DistManifest['subpackages'],\n }\n}\n\nfunction assertBuildPaths(metaDir: string, distDir: string, sourcePaths: string[]): void {\n if (pathsOverlap(metaDir, distDir)) {\n throw new UsageError('UNSAFE_OUTPUT_DIR', 'output_dir overlaps dapp_meta')\n }\n for (const source of sourcePaths) {\n if (pathsOverlap(source, distDir)) {\n throw new UsageError('UNSAFE_OUTPUT_DIR', 'output_dir overlaps a subpackage source')\n }\n }\n}\n\nfunction assertSafeCleanTarget(\n ctx: CommandContext,\n metaDir: string,\n distDir: string,\n sourcePaths: string[],\n): void {\n const projectDir = dirname(metaDir)\n const exactProtected = [resolve(ctx.cwd), projectDir]\n const home = getHost().env('HOME') ?? getHost().env('USERPROFILE')\n if (home) exactProtected.push(resolve(home))\n if (\n dirname(distDir) === distDir ||\n exactProtected.some((path) => resolve(path) === resolve(distDir)) ||\n pathsOverlap(metaDir, distDir) || sourcePaths.some((path) => pathsOverlap(path, distDir))\n ) {\n throw new ToolError('UNSAFE_CLEAN_TARGET', 'refusing to clean an unsafe output directory')\n }\n}\n\nasync function replaceDirectory(temporary: string, destination: string): Promise<void> {\n let exists = false\n try {\n await getHost().lstat(destination)\n exists = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n if (!exists) {\n await getHost().rename(temporary, destination)\n return\n }\n const backup = `${destination}.previous-${crypto.randomUUID()}`\n await getHost().rename(destination, backup)\n try {\n await getHost().rename(temporary, destination)\n } catch (error) {\n await getHost().rename(backup, destination)\n throw error\n }\n await getHost().remove(backup, { recursive: true })\n}\n\nasync function replaceFile(temporary: string, destination: string): Promise<void> {\n let exists = false\n try {\n await getHost().lstat(destination)\n exists = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n if (!exists) {\n await getHost().rename(temporary, destination)\n return\n }\n const backup = `${destination}.previous-${crypto.randomUUID()}`\n await getHost().rename(destination, backup)\n try {\n await getHost().rename(temporary, destination)\n } catch (error) {\n await getHost().rename(backup, destination)\n throw error\n }\n await removeFileIfExists(backup)\n}\n\nclass LocalDockerClient implements DockerClient {\n async inspect(reference: string): Promise<DockerImageInfo> {\n let result\n try {\n result = await getHost().run('docker', ['image', 'inspect', reference])\n } catch (error) {\n throw new ToolError(\n 'DOCKER_UNAVAILABLE',\n `Docker inspect is unavailable: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_UNAVAILABLE,\n true,\n )\n }\n if (!result.success) {\n throw new ToolError(\n 'DOCKER_IMAGE_NOT_FOUND',\n `local Docker image is unavailable: ${safeDockerError(result.stderr)}`,\n EXIT_UNAVAILABLE,\n )\n }\n let values: unknown\n try {\n values = JSON.parse(new TextDecoder().decode(result.stdout))\n } catch {\n throw new ToolError('DOCKER_INSPECT_INVALID', 'Docker inspect returned invalid JSON')\n }\n if (!Array.isArray(values) || values.length !== 1) {\n throw new ToolError('DOCKER_INSPECT_INVALID', 'Docker inspect returned an unexpected result')\n }\n const value = developmentObject(values[0], 'Docker inspect')\n const id = developmentString(value.Id, 'Docker image ID').toLowerCase()\n if (!SHA256_ID.test(id)) {\n throw new ToolError('DOCKER_IDENTITY_INVALID', 'Docker image ID is not immutable sha256')\n }\n const architecture = developmentString(value.Architecture, 'Docker architecture')\n const tags = Array.isArray(value.RepoTags)\n ? value.RepoTags.filter((tag): tag is string =>\n typeof tag === 'string' && tag !== '<none>:<none>'\n )\n : []\n return {\n id,\n architecture,\n canonicalName: tags.includes(reference) ? reference : tags[0] ?? reference,\n }\n }\n\n async save(imageId: string, destinationTarGz: string): Promise<void> {\n try {\n const result = await getHost().runGzip(\n 'docker',\n ['image', 'save', imageId],\n destinationTarGz,\n )\n if (!result.success) {\n await removeFileIfExists(destinationTarGz)\n throw new ToolError(\n 'DOCKER_EXPORT_FAILED',\n `Docker image save failed: ${safeDockerError(result.stderr)}`,\n EXIT_UNAVAILABLE,\n )\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw new ToolError(\n 'DOCKER_UNAVAILABLE',\n `Docker save is unavailable: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_UNAVAILABLE,\n true,\n )\n }\n }\n}\n\nfunction resolveFromCwd(ctx: CommandContext, value: string): string {\n return isAbsolute(value) ? resolve(value) : resolve(ctx.cwd, value)\n}\n\nasync function realDirectory(path: string, label: string): Promise<string> {\n const real = await getHost().realPath(path)\n const stat = await getHost().stat(real)\n if (!stat.isDirectory) throw new UsageError('INVALID_PATH', `${label} must be a directory`)\n return real\n}\n\nasync function safeExistingDirectory(path: string, label: string): Promise<string> {\n const info = await getHost().lstat(path)\n if (!info.isDirectory || info.isSymlink) {\n throw new UsageError('INVALID_PATH', `${label} must be a real directory`)\n }\n return await getHost().realPath(path)\n}\n\nasync function canonicalTarget(path: string): Promise<string> {\n const absolute = resolve(path)\n try {\n return await getHost().realPath(absolute)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n const parent = dirname(absolute)\n if (parent === absolute) return absolute\n return join(await canonicalTarget(parent), basename(absolute))\n }\n}\n\nasync function rejectLeafSymlink(path: string, code: string): Promise<void> {\n try {\n if ((await getHost().lstat(path)).isSymlink) {\n throw new ToolError(code, 'configured output_dir must not be a symlink')\n }\n } catch (error) {\n if (isHostError(error, 'NotFound')) return\n throw error\n }\n}\n\nfunction pathsOverlap(left: string, right: string): boolean {\n const leftToRight = relative(resolve(left), resolve(right))\n const rightToLeft = relative(resolve(right), resolve(left))\n const separator = getHost().path.sep\n return leftToRight === '' || !leftToRight.startsWith(`..${separator}`) && leftToRight !== '..' ||\n !rightToLeft.startsWith(`..${separator}`) && rightToLeft !== '..'\n}\n\nfunction metaRootId(metaDir: string): string {\n return `sha256:${sha256Bytes(new TextEncoder().encode(resolve(metaDir)))}`\n}\n\nfunction packageSuffix(key: string): string {\n const suffix = key.toLowerCase().replaceAll(/[^a-z0-9_-]+/g, '-').replaceAll(/^-+|-+$/g, '')\n if (!suffix) {\n throw new UsageError('INVALID_SUBPACKAGE_NAME', `cannot derive package name from ${key}`)\n }\n return suffix\n}\n\nfunction normalizeAppName(value: string): string {\n return value.toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '')\n}\n\nfunction validateAppName(value: string): void {\n if (!APP_NAME.test(value)) throw new UsageError('INVALID_APP_NAME', `invalid App name: ${value}`)\n}\n\nfunction validateVersion(value: string): void {\n if (!VERSION.test(value)) throw new UsageError('INVALID_VERSION', `invalid App version: ${value}`)\n}\n\nfunction deriveAppDid(name: string, owner: string): string {\n const match = /^did:bns:([a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/.exec(owner)\n if (!match) {\n throw new UsageError(\n 'INVALID_OWNER_DID',\n 'Owner DID must be a standard single-label did:bns DID for an ordinary App',\n )\n }\n return `did:bns:${name}.${match[1]}`\n}\n\nasync function requiredPrompt(\n ctx: CommandContext,\n canPrompt: boolean,\n message: string,\n field: string,\n): Promise<string> {\n if (!canPrompt) {\n throw new UsageError('MISSING_REQUIRED_INPUT', `${field} is required`)\n }\n const answer = await ctx.io.prompt(message)\n if (!answer?.trim()) throw new UsageError('MISSING_REQUIRED_INPUT', `${field} is required`)\n return answer.trim()\n}\n\nfunction optionalInputString(input: Record<string, unknown>, key: string): string | undefined {\n return input[key] === undefined ? undefined : expectInputString(input, key)\n}\n\nfunction expectInputString(input: Record<string, unknown>, key: string): string {\n const value = input[key]\n if (typeof value !== 'string' || !value) {\n throw new UsageError('MISSING_REQUIRED_INPUT', `${key} is required`)\n }\n return value\n}\n\nfunction developmentString(value: unknown, label: string): string {\n try {\n return expectNonEmptyString(value, label)\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nfunction developmentObject(value: unknown, label: string): Record<string, unknown> {\n try {\n return expectObject(value, label)\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nfunction developmentValidation<T>(validate: () => T): T {\n try {\n return validate()\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nasync function readJson(path: string, label: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await getHost().readTextFile(path))\n return developmentObject(parsed, label)\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new UsageError('INVALID_JSON', `${label} is not valid JSON`)\n }\n throw error\n }\n}\n\nasync function writeJson(path: string, value: unknown): Promise<void> {\n await getHost().writeTextFile(path, `${JSON.stringify(value, null, 2)}\\n`, {\n createNew: true,\n mode: 0o600,\n })\n}\n\nfunction validateDigestString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !SHA256_ID.test(value)) throw new Error(`${label} is invalid`)\n return value\n}\n\nfunction validateObjectId(value: unknown, label: string): string {\n if (typeof value !== 'string' || !OBJECT_ID.test(value)) throw new Error(`${label} is invalid`)\n return value\n}\n\nfunction statIdentity(value: HostFileInfo): string {\n return JSON.stringify({\n size: value.size,\n mtime: value.mtime?.getTime() ?? null,\n dev: value.dev,\n ino: value.ino,\n mode: value.mode,\n })\n}\n\nfunction displaySource(projectDir: string, source: string): string {\n const display = relative(projectDir, source)\n return display && !display.startsWith(`..${getHost().path.sep}`) && display !== '..'\n ? toPortablePath(display)\n : '[external path]'\n}\n\nfunction toPortablePath(path: string): string {\n return path.split(getHost().path.sep).join('/') || '.'\n}\n\nfunction safeDockerError(bytes: Uint8Array): string {\n const text = new TextDecoder().decode(bytes).trim().replaceAll(/[\\r\\n]+/g, ' ')\n return text.slice(0, 500) || 'unknown Docker error'\n}\n\nasync function removeTreeIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path, { recursive: true })\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nasync function removeFileIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n","import type { CommandContext } from './context.ts'\nimport { EXIT_OPERATION, EXIT_TIMEOUT, ToolError } from './errors.ts'\n\nconst TASK_MANAGER_SERVICE = 'task-manager'\nconst DEFAULT_POLL_INTERVAL_MS = 500\n\nexport interface TaskObservation {\n revision?: number\n phase: string\n outcome?: string\n message?: string\n error?: {\n code?: string\n message?: string\n retryable?: boolean\n details?: Record<string, unknown>\n }\n data: Record<string, unknown>\n progress?: unknown\n}\n\nexport interface TaskWaitOptions {\n observe?: (ctx: CommandContext, taskId: string) => Promise<TaskObservation>\n pollIntervalMs?: number\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n failOnTaskFailure?: boolean\n onObservation?: (observation: TaskObservation) => Promise<void>\n}\n\nexport async function waitForTask(\n ctx: CommandContext,\n taskId: string,\n options: TaskWaitOptions = {},\n): Promise<Record<string, unknown>> {\n const observe = options.observe ?? observeTask\n const sleep = options.sleep ?? abortableSleep\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS\n const failOnTaskFailure = options.failOnTaskFailure ?? true\n let lastProgress = ''\n let lastRevision: number | undefined\n let reader: Awaited<ReturnType<NonNullable<typeof ctx.clients.createEventReader>>> | undefined\n\n try {\n const remaining = Math.max(1, (ctx.deadline ?? Date.now()) - Date.now())\n const eventSignal = AbortSignal.any([ctx.signal, AbortSignal.timeout(remaining)])\n reader = await ctx.clients.createEventReader?.(`/task_mgr/${taskId}`, eventSignal)\n } catch {\n reader = undefined\n }\n\n try {\n while (true) {\n const observation = await observe(ctx, taskId)\n const progress = JSON.stringify({\n task_id: taskId,\n revision: observation.revision,\n phase: observation.phase,\n outcome: observation.outcome,\n progress: observation.progress,\n message: observation.message,\n })\n const changed = observation.revision === undefined\n ? progress !== lastProgress\n : observation.revision !== lastRevision\n if (changed) {\n if (options.onObservation) await options.onObservation(observation)\n else await ctx.io.stderr(`${progress}\\n`)\n lastProgress = progress\n lastRevision = observation.revision\n }\n\n if (observation.phase === 'Terminal') {\n if (failOnTaskFailure && observation.outcome !== 'Succeeded') {\n const error = observation.error\n throw new ToolError(\n normalizeTaskErrorCode(error?.code, observation.outcome),\n error?.message ?? `task ${taskId} ended with ${observation.outcome ?? 'no outcome'}`,\n observation.outcome === 'Canceled' ? EXIT_TIMEOUT : EXIT_OPERATION,\n error?.retryable ?? false,\n { task_id: taskId },\n )\n }\n return observation.data\n }\n\n const remaining = (ctx.deadline ?? Date.now()) - Date.now()\n if (remaining <= 0) {\n throw new ToolError(\n 'TIMEOUT',\n `timed out waiting for task ${taskId}`,\n EXIT_TIMEOUT,\n true,\n { task_id: taskId },\n )\n }\n const interval = Math.min(pollIntervalMs, remaining)\n if (reader) await reader.pullEvent(interval)\n else await sleep(interval, ctx.signal)\n }\n } finally {\n await reader?.close().catch(() => undefined)\n }\n}\n\nasync function observeTask(ctx: CommandContext, taskId: string): Promise<TaskObservation> {\n const response = await ctx.clients.call<unknown>(\n TASK_MANAGER_SERVICE,\n 'get_task',\n { task_id: taskId },\n rpcOptions(ctx),\n )\n const envelope = expectObject(response, 'TaskManager get_task response')\n const task = expectObject(envelope.task ?? envelope, 'TaskManager task')\n const phase = expectString(task.phase, 'task.phase')\n const outcome = optionalString(task.outcome)\n const taskError = isObject(task.error) ? task.error : undefined\n return {\n revision: typeof task.revision === 'number' ? task.revision : undefined,\n phase,\n outcome,\n message: optionalString(task.message),\n error: taskError\n ? {\n code: optionalString(taskError.code),\n message: optionalString(taskError.message),\n retryable: typeof taskError.retryable === 'boolean' ? taskError.retryable : undefined,\n details: isObject(taskError.detail) ? taskError.detail : undefined,\n }\n : undefined,\n progress: task.progress,\n data: task,\n }\n}\n\nfunction rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nfunction normalizeTaskErrorCode(code: string | undefined, outcome: string | undefined): string {\n if (code) return code.trim().replaceAll(/[^A-Za-z0-9]+/g, '_').toUpperCase()\n return outcome === 'Canceled' ? 'CANCELED' : 'TASK_FAILED'\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction expectString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be a string`, 9)\n }\n return value\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!isObject(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, 9)\n }\n return value\n}\n\nfunction abortableSleep(milliseconds: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n return Promise.reject(new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT))\n }\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, milliseconds)\n const onAbort = () => {\n clearTimeout(timer)\n reject(new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT))\n }\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import { namelib, ndm_proxy, ndn } from 'buckyos/node'\nimport type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport {\n EXIT_AUTH,\n EXIT_INTERNAL,\n EXIT_OPERATION,\n EXIT_PERMISSION,\n EXIT_TIMEOUT,\n EXIT_UNAVAILABLE,\n ToolError,\n UsageError,\n} from '../core/errors.ts'\nimport { type TaskObservation, waitForTask } from '../core/task.ts'\nimport { getHost, type HostFile, type HostFileInfo, isHostError } from '../runtime/host.ts'\n\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst CONTROL_PANEL_SERVICE = 'control-panel'\nconst PLAN_SCHEMA_VERSION = 4\nconst STAGING_RELEASE_TIMEOUT_MS = 5_000\nconst ZIP_LOCAL_MAGIC = [0x50, 0x4b, 0x03, 0x04] as const\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst INSTALL_POLICIES = [\n 'strict-public',\n 'normal',\n 'trusted-share',\n 'local-developer',\n 'system-internal',\n] as const\n\ntype PikgPurpose = 'inspect' | 'install'\ntype SourceKind = 'catalog' | 'pikg' | 'url'\n\nexport interface PikgSnapshot {\n kind: 'pikg' | 'url'\n display: string\n path: string\n localFileId?: string\n digest: string\n size: number\n}\n\nexport interface PikgStagingMetadata {\n schema_version: number\n handle: string\n pikg_digest: string\n size: number\n purpose: PikgPurpose\n expires_at?: number\n}\n\nexport interface AppModuleDependencies {\n download?: (url: URL, signal: AbortSignal) => Promise<Uint8Array>\n stagePikg?: (\n ctx: CommandContext,\n snapshot: PikgSnapshot,\n purpose: PikgPurpose,\n ) => Promise<PikgStagingMetadata>\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n}\n\ninterface CatalogSource {\n kind: 'catalog'\n display: string\n serviceSource: { kind: 'identifier'; identifier: string }\n}\n\ninterface StagedSource {\n kind: 'pikg' | 'url'\n display: string\n snapshot: PikgSnapshot\n staging: PikgStagingMetadata\n serviceSource: { kind: 'local_pikg'; staging_handle: string }\n}\n\ntype PreparedSource = CatalogSource | StagedSource\n\ninterface InstallInspection {\n schema_version: number\n plan: Record<string, unknown>\n resolution_status: Record<string, unknown>\n status: Record<string, unknown>\n}\n\nexport function createAppModule(dependencies: AppModuleDependencies = {}): CommandModule {\n const commands = [\n fetchCommand(dependencies),\n listCommand(),\n getCommand(),\n installCommand(dependencies),\n upgradeCommand(dependencies),\n uninstallCommand(dependencies),\n cancelCommand(),\n lifecycleCommand('start', 'Start an installed App'),\n lifecycleCommand('stop', 'Stop an installed App'),\n restartCommand(),\n statusCommand(),\n publishCommand(),\n ]\n return {\n name: 'app',\n summary: 'Inspect, install, upgrade, and control Apps',\n commands: commands.map((command) => {\n const handler = command.handler\n return {\n ...command,\n handler: async (ctx, input) => sanitizeAppOutput(await handler(ctx, input)),\n }\n }),\n }\n}\n\nfunction cancelCommand(): CommandDefinition {\n return {\n verb: 'cancel',\n summary: 'Cancel an installation or upgrade task and release its App mutation',\n positionals: [{ name: 'task_id', description: 'Installation Task ID', required: true }],\n options: [{\n name: 'force',\n description: 'Defer staging cleanup after cancellation',\n type: 'boolean',\n }],\n inputSchema: {\n type: 'object',\n properties: { task_id: { type: 'string', minLength: 1 }, force: { type: 'boolean' } },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app cancel t-0123456789abcdef0123456789abcdef --force'],\n handler: async (ctx, input) =>\n await callControl(ctx, 'apps.install.cancel', {\n task_id: expectString(input, 'task_id'),\n force: input.force === true,\n }),\n }\n}\n\nfunction fetchCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'fetch',\n summary: 'Inspect an App source and optionally write a fresh-install plan',\n positionals: [\n {\n name: 'source',\n description: 'Catalog name/DID, local PIKG path, or HTTP(S) URL',\n required: false,\n },\n ],\n options: sourceOptions([\n { name: 'plan', description: 'Write the v4 InstallPlan to this JSON file', type: 'string' },\n ownerOption(),\n policyOption(),\n ]),\n inputSchema: sourceInputSchema({\n plan: { type: 'string', minLength: 1 },\n owner_user_id: { type: 'string', minLength: 1 },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n target: { type: 'object', additionalProperties: true },\n install_params: { type: 'object', additionalProperties: true },\n }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos app fetch did:bns:app1.alice',\n 'buckyos app fetch ./demo-0.1.0.pikg --plan ./demo.install-plan.json',\n ],\n handler: async (ctx, input) => await fetchApp(ctx, input, dependencies),\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List visible installed Apps',\n inputSchema: emptyInputSchema(),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app list'],\n handler: async (ctx) => await callControl(ctx, 'apps.list', {}),\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return selectorCommand({\n verb: 'get',\n summary: 'Get installation and runtime details for one App',\n access: 'read',\n asyncMode: 'sync',\n handler: async (ctx, input) => {\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const [details, status] = await Promise.all([\n callControl(ctx, 'apps.details', { selector }),\n callControl(ctx, 'apps.status', { selector }),\n ])\n return { details, status }\n },\n })\n}\n\nfunction installCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'install',\n summary: 'Install from a v4 plan or upgrade an existing App from a source',\n positionals: [\n {\n name: 'source',\n description: 'Catalog name/DID, local PIKG path, or HTTP(S) URL',\n required: false,\n },\n ],\n options: sourceOptions([\n { name: 'plan', description: 'Fresh-install v4 InstallPlan JSON file', type: 'string' },\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Preflight and print without submitting',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n policyOption(),\n ]),\n inputSchema: sourceInputSchema({\n plan: { type: 'string', minLength: 1 },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: [\n 'buckyos app install did:bns:app1.alice --plan ./app1.install-plan.json',\n 'buckyos --yes app install https://example.com/app1-1.2.0.pikg',\n ],\n handler: async (ctx, input) => await installApp(ctx, input, dependencies),\n }\n}\n\nfunction upgradeCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'upgrade',\n summary: 'Check and apply Catalog upgrades',\n positionals: [\n { name: 'app_name', description: 'Installed App name or DID; omit for all', required: false },\n ],\n options: [\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Only show the upgrade preflight',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n policyOption(),\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: ['buckyos app upgrade', 'buckyos --yes app upgrade did:bns:app1.alice'],\n handler: async (ctx, input) => await upgradeApps(ctx, input, dependencies),\n }\n}\n\nfunction uninstallCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n ...selectorCommand({\n verb: 'uninstall',\n summary: 'Uninstall an App and explicitly retain or delete its managed data',\n access: 'destructive',\n asyncMode: 'task',\n handler: async (ctx, input) => await uninstallApp(ctx, input, dependencies),\n }),\n options: [\n {\n name: 'data',\n description: 'Managed data disposition',\n type: 'string',\n required: true,\n enum: ['retain', 'delete'],\n },\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Only show the uninstall preflight',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n data: { type: 'string', enum: ['retain', 'delete'] },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name', 'data'],\n additionalProperties: false,\n },\n examples: ['buckyos app uninstall app1 --data retain'],\n }\n}\n\nfunction lifecycleCommand(verb: 'start' | 'stop', summary: string): CommandDefinition {\n return {\n ...selectorCommand({\n verb,\n summary,\n access: 'write',\n asyncMode: verb === 'start' ? 'task' : 'either',\n handler: async (ctx, input) => await mutateLifecycle(ctx, input, verb),\n }),\n options: [\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name'],\n additionalProperties: false,\n },\n }\n}\n\nfunction restartCommand(): CommandDefinition {\n return {\n ...selectorCommand({\n verb: 'restart',\n summary: 'Recreate the runtime instances for an installed App',\n access: 'write',\n asyncMode: 'task',\n handler: async (ctx, input) => await mutateLifecycle(ctx, input, 'restart'),\n }),\n options: [\n {\n name: 'strategy',\n description: 'Restart strategy; rolling is currently unsupported',\n type: 'string',\n enum: ['recreate', 'rolling'],\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n strategy: { type: 'string', enum: ['recreate', 'rolling'] },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name'],\n additionalProperties: false,\n },\n examples: ['buckyos app restart app1'],\n }\n}\n\nfunction statusCommand(): CommandDefinition {\n return {\n verb: 'status',\n summary: 'Show desired, task, scheduled, runtime, version, and readiness state',\n positionals: [\n { name: 'app_name', description: 'Installed App name or DID; omit for all', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { app_name: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app status', 'buckyos app status did:bns:app1.alice'],\n handler: async (ctx, input) => {\n if (typeof input.app_name === 'string') {\n const selector = normalizeAppSelector(input.app_name)\n const [status, details] = await Promise.all([\n callControl(ctx, 'apps.status', { selector }),\n callControl(ctx, 'apps.details', { selector }),\n ])\n const detailObject = expectObject(details, 'apps.details response')\n const summary = expectObject(detailObject.summary, 'apps.details summary')\n return {\n ...expectObject(status, 'apps.status response'),\n web_hosts: Array.isArray(summary.web_hosts) ? summary.web_hosts : [],\n }\n }\n const listed = expectObject(await callControl(ctx, 'apps.list', {}), 'apps.list response')\n const apps = Array.isArray(listed.apps) ? listed.apps : []\n const items = await Promise.all(apps.map(async (item) => {\n const app = expectObject(item, 'apps.list item')\n const selector = expectString(app, 'app_instance_id')\n return {\n ...expectObject(\n await callControl(ctx, 'apps.status', { selector }),\n 'apps.status response',\n ),\n web_hosts: Array.isArray(app.web_hosts) ? app.web_hosts : [],\n }\n }))\n return { total: items.length, items }\n },\n }\n}\n\nfunction publishCommand(): CommandDefinition {\n return {\n verb: 'publish',\n summary: 'Package a directory on the control-panel node into the Zone Repo as an App candidate',\n description:\n 'Calls control-panel app.publish: packages <local_dir> (a path on the control-panel node; nothing is uploaded) with the AppDoc template, stores PackageMeta and the AppDoc in the Zone Repo/NamedStore, and stages a self-checked PIKG there. The AppDoc is not Owner-signed and no BNS/App DID record is updated, so this is not an authoritative App release.',\n positionals: [\n { name: 'local_dir', description: 'Absolute source directory on the control-panel node' },\n ],\n options: [\n {\n name: 'app-doc',\n property: 'app_doc',\n description: 'AppDoc template JSON file (pkg_list entries without pkg_objid)',\n type: 'string',\n required: true,\n },\n {\n name: 'app-type',\n property: 'app_type',\n description: 'App type; defaults to the template app_type',\n type: 'string',\n enum: ['dapp', 'web', 'agent'],\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n local_dir: { type: 'string', minLength: 1 },\n app_doc: { type: 'string', minLength: 1 },\n app_type: { type: 'string', enum: ['dapp', 'web', 'agent'] },\n },\n required: ['local_dir', 'app_doc'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos app publish /srv/build/demo-web --app-doc ./demo-web.appdoc.json',\n 'buckyos app publish /srv/build/demo-agent --app-doc ./demo-agent.appdoc.json --app-type agent',\n ],\n handler: async (ctx, input) => {\n const localDir = expectString(input, 'local_dir')\n if (!isAbsolute(localDir)) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n 'local_dir must be an absolute path on the control-panel node',\n )\n }\n let appDoc: unknown\n try {\n appDoc = JSON.parse(\n await getHost().readTextFile(resolveFromCwd(ctx, expectString(input, 'app_doc'))),\n )\n } catch (error) {\n throw new UsageError(\n 'INVALID_APP_DOC',\n `failed to read AppDoc template: ${errorMessage(error)}`,\n )\n }\n if (!isObject(appDoc)) {\n throw new UsageError('INVALID_APP_DOC', 'AppDoc template must be a JSON object')\n }\n const result = expectObject(\n await callControl(ctx, 'app.publish', {\n local_dir: localDir,\n app_doc: appDoc,\n ...(typeof input.app_type === 'string' ? { app_type: input.app_type } : {}),\n }),\n 'app.publish response',\n )\n const { ok: _ok, ...published } = result\n return {\n ...published,\n publish_status: expectString(result, 'publish_status'),\n app_doc_signature: 'not-signed',\n app_did_publication: 'not-published',\n }\n },\n }\n}\n\nasync function fetchApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n const source = await prepareSource(ctx, input, 'inspect', dependencies)\n try {\n let inspection = await inspectSource(ctx, source, input)\n const planPathInput = optionalString(input.plan)\n let planPath: string | undefined\n if (planPathInput) {\n inspection = await finalizePlanChoices(ctx, source, input, inspection)\n const plan = inspection.plan\n assertPortablePlan(plan)\n planPath = resolveFromCwd(ctx, planPathInput)\n await writePlanFile(ctx, planPath, plan)\n }\n return {\n source: sourceSummary(source),\n app: inspection.plan.app,\n source_identity: inspection.plan.source_identity,\n resolution: inspection.resolution_status,\n status: inspection.status,\n plan_path: planPath ?? null,\n plan_fingerprint: planPath ? inspection.plan.plan_fingerprint : null,\n }\n } finally {\n await releaseStaging(ctx, source)\n }\n}\n\nasync function installApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const submittedPlan = optionalString(input.plan)\n ? await readPlanFile(resolveFromCwd(ctx, String(input.plan)))\n : undefined\n const source = await prepareSource(ctx, input, 'install', dependencies)\n let keepStaging = false\n try {\n let inspection = submittedPlan\n ? await recomputePlan(ctx, source, input, submittedPlan)\n : await inspectSource(ctx, source, input)\n verifyPikgBinding(source, submittedPlan ?? inspection.plan)\n const app = expectObject(inspection.plan.app, 'inspection.plan.app')\n const appDid = expectString(app, 'did')\n const plannedOwner = submittedPlan ? expectString(submittedPlan, 'owner_user_id') : undefined\n const installed = await findInstalled(ctx, appDid, plannedOwner)\n\n if (submittedPlan && installed) {\n throw new ToolError(\n 'PLAN_NOT_APPLICABLE',\n 'a fresh-install plan cannot be applied over an installed App',\n )\n }\n if (!submittedPlan && !installed) {\n throw new ToolError(\n 'PLAN_REQUIRED',\n `App is not installed; run app fetch ${source.display} --plan <path> first`,\n )\n }\n\n if (submittedPlan) {\n assertPlanMatchesInspection(submittedPlan, inspection)\n } else {\n const scope = installedScope(installed!)\n inspection = await inspectSource(ctx, source, input, { ...scope, action: 'upgrade' })\n verifyPikgBinding(source, inspection.plan)\n }\n\n if (input.dry_run === true) {\n return {\n action: 'dry_run',\n source: sourceSummary(source),\n plan: inspection.plan,\n status: inspection.status,\n }\n }\n\n if (planUse(inspection.plan) === 'SATISFIED') {\n return satisfiedResult(inspection)\n }\n await confirmChange(ctx, 'install', confirmationSummary(inspection))\n const params = {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(inspection.plan),\n options: installOptions(input),\n plan: submittedPlan ?? inspection.plan,\n approved_plan_fingerprint: expectString(inspection.plan, 'plan_fingerprint'),\n idempotency_key: idempotencyKey(ctx),\n }\n const submitted = expectObject(\n await callControl(ctx, 'apps.submit', params),\n 'apps.submit response',\n )\n if (submitted.action === 'satisfied' || submitted.task_id === null) {\n return submitted\n }\n const taskId = expectString(submitted, 'task_id')\n keepStaging = true\n if (input.no_wait === true) return submitted\n try {\n const status = await waitForTask(ctx, taskId, {\n observe: observeInstallTask,\n sleep: dependencies.sleep,\n })\n return { ...submitted, status }\n } finally {\n keepStaging = false\n }\n } finally {\n if (!keepStaging) await releaseStaging(ctx, source)\n }\n}\n\nasync function upgradeApps(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const selector = typeof input.app_name === 'string'\n ? normalizeAppSelector(input.app_name)\n : undefined\n const check = expectObject(\n await callControl(ctx, 'apps.upgrade.check', selector ? { selector } : {}),\n 'apps.upgrade.check response',\n )\n const items = Array.isArray(check.items) ? check.items : []\n const actionable = items.filter((value) => {\n const item = isObject(value) ? value : {}\n return item.state === 'UPDATE_AVAILABLE' || item.state === 'PERMISSION_RECONFIRM_REQUIRED'\n })\n\n if (input.dry_run === true) return { action: 'dry_run', check }\n if (actionable.length === 0) return { action: 'satisfied', total: items.length, items }\n\n await confirmChange(ctx, 'upgrade', {\n total: items.length,\n update_count: actionable.length,\n items,\n })\n\n let submitted: Record<string, unknown>\n let installTask = false\n if (selector) {\n const item = expectObject(actionable[0], 'upgrade item')\n const appDid = expectString(item, 'app_did')\n const details = await findInstalled(ctx, appDid)\n if (!details) throw new ToolError('RESOURCE_NOT_FOUND', `App is not installed: ${appDid}`)\n const source: CatalogSource = {\n kind: 'catalog',\n display: appDid,\n serviceSource: { kind: 'identifier', identifier: appDid },\n }\n const inspection = await inspectSource(ctx, source, input, {\n ...installedScope(details),\n action: 'upgrade',\n })\n submitted = expectObject(\n await callControl(ctx, 'apps.submit', {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(inspection.plan),\n options: installOptions(input),\n plan: inspection.plan,\n approved_plan_fingerprint: expectString(inspection.plan, 'plan_fingerprint'),\n idempotency_key: idempotencyKey(ctx),\n }),\n 'apps.submit response',\n )\n installTask = submitted.task_id !== null\n } else {\n submitted = expectObject(\n await callControl(ctx, 'apps.upgrade', { idempotency_key: idempotencyKey(ctx) }),\n 'apps.upgrade response',\n )\n }\n if (submitted.task_id === null || submitted.action === 'satisfied') return submitted\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const status = await waitForTask(ctx, taskId, {\n observe: installTask ? observeInstallTask : undefined,\n sleep: dependencies.sleep,\n })\n return { ...submitted, status }\n}\n\nasync function uninstallApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const status = await callControl(ctx, 'apps.status', { selector })\n const preflight = { action: 'uninstall', data_disposition: input.data, status }\n if (input.dry_run === true) return { action: 'dry_run', preflight }\n await confirmChange(ctx, 'uninstall', preflight)\n const submitted = expectObject(\n await callControl(ctx, 'apps.uninstall', {\n selector,\n data_disposition: input.data,\n idempotency_key: idempotencyKey(ctx),\n }),\n 'apps.uninstall response',\n )\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const task = await waitForTask(ctx, taskId, { sleep: dependencies.sleep })\n return { ...submitted, status: task }\n}\n\nasync function mutateLifecycle(\n ctx: CommandContext,\n input: Record<string, unknown>,\n verb: 'start' | 'stop' | 'restart',\n): Promise<Record<string, unknown>> {\n if (input.strategy === 'rolling') {\n throw new ToolError(\n 'UNSUPPORTED_STRATEGY',\n 'rolling restart is not supported by the current deployment strategy',\n )\n }\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const submitted = expectObject(\n await callControl(ctx, `apps.${verb}`, {\n selector,\n idempotency_key: idempotencyKey(ctx),\n ...(verb === 'restart' ? { restart_strategy: input.strategy ?? 'recreate' } : {}),\n }),\n `apps.${verb} response`,\n )\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const task = await waitForTask(ctx, taskId)\n return { ...submitted, status: task }\n}\n\nasync function prepareSource(\n ctx: CommandContext,\n input: Record<string, unknown>,\n purpose: PikgPurpose,\n dependencies: AppModuleDependencies,\n): Promise<PreparedSource> {\n const classified = await classifySource(ctx, input)\n if (classified.kind === 'catalog') return classified\n\n const host = getHost()\n const localDirectory = localPikgDirectory(ctx)\n let directory: string\n let localFileId: string | undefined\n if (localDirectory) {\n try {\n await host.mkdir(localDirectory, { recursive: true, mode: 0o700 })\n directory = localDirectory\n localFileId = crypto.randomUUID().replaceAll('-', '')\n } catch (error) {\n if (!isHostError(error, 'PermissionDenied') && !isHostError(error, 'NotFound')) throw error\n }\n }\n if (!localFileId) {\n await host.mkdir(ctx.configStore.root, { recursive: true, mode: 0o700 })\n directory = await host.makeTempDir({ dir: ctx.configStore.root, prefix: '.pikg-' })\n }\n let path = host.path.join(directory!, `${localFileId ?? 'source'}.pikg`)\n const snapshotAt = (destination: string) =>\n classified.kind === 'url'\n ? downloadPikg(classified.url, destination, dependencies.download, ctx.signal)\n : readPikg(classified.path, destination, ctx.signal)\n try {\n let snapshot: PikgSnapshot\n try {\n snapshot = await snapshotAt(path)\n } catch (error) {\n if (!localFileId || !isHostError(error, 'PermissionDenied')) throw error\n await host.remove(path).catch(() => {})\n localFileId = undefined\n await host.mkdir(ctx.configStore.root, { recursive: true, mode: 0o700 })\n directory = await host.makeTempDir({ dir: ctx.configStore.root, prefix: '.pikg-' })\n path = host.path.join(directory, 'source.pikg')\n snapshot = await snapshotAt(path)\n }\n snapshot.localFileId = localFileId\n const stage = dependencies.stagePikg ?? stagePikg\n const metadata = await stage(ctx, snapshot, purpose)\n if (metadata.schema_version !== PLAN_SCHEMA_VERSION) {\n throw new ToolError('UNSUPPORTED_SCHEMA_VERSION', 'staging returned a non-v4 schema')\n }\n if (metadata.pikg_digest !== snapshot.digest || metadata.size !== snapshot.size) {\n throw new ToolError(\n 'PIKG_DIGEST_MISMATCH',\n 'the staged PIKG does not match the client byte snapshot',\n EXIT_OPERATION,\n false,\n {\n expected_digest: snapshot.digest,\n staged_digest: metadata.pikg_digest,\n expected_size: snapshot.size,\n staged_size: metadata.size,\n },\n )\n }\n if (metadata.purpose !== purpose) {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n 'staging purpose does not match the request',\n 9,\n )\n }\n return {\n kind: snapshot.kind,\n display: snapshot.display,\n snapshot,\n staging: metadata,\n serviceSource: { kind: 'local_pikg', staging_handle: metadata.handle },\n }\n } finally {\n await host.remove(localFileId ? path : directory!, { recursive: !localFileId })\n .catch(() => {})\n }\n}\n\nasync function classifySource(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<\n | CatalogSource\n | { kind: 'pikg'; path: string }\n | { kind: 'url'; url: URL }\n> {\n const positional = optionalString(input.source)\n const pikg = optionalString(input.pikg)\n if (positional && pikg) {\n throw new UsageError('ARGUMENT_CONFLICT', '<source> and --pikg are mutually exclusive')\n }\n const raw = pikg ?? positional\n if (!raw) throw new UsageError('MISSING_ARGUMENT', 'source or --pikg is required')\n const forced = pikg ? 'pikg' : optionalString(input.from)\n if (pikg && forced && forced !== 'pikg') {\n throw new UsageError('ARGUMENT_CONFLICT', '--pikg conflicts with --from')\n }\n\n if (forced === 'url') return { kind: 'url', url: parsePikgUrl(raw) }\n if (forced === 'pikg') return { kind: 'pikg', path: resolveFromCwd(ctx, raw) }\n if (forced === 'catalog') {\n return {\n kind: 'catalog',\n display: normalizeCatalogIdentifier(raw),\n serviceSource: { kind: 'identifier', identifier: normalizeCatalogIdentifier(raw) },\n }\n }\n if (forced) throw new UsageError('INVALID_ARGUMENT', `invalid --from value: ${forced}`)\n\n if (/^https?:\\/\\//i.test(raw)) return { kind: 'url', url: parsePikgUrl(raw) }\n const candidatePath = resolveFromCwd(ctx, raw)\n const stat = await tryLstat(candidatePath)\n if (stat) {\n if (!stat.isFile) {\n throw new UsageError('INVALID_PIKG_SOURCE', `PIKG source is not a regular file: ${raw}`)\n }\n return { kind: 'pikg', path: candidatePath }\n }\n if (looksLikeLocalPath(raw)) {\n throw new UsageError('PIKG_NOT_FOUND', `PIKG source does not exist: ${raw}`)\n }\n const identifier = normalizeCatalogIdentifier(raw)\n return {\n kind: 'catalog',\n display: identifier,\n serviceSource: { kind: 'identifier', identifier },\n }\n}\n\nfunction localPikgDirectory(ctx: CommandContext): string | undefined {\n const root = getHost().policy.buckyosRoot\n const hostname = new URL(ctx.connection.endpoint).hostname\n if (!root || !['localhost', '127.0.0.1', '[::1]'].includes(hostname)) return undefined\n return getHost().path.join(root, 'cache', 'control_panel', 'pikg_staging', 'incoming')\n}\n\nasync function* fileChunks(file: HostFile, size: number): AsyncGenerator<Uint8Array> {\n const buffer = new Uint8Array(size)\n while (true) {\n let used = 0\n while (used < buffer.length) {\n const read = await file.read(buffer.subarray(used))\n if (read === null) break\n if (read === 0) throw new UsageError('PIKG_READ_FAILED', 'PIKG read made no progress')\n used += read\n }\n if (used === 0) break\n yield buffer.subarray(0, used)\n }\n}\n\nasync function writePikgSnapshot(\n path: string,\n chunks: AsyncIterable<Uint8Array> | Iterable<Uint8Array>,\n signal: AbortSignal,\n): Promise<{ path: string; digest: string; size: number }> {\n const output = await getHost().open(path, { write: true, createNew: true, mode: 0o600 })\n const hash = getHost().createHash('sha256')\n const magic = new Uint8Array(ZIP_LOCAL_MAGIC.length)\n let size = 0\n try {\n for await (const chunk of chunks) {\n signal.throwIfAborted()\n if (size < magic.length) magic.set(chunk.subarray(0, magic.length - size), size)\n hash.update(chunk)\n size += chunk.length\n if (!Number.isSafeInteger(size)) throw new UsageError('PIKG_TOO_LARGE', 'PIKG is too large')\n let offset = 0\n while (offset < chunk.length) {\n const written = await output.write(chunk.subarray(offset))\n if (written === 0) throw new UsageError('PIKG_WRITE_FAILED', 'PIKG write made no progress')\n offset += written\n }\n }\n validatePikgSnapshot(magic.subarray(0, Math.min(size, magic.length)))\n await output.sync()\n return { path, size, digest: hash.digestHex() }\n } finally {\n await output.close()\n }\n}\n\nasync function readPikg(\n source: string,\n destination: string,\n signal: AbortSignal,\n): Promise<PikgSnapshot> {\n let file: HostFile\n try {\n file = await getHost().open(source, { read: true })\n } catch (error) {\n throw new UsageError('PIKG_READ_FAILED', `failed to open PIKG: ${errorMessage(error)}`)\n }\n try {\n const before = await file.stat()\n if (!before.isFile) throw new UsageError('INVALID_PIKG_SOURCE', 'PIKG source is not a file')\n const snapshot = await writePikgSnapshot(destination, fileChunks(file, 256 * 1024), signal)\n const after = await file.stat()\n if (\n snapshot.size !== before.size || before.size !== after.size ||\n before.mtime?.getTime() !== after.mtime?.getTime()\n ) {\n throw new UsageError('PIKG_READ_FAILED', 'PIKG changed while being read')\n }\n return { kind: 'pikg', display: source, ...snapshot }\n } finally {\n await file.close()\n }\n}\n\nasync function downloadPikg(\n url: URL,\n destination: string,\n downloader: AppModuleDependencies['download'],\n signal: AbortSignal,\n): Promise<PikgSnapshot> {\n let chunks: Uint8Array[] | ReadableStream<Uint8Array> | undefined\n try {\n chunks = downloader ? [await downloader(url, signal)] : await defaultDownload(url, signal)\n const snapshot = await writePikgSnapshot(destination, chunks, signal)\n return { kind: 'url', display: safeUrl(url), ...snapshot }\n } catch (error) {\n if (error instanceof ToolError || isHostError(error, 'PermissionDenied')) throw error\n signal.throwIfAborted()\n throw new ToolError(\n 'PIKG_DOWNLOAD_FAILED',\n `failed to download PIKG: ${errorMessage(error)}`,\n 5,\n true,\n )\n } finally {\n if (chunks instanceof ReadableStream && !chunks.locked) await chunks.cancel().catch(() => {})\n }\n}\n\nasync function defaultDownload(url: URL, signal: AbortSignal): Promise<ReadableStream<Uint8Array>> {\n const response = await fetch(url, { method: 'GET', redirect: 'follow', signal })\n if (!response.ok || !response.body) {\n await response.body?.cancel()\n throw new ToolError(\n 'PIKG_DOWNLOAD_FAILED',\n `PIKG download returned HTTP ${response.status}`,\n 5,\n response.status >= 500,\n )\n }\n return response.body\n}\n\nasync function stagePikg(\n ctx: CommandContext,\n snapshot: PikgSnapshot,\n purpose: PikgPurpose,\n): Promise<PikgStagingMetadata> {\n const identity = { pikg_digest: snapshot.digest, size: snapshot.size, purpose }\n if (snapshot.localFileId) {\n try {\n const value = expectObject(\n await callControl(ctx, 'apps.staging.finalize', {\n ...identity,\n local_file_id: snapshot.localFileId,\n }),\n 'apps.staging.finalize response',\n )\n return parseStagingMetadata(value)\n } catch (error) {\n if (!errorMessage(error).includes('LOCAL_PIKG_UNAVAILABLE')) throw error\n }\n }\n const session = ctx.session\n if (!session) throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n const token = (await session.ensureValid()).token\n const proxy = ndm_proxy.createNdmProxyClient({\n endpoint: gatewayOrigin(ctx.connection.endpoint),\n sessionToken: token,\n fetcher: (request: RequestInfo | URL, init?: RequestInit) =>\n fetch(normalizeNdmRequestUrl(request), { ...init, signal: ctx.signal }),\n })\n let fileObjectId: string\n try {\n const file = await getHost().open(snapshot.path, { read: true })\n const chunks = new ndn.SimpleChunkList()\n const hash = getHost().createHash('sha256')\n try {\n for await (const bytes of fileChunks(file, 32 * 1024 * 1024)) {\n ctx.signal.throwIfAborted()\n hash.update(bytes)\n const chunk = ndn.ChunkId.fromMix256Result(bytes.length, ndn.sha256Bytes(bytes))\n await proxy.putChunk(chunk.toString(), bytes)\n chunks.appendChunk(chunk)\n }\n } finally {\n await file.close()\n }\n if (chunks.total_size !== snapshot.size || hash.digestHex() !== snapshot.digest) {\n throw new ToolError('PIKG_DIGEST_MISMATCH', 'PIKG snapshot changed during upload')\n }\n let content = chunks.body[0].toString()\n if (chunks.body.length > 1) {\n const [id, body] = chunks.genObjId()\n await proxy.putObject({ obj_id: id.toString(), obj_data: body })\n content = id.toString()\n }\n const fileObject = new ndn.FileObject(`${snapshot.digest}.pikg`, snapshot.size, content)\n const [id, body] = fileObject.genObjId()\n await proxy.putObject({ obj_id: id.toString(), obj_data: body })\n fileObjectId = id.toString()\n } catch (error) {\n if (error instanceof ToolError) throw error\n ctx.signal.throwIfAborted()\n throw new ToolError(\n 'PIKG_UPLOAD_FAILED',\n `failed to upload PIKG: ${errorMessage(error)}`,\n 5,\n true,\n )\n }\n const value = expectObject(\n await callControl(ctx, 'apps.staging.finalize', {\n ...identity,\n source_obj_id: fileObjectId,\n }),\n 'apps.staging.finalize response',\n )\n return parseStagingMetadata(value)\n}\n\nfunction parseStagingMetadata(value: Record<string, unknown>): PikgStagingMetadata {\n return {\n schema_version: expectNumber(value, 'schema_version'),\n handle: expectString(value, 'handle'),\n pikg_digest: expectString(value, 'pikg_digest'),\n size: expectNumber(value, 'size'),\n purpose: expectString(value, 'purpose') as PikgPurpose,\n expires_at: optionalNumber(value.expires_at),\n }\n}\n\nfunction normalizeNdmRequestUrl(request: RequestInfo | URL): RequestInfo | URL {\n if (typeof request === 'string') {\n return request.replaceAll('%3A', ':').replaceAll('%3a', ':')\n }\n if (request instanceof URL) {\n return new URL(request.toString().replaceAll('%3A', ':').replaceAll('%3a', ':'))\n }\n return request\n}\n\nasync function inspectSource(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n overrides: Record<string, unknown> = {},\n): Promise<InstallInspection> {\n const result = await callControl(ctx, 'apps.inspect', {\n ...sourceRpcParams(source),\n ...scopeAndChoiceParams(input),\n ...overrides,\n options: installOptions(input),\n })\n return expectInspection(result)\n}\n\nasync function recomputePlan(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n plan: Record<string, unknown>,\n overrides: Record<string, unknown> = {},\n): Promise<InstallInspection> {\n return expectInspection(\n await callControl(ctx, 'apps.plan.recompute', {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(plan),\n ...overrides,\n plan,\n options: installOptions(input),\n }),\n )\n}\n\nasync function finalizePlanChoices(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n initial: InstallInspection,\n): Promise<InstallInspection> {\n let inspection = initial\n const configReady = readinessValue(inspection, 'config') === 'READY'\n if (ctx.config.nonInteractive) {\n if (!configReady && input.target === undefined && input.install_params === undefined) {\n throw new ToolError(\n 'PLAN_INPUT_REQUIRED',\n 'Installer defaults do not form a complete install plan; provide target/install_params with --input',\n )\n }\n return inspection\n }\n\n await ctx.io.stderr(`${JSON.stringify(confirmationSummary(inspection), null, 2)}\\n`)\n if (!ctx.io.inputIsTerminal || ctx.confirmed) return inspection\n const answer = (await ctx.io.prompt('Accept default install plan? [Y/e/n] '))?.trim()\n .toLowerCase()\n if (answer === 'n' || answer === 'no') {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'install plan creation was declined',\n EXIT_PERMISSION,\n )\n }\n if (answer === 'e' || answer === 'edit') {\n const raw = await ctx.io.prompt('Plan choices JSON ({\"target\":...,\"install_params\":...}): ')\n const choices = parsePlanChoices(raw)\n inspection = await recomputePlan(ctx, source, input, initial.plan, choices)\n }\n if (readinessValue(inspection, 'config') !== 'READY') {\n throw new ToolError(\n 'PLAN_INPUT_REQUIRED',\n 'the selected plan still has unresolved configuration requirements',\n )\n }\n return inspection\n}\n\nasync function findInstalled(\n ctx: CommandContext,\n appDid: string,\n ownerUserId?: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n return expectObject(\n await callControl(ctx, 'apps.details', {\n selector: appDid,\n ...(ownerUserId ? { owner_user_id: ownerUserId } : {}),\n }),\n 'apps.details response',\n )\n } catch (error) {\n if (error instanceof ToolError && error.code === 'RESOURCE_NOT_FOUND') return undefined\n throw error\n }\n}\n\nasync function observeInstallTask(\n ctx: CommandContext,\n taskId: string,\n): Promise<TaskObservation> {\n const status = expectObject(\n await callControl(ctx, 'apps.install.status', { task_id: taskId }),\n 'apps.install.status response',\n )\n const error = isObject(status.error) ? status.error : undefined\n const sanitizedDetails = error && isObject(error.details)\n ? sanitizeAppOutput(error.details)\n : undefined\n return {\n phase: expectString(status, 'task_phase'),\n outcome: optionalString(status.task_outcome),\n message: installProgressMessage(status),\n error: error\n ? {\n code: optionalString(error.code),\n message: optionalString(error.message),\n retryable: typeof error.retryable === 'boolean' ? error.retryable : undefined,\n details: isObject(sanitizedDetails) ? sanitizedDetails : undefined,\n }\n : undefined,\n data: status,\n }\n}\n\nasync function confirmChange(\n ctx: CommandContext,\n action: string,\n summary: Record<string, unknown>,\n): Promise<void> {\n await ctx.io.stderr(`${JSON.stringify({ action, preflight: summary }, null, 2)}\\n`)\n if (ctx.confirmed) return\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n `${action} requires --yes in non-interactive execution`,\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Proceed with app ${action}? [y/N] `))?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', `${action} was declined`, EXIT_PERMISSION)\n }\n}\n\nasync function callControl<T = unknown>(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n try {\n return await ctx.clients.call<T>(CONTROL_PANEL_SERVICE, method, params, rpcOptions(ctx))\n } catch (error) {\n throw normalizeAppServiceError(error)\n }\n}\n\nfunction normalizeAppServiceError(error: unknown): ToolError {\n if (error instanceof ToolError) return error\n const message = errorMessage(error)\n const structured = parseEmbeddedJson(message)\n if (structured && typeof structured.code === 'string') {\n const rawDetails = isObject(structured.details) ? structured.details : structured\n const details = sanitizeAppOutput(rawDetails)\n return new ToolError(\n structured.code,\n typeof structured.message === 'string' ? structured.message : message,\n structured.code === 'AMBIGUOUS_APP_TARGET' ? EXIT_OPERATION : EXIT_OPERATION,\n structured.retryable === true,\n isObject(details) ? details : {},\n )\n }\n const lower = message.toLowerCase()\n if (\n lower.includes('invalid token') || lower.includes('unauthorized') ||\n lower.includes('rpc call error: 401') || lower.includes('session expired') ||\n lower.includes('token expired')\n ) {\n return new ToolError(\n lower.includes('expired') ? 'SESSION_EXPIRED' : 'INVALID_SESSION',\n lower.includes('expired') ? 'the session token has expired' : message,\n EXIT_AUTH,\n )\n }\n if (lower.includes('abort') || lower.includes('cancel')) {\n return new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT)\n }\n if (lower.includes('timeout') || lower.includes('timed out')) {\n return new ToolError('TIMEOUT', 'operation timed out', EXIT_TIMEOUT, true)\n }\n if (\n lower.includes('fetch failed') || lower.includes('connection refused') ||\n lower.includes('rpc call error: 502') || lower.includes('rpc call error: 503') ||\n lower.includes('rpc call error: 504')\n ) {\n return new ToolError('SERVICE_UNAVAILABLE', message, EXIT_UNAVAILABLE, true)\n }\n if (message.includes('APP_NOT_INSTALLED') || /not found/i.test(message)) {\n return new ToolError('RESOURCE_NOT_FOUND', message)\n }\n if (/permission|forbidden/i.test(message)) {\n return new ToolError('PERMISSION_DENIED', message, EXIT_PERMISSION)\n }\n if (/rolling restart is not supported/i.test(message)) {\n return new ToolError('UNSUPPORTED_STRATEGY', message)\n }\n return new ToolError('OPERATION_FAILED', message, EXIT_OPERATION)\n}\n\nfunction sourceRpcParams(source: PreparedSource): Record<string, unknown> {\n return { source: source.serviceSource }\n}\n\nfunction scopeAndChoiceParams(input: Record<string, unknown>): Record<string, unknown> {\n return {\n ...(typeof input.owner_user_id === 'string' ? { owner_user_id: input.owner_user_id } : {}),\n ...(isObject(input.target) ? { target: input.target } : {}),\n ...(isObject(input.install_params) ? { install_params: input.install_params } : {}),\n }\n}\n\nfunction planScopeAndOptions(plan: Record<string, unknown>): Record<string, unknown> {\n return {\n owner_user_id: expectString(plan, 'owner_user_id'),\n target: expectObject(plan.target, 'plan.target'),\n install_params: expectObject(plan.install_params, 'plan.install_params'),\n }\n}\n\nfunction installedScope(details: Record<string, unknown>): Record<string, unknown> {\n return {\n owner_user_id: expectString(details, 'owner_user_id'),\n }\n}\n\nfunction installOptions(input: Record<string, unknown>): Record<string, unknown> {\n const policy = optionalString(input.policy) ?? 'normal'\n return { policy: policy.replaceAll('-', '_').toUpperCase() }\n}\n\nfunction sourceSummary(source: PreparedSource): Record<string, unknown> {\n if (source.kind === 'catalog') return { kind: source.kind, identifier: source.display }\n return {\n kind: source.kind,\n source: source.display,\n pikg_digest: source.snapshot.digest,\n size: source.snapshot.size,\n }\n}\n\nfunction confirmationSummary(inspection: InstallInspection): Record<string, unknown> {\n const plan = inspection.plan\n return {\n plan_fingerprint: plan.plan_fingerprint,\n plan_use: plan.plan_use,\n app: plan.app,\n app_instance_id: plan.app_instance_id,\n owner_user_id: plan.owner_user_id,\n target: plan.target,\n selected_packages: plan.selected_packages,\n install_params: plan.install_params,\n readiness: inspection.status.readiness,\n warnings: inspection.status.warnings ?? [],\n }\n}\n\nfunction satisfiedResult(inspection: InstallInspection): Record<string, unknown> {\n return {\n action: 'satisfied',\n task_id: null,\n app_instance_id: inspection.plan.app_instance_id,\n app_doc_object_id: expectObject(inspection.plan.app, 'plan.app').object_id,\n }\n}\n\nfunction assertPlanMatchesInspection(\n plan: Record<string, unknown>,\n inspection: InstallInspection,\n): void {\n const fingerprint = expectString(plan, 'plan_fingerprint')\n if (fingerprint !== inspection.plan.plan_fingerprint) {\n throw new ToolError(\n 'PLAN_STALE',\n 'the plan no longer matches the authoritative source, scope, target, or configuration',\n EXIT_OPERATION,\n false,\n {\n plan_fingerprint: fingerprint,\n current_fingerprint: inspection.plan.plan_fingerprint,\n },\n )\n }\n}\n\nfunction verifyPikgBinding(\n source: PreparedSource,\n plan: Record<string, unknown>,\n): void {\n if (source.kind === 'catalog') return\n const identity = expectObject(plan.source_identity, 'plan.source_identity')\n const digest = expectString(identity, 'pikg_digest')\n if (digest !== source.snapshot.digest) {\n throw new ToolError(\n 'PLAN_STALE',\n 'the PIKG byte snapshot does not match the plan source digest',\n EXIT_OPERATION,\n false,\n { plan_digest: digest, source_digest: source.snapshot.digest },\n )\n }\n}\n\nfunction assertPortablePlan(plan: Record<string, unknown>): void {\n if (plan.schema_version !== PLAN_SCHEMA_VERSION) {\n throw new ToolError(\n 'UNSUPPORTED_SCHEMA_VERSION',\n `InstallPlan schema must be v${PLAN_SCHEMA_VERSION}`,\n )\n }\n expectString(plan, 'plan_fingerprint')\n expectString(plan, 'task_id')\n const allowed = new Set([\n 'schema_version',\n 'plan_use',\n 'task_id',\n 'app_instance_id',\n 'owner_user_id',\n 'source_identity',\n 'app',\n 'app_doc',\n 'resolution',\n 'target',\n 'selected_packages',\n 'required_contents',\n 'install_params',\n 'service_spec_config',\n 'plan_fingerprint',\n 'created_at',\n ])\n for (const key of Object.keys(plan)) {\n if (!allowed.has(key)) {\n throw new ToolError('PLAN_STALE', `InstallPlan contains an unknown field: ${key}`)\n }\n }\n assertNoPlanSecrets(plan, 'plan')\n}\n\nfunction assertNoPlanSecrets(value: unknown, path: string): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => assertNoPlanSecrets(item, `${path}[${index}]`))\n return\n }\n if (!isObject(value)) return\n for (const [key, child] of Object.entries(value)) {\n const normalized = key.toLowerCase()\n const disallowed = normalized === 'staging_handle' || normalized === 'staging_path' ||\n normalized === 'session_token' || normalized === 'refresh_token' ||\n normalized === 'private_key' || normalized === 'password' ||\n normalized.endsWith('_token') || normalized.endsWith('_password') ||\n normalized.endsWith('_private_key') ||\n (normalized.endsWith('secret') && normalized !== 'secret_ref')\n if (disallowed) {\n throw new ToolError('INVALID_PLAN_SECRET', `${path}.${key} is forbidden in InstallPlan`)\n }\n if (\n typeof child === 'string' &&\n (/^[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:]+:[^\\s/@]+@/i.test(child) ||\n /^(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis):\\/\\//i.test(child))\n ) {\n throw new ToolError(\n 'INVALID_PLAN_SECRET',\n `${path}.${key} contains a connection string; use SecretRef`,\n )\n }\n assertNoPlanSecrets(child, `${path}.${key}`)\n }\n}\n\nasync function readPlanFile(path: string): Promise<Record<string, unknown>> {\n let raw: string\n try {\n raw = await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError('PLAN_READ_FAILED', `failed to read InstallPlan: ${errorMessage(error)}`)\n }\n let value: unknown\n try {\n value = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_PLAN_JSON', 'InstallPlan is not valid JSON')\n }\n const plan = expectObject(value, 'InstallPlan')\n assertPortablePlan(plan)\n return plan\n}\n\nasync function writePlanFile(\n ctx: CommandContext,\n path: string,\n plan: Record<string, unknown>,\n): Promise<void> {\n const exists = await tryLstat(path)\n if (exists) {\n if (!exists.isFile) {\n throw new UsageError('INVALID_PLAN_PATH', 'InstallPlan destination is not a regular file')\n }\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n `InstallPlan already exists: ${path}; use --yes to overwrite it`,\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Overwrite existing InstallPlan ${path}? [y/N] `))\n ?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'InstallPlan overwrite was declined',\n EXIT_PERMISSION,\n )\n }\n }\n }\n const content = `${JSON.stringify(plan, null, 2)}\\n`\n try {\n await getHost().writeTextFile(\n path,\n content,\n exists ? { mode: 0o600 } : { createNew: true, mode: 0o600 },\n )\n if (getHost().platform !== 'windows') await getHost().chmod(path, 0o600)\n } catch (error) {\n throw new UsageError('PLAN_WRITE_FAILED', `failed to write InstallPlan: ${errorMessage(error)}`)\n }\n}\n\nasync function releaseStaging(ctx: CommandContext, source: PreparedSource): Promise<void> {\n if (source.kind === 'catalog') return\n try {\n await ctx.clients.call(\n CONTROL_PANEL_SERVICE,\n 'apps.staging.release',\n { staging_handle: source.staging.handle },\n {\n traceId: ctx.traceId,\n timeoutMs: STAGING_RELEASE_TIMEOUT_MS,\n signal: new AbortController().signal,\n },\n )\n } catch (error) {\n await ctx.io.stderr(`warning: failed to release PIKG staging lease: ${errorMessage(error)}\\n`)\n }\n}\n\nfunction expectInspection(value: unknown): InstallInspection {\n const object = expectObject(value, 'apps.inspect response')\n const schemaVersion = expectNumber(object, 'schema_version')\n if (schemaVersion !== PLAN_SCHEMA_VERSION) {\n throw new ToolError(\n 'UNSUPPORTED_SCHEMA_VERSION',\n `Installer returned schema v${schemaVersion}; v${PLAN_SCHEMA_VERSION} is required`,\n )\n }\n const inspection: InstallInspection = {\n schema_version: schemaVersion,\n plan: expectObject(object.plan, 'inspection.plan'),\n resolution_status: expectObject(object.resolution_status, 'inspection.resolution_status'),\n status: expectObject(object.status, 'inspection.status'),\n }\n assertPortablePlan(inspection.plan)\n if (inspection.status.plan_fingerprint !== inspection.plan.plan_fingerprint) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', 'inspection fingerprint fields disagree', 9)\n }\n return inspection\n}\n\nfunction parsePlanChoices(raw: string | null | undefined): Record<string, unknown> {\n if (!raw) throw new ToolError('PLAN_INPUT_REQUIRED', 'plan choices JSON is required')\n let value: unknown\n try {\n value = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_INPUT_JSON', 'plan choices are not valid JSON')\n }\n const choices = expectObject(value, 'plan choices')\n for (const key of Object.keys(choices)) {\n if (key !== 'target' && key !== 'install_params') {\n throw new UsageError('INVALID_ARGUMENT', `unknown plan choice: ${key}`)\n }\n }\n return choices\n}\n\nfunction normalizeCatalogIdentifier(value: string): string {\n const raw = value.trim()\n if (\n !raw || /^https?:\\/\\//i.test(raw) || raw.includes('/') || raw.includes('\\\\') || /\\s/.test(raw)\n ) {\n throw new UsageError('INVALID_APP_NAME', `invalid Catalog App identifier: ${value}`)\n }\n if (raw.startsWith('did:')) {\n return parseAppDid(raw)\n }\n return raw.includes('.') ? raw.toLowerCase() : parseAppDid(`did:bns:${raw}`)\n}\n\nfunction normalizeAppSelector(value: string): string {\n return normalizeCatalogIdentifier(value)\n}\n\nfunction parseAppDid(raw: string): string {\n let did: InstanceType<typeof namelib.DID>\n try {\n did = namelib.DID.fromStr(raw)\n } catch (error) {\n throw new UsageError('INVALID_APP_DID', `invalid App DID: ${errorMessage(error)}`)\n }\n if (did.method === 'key' || did.method === 'dev') {\n throw new UsageError('INVALID_APP_DID', 'key-class DIDs cannot identify an App')\n }\n return did.toString()\n}\n\nfunction parsePikgUrl(value: string): URL {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new UsageError('INVALID_PIKG_URL', `invalid PIKG URL: ${value}`)\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new UsageError('INVALID_PIKG_URL', 'PIKG URL must use HTTP or HTTPS')\n }\n if (url.username || url.password) {\n throw new UsageError('INVALID_PIKG_URL', 'PIKG URL must not contain credentials')\n }\n return url\n}\n\nfunction validatePikgSnapshot(bytes: Uint8Array): void {\n if (bytes.length < ZIP_LOCAL_MAGIC.length) {\n throw new UsageError('INVALID_PIKG', 'PIKG is too small to be a ZIP container')\n }\n if (!ZIP_LOCAL_MAGIC.every((byte, index) => bytes[index] === byte)) {\n throw new UsageError('INVALID_PIKG', 'PIKG magic mismatch: expected a ZIP container')\n }\n}\n\nfunction gatewayOrigin(endpoint: string): string {\n const url = new URL(endpoint)\n const marker = url.pathname.indexOf('/kapi')\n url.pathname = marker >= 0 ? url.pathname.slice(0, marker) || '/' : '/'\n url.search = ''\n url.hash = ''\n return url.toString().replace(/\\/$/, '')\n}\n\nfunction safeUrl(url: URL): string {\n const safe = new URL(url)\n safe.search = ''\n safe.hash = ''\n return safe.toString()\n}\n\nfunction looksLikeLocalPath(value: string): boolean {\n return value.includes('/') || value.includes('\\\\') || value.startsWith('.') ||\n value.toLowerCase().endsWith('.pikg')\n}\n\nasync function tryLstat(path: string): Promise<HostFileInfo | undefined> {\n try {\n return await getHost().lstat(path)\n } catch (error) {\n if (isHostError(error, 'NotFound')) return undefined\n throw new UsageError('FILE_ACCESS_FAILED', `failed to inspect ${path}: ${errorMessage(error)}`)\n }\n}\n\nfunction resolveFromCwd(ctx: CommandContext, path: string): string {\n return isAbsolute(path) ? resolve(path) : resolve(ctx.cwd, path)\n}\n\nfunction parseEmbeddedJson(message: string): Record<string, unknown> | undefined {\n for (let index = message.indexOf('{'); index >= 0; index = message.indexOf('{', index + 1)) {\n try {\n const value = JSON.parse(message.slice(index))\n if (isObject(value)) return value\n } catch {\n // Try the next opening brace; kRPC prefixes structured service errors.\n }\n }\n return undefined\n}\n\nfunction readinessValue(inspection: InstallInspection, field: string): string | undefined {\n const readiness = isObject(inspection.status.readiness) ? inspection.status.readiness : undefined\n return readiness ? optionalString(readiness[field]) : undefined\n}\n\nfunction planUse(plan: Record<string, unknown>): string | undefined {\n return optionalString(plan.plan_use)\n}\n\nfunction installProgressMessage(status: Record<string, unknown>): string | undefined {\n const stage = optionalString(status.stage)\n const progress = isObject(status.progress) ? status.progress : undefined\n const percent = progress && typeof progress.percent === 'number'\n ? `${progress.percent}%`\n : undefined\n return [stage, percent].filter(Boolean).join(' ') || undefined\n}\n\nfunction idempotencyKey(ctx: CommandContext): string {\n return ctx.idempotencyKey ?? crypto.randomUUID()\n}\n\nfunction rejectDryRunNoWait(input: Record<string, unknown>): void {\n if (input.dry_run === true && input.no_wait === true) {\n throw new UsageError('ARGUMENT_CONFLICT', '--dry-run and --no-wait are mutually exclusive')\n }\n}\n\nfunction selectorCommand(options: {\n verb: string\n summary: string\n access: 'read' | 'write' | 'destructive'\n asyncMode: 'sync' | 'task' | 'either'\n handler: CommandDefinition['handler']\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n positionals: [{ name: 'app_name', description: 'Installed App name or DID' }],\n inputSchema: {\n type: 'object',\n properties: { app_name: { type: 'string', minLength: 1 } },\n required: ['app_name'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: options.access },\n asyncMode: options.asyncMode,\n requiresSession: true,\n examples: [`buckyos app ${options.verb} app1`],\n handler: options.handler,\n }\n}\n\nfunction sourceOptions(\n extra: NonNullable<CommandDefinition['options']>,\n): NonNullable<CommandDefinition['options']> {\n return [\n {\n name: 'from',\n description: 'Force source type',\n type: 'string',\n enum: ['catalog', 'pikg', 'url'],\n },\n { name: 'pikg', description: 'Explicit local PIKG path', type: 'string' },\n ...extra,\n ]\n}\n\nfunction sourceInputSchema(extra: Record<string, JsonSchema>): JsonSchema {\n return {\n type: 'object',\n properties: {\n source: { type: 'string', minLength: 1 },\n from: { type: 'string', enum: ['catalog', 'pikg', 'url'] },\n pikg: { type: 'string', minLength: 1 },\n ...extra,\n },\n additionalProperties: false,\n }\n}\n\nfunction emptyInputSchema(): JsonSchema {\n return { type: 'object', properties: {}, additionalProperties: false }\n}\n\nfunction ownerOption(): NonNullable<CommandDefinition['options']>[number] {\n return {\n name: 'owner',\n property: 'owner_user_id',\n description: 'Installation owner user',\n type: 'string',\n }\n}\n\nfunction policyOption(): NonNullable<CommandDefinition['options']>[number] {\n return {\n name: 'policy',\n description: 'Installer trust policy',\n type: 'string',\n enum: [...INSTALL_POLICIES],\n }\n}\n\nfunction rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nfunction expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!isObject(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, EXIT_INTERNAL)\n }\n return value\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction expectString(object: Record<string, unknown>, property: string): string\nfunction expectString(value: unknown, property: string): string\nfunction expectString(value: unknown, property: string): string {\n const candidate = isObject(value) ? value[property] : value\n if (typeof candidate !== 'string' || !candidate.trim()) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${property} must be a non-empty string`, 9)\n }\n return candidate\n}\n\nfunction expectNumber(object: Record<string, unknown>, property: string): number {\n const value = object[property]\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${property} must be a non-negative integer`, 9)\n }\n return value\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value : undefined\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction sanitizeAppOutput(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sanitizeAppOutput)\n if (!isObject(value)) return value\n const result: Record<string, unknown> = {}\n const forbidden = new Set([\n 'spec_path',\n 'staging_handle',\n 'staging_path',\n 'source_url',\n 'session_token',\n 'refresh_token',\n 'private_key',\n 'password',\n 'connection_string',\n 'database_url',\n ])\n for (const [key, child] of Object.entries(value)) {\n if (!forbidden.has(key.toLowerCase())) result[key] = sanitizeAppOutput(child)\n }\n return result\n}\n","import type { CommandContext } from './context.ts'\nimport { resolveServiceUrl } from './runtime.ts'\nimport { ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nexport interface ArtifactDownload {\n path: string\n size: number\n sha256: string\n}\n\nexport type ArtifactFetcher = (\n url: URL,\n ctx: CommandContext,\n) => Promise<Uint8Array>\n\nexport async function downloadArtifact(\n ctx: CommandContext,\n service: string,\n rawUrl: string,\n rawPath: string,\n fetcher: ArtifactFetcher = defaultArtifactFetcher,\n): Promise<ArtifactDownload> {\n const path = getHost().path.isAbsolute(rawPath)\n ? rawPath\n : getHost().path.resolve(ctx.cwd, rawPath)\n const base = new URL(resolveServiceUrl(ctx.config, service))\n const url = new URL(rawUrl, `${base.protocol}//${base.host}`)\n if (url.origin !== base.origin || url.username || url.password) {\n throw new ToolError('INVALID_DOWNLOAD_URL', 'artifact URL must use the configured Zone origin')\n }\n const bytes = await fetcher(url, ctx)\n try {\n const file = await getHost().open(path, { createNew: true, write: true })\n try {\n let offset = 0\n while (offset < bytes.length) offset += await file.write(bytes.subarray(offset))\n await file.sync()\n } finally {\n await file.close()\n }\n } catch (error) {\n if (isHostError(error, 'AlreadyExists')) {\n throw new UsageError('OUTPUT_EXISTS', `output path already exists: ${path}`)\n }\n try {\n await getHost().remove(path)\n } catch {\n // Preserve the original write error if best-effort cleanup also fails.\n }\n throw error\n }\n const digest = await crypto.subtle.digest('SHA-256', Uint8Array.from(bytes).buffer)\n return { path, size: bytes.byteLength, sha256: toHex(new Uint8Array(digest)) }\n}\n\nasync function defaultArtifactFetcher(url: URL, ctx: CommandContext): Promise<Uint8Array> {\n const token = ctx.session ? (await ctx.session.ensureValid()).token : undefined\n const response = await fetch(url, {\n headers: token ? { authorization: `Bearer ${token}` } : undefined,\n signal: ctx.signal,\n })\n if (!response.ok) {\n throw new ToolError(\n 'DOWNLOAD_FAILED',\n `artifact download failed with HTTP ${response.status}`,\n )\n }\n return new Uint8Array(await response.arrayBuffer())\n}\n\nfunction toHex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { ArtifactFetcher } from '../core/download.ts'\nimport { downloadArtifact } from '../core/download.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n requiredInputString,\n splitServices,\n} from '../core/service.ts'\nimport { waitForTask } from '../core/task.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nexport interface DiagnosticModuleDependencies {\n download?: ArtifactFetcher\n}\n\nexport function createDiagnosticModule(\n dependencies: DiagnosticModuleDependencies = {},\n): CommandModule {\n return {\n name: 'diagnostic',\n summary: 'Collect and export privileged redacted diagnostic bundles',\n commands: [collectCommand(), exportCommand(dependencies)],\n }\n}\n\nfunction collectCommand(): CommandDefinition {\n return {\n verb: 'collect',\n summary: 'Create a redacted diagnostic bundle Task',\n options: [\n {\n name: 'services',\n description: 'Comma-separated service IDs',\n type: 'string',\n required: true,\n },\n { name: 'since', description: 'RFC 3339 lower time boundary', type: 'string' },\n { name: 'until', description: 'RFC 3339 upper time boundary', type: 'string' },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return after Task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n services: {},\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['services'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'task',\n requiresSession: true,\n examples: [\n 'buckyos --idempotency-key diag-42 diagnostic collect --services scheduler,node_daemon --since 2026-08-25T00:00:00Z',\n ],\n handler: async (ctx, input) => {\n const services = splitServices(input.services)\n if (services.length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'at least one diagnostic service is required')\n }\n const response = expectObject(\n await callService(\n ctx,\n CONTROL_PANEL,\n 'diagnostic.collect',\n compact({\n services,\n since: inputString(input, 'since'),\n until: inputString(input, 'until'),\n idempotency_key: ctx.idempotencyKey ?? `diagnostic-${crypto.randomUUID()}`,\n }),\n ),\n 'Control Panel diagnostic.collect response',\n )\n const taskId = expectString(response.task_id, 'diagnostic.collect.task_id')\n if (input.no_wait === true) return { task_id: taskId }\n return await waitForTask(ctx, taskId)\n },\n }\n}\n\nfunction exportCommand(dependencies: DiagnosticModuleDependencies): CommandDefinition {\n return {\n verb: 'export',\n summary: 'Export one diagnostic bundle to a new file',\n positionals: [{ name: 'bundle_id', description: 'Opaque bundle ID', required: true }],\n options: [{\n name: 'path',\n description: 'New destination file',\n type: 'string',\n required: true,\n }],\n inputSchema: {\n type: 'object',\n properties: {\n bundle_id: { type: 'string', minLength: 1 },\n path: { type: 'string', minLength: 1 },\n },\n required: ['bundle_id', 'path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos diagnostic export diag-opaque --path ./diagnostic.zip'],\n handler: async (ctx, input) => await exportDiagnostic(ctx, input, dependencies),\n }\n}\n\nasync function exportDiagnostic(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: DiagnosticModuleDependencies,\n): Promise<Record<string, unknown>> {\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'diagnostic.export', {\n bundle_id: requiredInputString(input, 'bundle_id'),\n }),\n 'Control Panel diagnostic.export response',\n )\n const downloaded = await downloadArtifact(\n ctx,\n CONTROL_PANEL,\n expectString(response.url, 'diagnostic.export.url'),\n requiredInputString(input, 'path'),\n dependencies.download,\n )\n const expected = typeof response.artifact_sha256 === 'string'\n ? response.artifact_sha256\n : undefined\n if (expected && downloaded.sha256 !== expected) {\n try {\n await getHost().remove(downloaded.path)\n } catch {\n // Report the integrity failure even if best-effort cleanup is denied.\n }\n throw new ToolError('ARTIFACT_HASH_MISMATCH', 'diagnostic archive SHA-256 mismatch')\n }\n return {\n ...downloaded,\n bundle_id: response.bundle_id ?? input.bundle_id,\n content_sha256: response.sha256 ?? null,\n expires_at: response.expires_at ?? null,\n }\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { type ArtifactFetcher, downloadArtifact } from '../core/download.ts'\nimport { EXIT_TIMEOUT, ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n requiredInputString,\n splitServices,\n} from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n// Stored entry levels (control-panel sys_log_mgr normalize_log_level); WARN is stored as warning.\nconst LOG_LEVELS = ['error', 'warning', 'info', 'debug', 'trace']\n\nexport interface LogModuleDependencies {\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n download?: ArtifactFetcher\n}\n\nexport function createLogModule(dependencies: LogModuleDependencies = {}): CommandModule {\n return {\n name: 'log',\n summary: 'List services, query, follow, and export redacted system logs',\n commands: [\n servicesCommand(),\n queryCommand(),\n tailCommand(dependencies),\n exportCommand(dependencies),\n ],\n }\n}\n\nfunction servicesCommand(): CommandDefinition {\n return {\n verb: 'services',\n summary: 'List the service IDs that have system logs',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n outputSchema: {\n type: 'object',\n properties: { services: { type: 'array', items: OBJECT_OUTPUT } },\n required: ['services'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos log services'],\n handler: async (ctx) => {\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.list', {}),\n 'Control Panel log service list',\n )\n if (!Array.isArray(response.services)) invalidResponse('log service list')\n return { services: response.services }\n },\n }\n}\n\nfunction queryCommand(): CommandDefinition {\n return {\n verb: 'query',\n summary: 'Query structured redacted log entries',\n options: [\n ...filterOptions(false),\n {\n name: 'direction',\n description: 'Page direction',\n type: 'string',\n enum: ['forward', 'backward'],\n },\n { name: 'cursor', description: 'Opaque page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 500', type: 'integer' },\n ],\n inputSchema: filterSchema({\n direction: { type: 'string', enum: ['forward', 'backward'] },\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n }),\n outputSchema: pageSchema(),\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos log query --service scheduler --level error --limit 100'],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, true)\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.query', params),\n 'Control Panel log query response',\n )\n if (!Array.isArray(response.entries)) invalidResponse('log query entries')\n return { items: response.entries, next_cursor: response.nextCursor ?? null }\n },\n }\n}\n\nfunction tailCommand(dependencies: LogModuleDependencies): CommandDefinition {\n const sleep = dependencies.sleep ?? abortableSleep\n return {\n verb: 'tail',\n summary: 'Continuously stream structured redacted log entries',\n options: [\n ...filterOptions(false),\n {\n name: 'from',\n description: 'Initial read position',\n type: 'string',\n enum: ['start', 'end'],\n },\n ],\n inputSchema: filterSchema({ from: { type: 'string', enum: ['start', 'end'] } }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'stream',\n requiresSession: true,\n examples: ['buckyos --timeout 10m log tail --service scheduler --from end'],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, false)\n if (params.services.length !== 1) {\n throw new UsageError('INVALID_ARGUMENT', 'log tail requires exactly one service')\n }\n let cursor: string | undefined\n while (true) {\n const remaining = (ctx.deadline ?? Date.now()) - Date.now()\n if (remaining <= 0) throw timeoutError()\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.tail', {\n ...params,\n cursor,\n from: inputString(input, 'from') ?? 'end',\n limit: 500,\n }),\n 'Control Panel log tail response',\n )\n if (!Array.isArray(response.entries)) invalidResponse('log tail entries')\n for (const entry of response.entries) {\n await ctx.io.stdout(`${\n JSON.stringify({\n schema_version: 1,\n type: 'log-entry',\n entry,\n })\n }\\n`)\n }\n cursor = expectString(response.nextCursor, 'log tail nextCursor')\n await sleep(\n Math.min(500, Math.max(1, (ctx.deadline ?? Date.now()) - Date.now())),\n ctx.signal,\n )\n }\n },\n }\n}\n\nfunction exportCommand(dependencies: LogModuleDependencies): CommandDefinition {\n return {\n verb: 'export',\n summary: 'Export a bounded redacted log archive to a new file',\n options: [\n ...filterOptions(true),\n { name: 'path', description: 'New destination file', type: 'string', required: true },\n ],\n inputSchema: {\n ...filterSchema({ path: { type: 'string', minLength: 1 } }),\n required: ['path'],\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos log export --services scheduler,node_daemon --since 2026-08-25T00:00:00Z --path ./logs.zip',\n ],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, false)\n if (params.services.length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'log export requires at least one service')\n }\n if (!params.since && !params.until) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n 'log export requires a since or until time boundary',\n )\n }\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.download', {\n ...params,\n mode: 'filtered',\n }),\n 'Control Panel log export response',\n )\n const downloaded = await downloadArtifact(\n ctx,\n CONTROL_PANEL,\n expectString(response.url, 'log export url'),\n requiredInputString(input, 'path'),\n dependencies.download,\n )\n return downloaded\n },\n }\n}\n\nfunction filterOptions(plural: boolean) {\n return [\n {\n name: plural ? 'services' : 'service',\n property: plural ? 'services' : 'service',\n description: plural\n ? 'Comma-separated service IDs (buckyos log services)'\n : 'Service ID (buckyos log services)',\n type: 'string' as const,\n required: true,\n },\n {\n name: 'file',\n description: 'Exact filename in the service log directory',\n type: 'string' as const,\n },\n {\n name: 'level',\n description: `Log level: ${LOG_LEVELS.join(', ')} (warn = warning)`,\n type: 'string' as const,\n },\n { name: 'keyword', description: 'Case-insensitive content filter', type: 'string' as const },\n { name: 'since', description: 'RFC 3339 lower time boundary', type: 'string' as const },\n { name: 'until', description: 'RFC 3339 upper time boundary', type: 'string' as const },\n ]\n}\n\nfunction filterSchema(extra: Record<string, JsonSchema>): JsonSchema {\n return {\n type: 'object',\n properties: {\n service: { type: 'string', minLength: 1 },\n services: {},\n file: { type: 'string', minLength: 1 },\n level: { type: 'string', minLength: 1 },\n keyword: { type: 'string', minLength: 1 },\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n ...extra,\n },\n additionalProperties: false,\n }\n}\n\nfunction normalizeFilter(\n input: Record<string, unknown>,\n withPage: boolean,\n): Record<string, unknown> & { services: string[] } {\n const services = splitServices(input.services ?? input.service)\n if (services.length === 0) throw new UsageError('INVALID_ARGUMENT', 'service is required')\n const limit = input.limit === undefined ? undefined : Number(input.limit)\n if (limit !== undefined && (!Number.isSafeInteger(limit) || limit < 1 || limit > 500)) {\n throw new UsageError('INVALID_ARGUMENT', 'limit must be an integer between 1 and 500')\n }\n return compact({\n services,\n file: inputString(input, 'file'),\n level: normalizeLevel(inputString(input, 'level')),\n keyword: inputString(input, 'keyword'),\n since: normalizeLogTime(input, 'since'),\n until: normalizeLogTime(input, 'until'),\n direction: withPage ? inputString(input, 'direction') ?? 'forward' : undefined,\n cursor: withPage ? inputString(input, 'cursor') : undefined,\n limit: withPage ? limit : undefined,\n }) as Record<string, unknown> & { services: string[] }\n}\n\nfunction normalizeLevel(value: string | undefined): string | undefined {\n if (!value) return undefined\n const level = value.toLowerCase() === 'warn' ? 'warning' : value.toLowerCase()\n if (!LOG_LEVELS.includes(level)) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `level must be one of ${LOG_LEVELS.join(', ')} (warn = warning)`,\n )\n }\n return level\n}\n\nfunction normalizeLogTime(input: Record<string, unknown>, key: string): string | undefined {\n const value = inputString(input, key)\n if (!value) return undefined\n if (!Number.isFinite(Date.parse(value))) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339`)\n }\n return value\n}\n\nfunction pageSchema(): JsonSchema {\n return {\n type: 'object',\n properties: { items: { type: 'array', items: {} }, next_cursor: {} },\n required: ['items', 'next_cursor'],\n additionalProperties: false,\n }\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n\nfunction invalidResponse(label: string): never {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} is invalid`)\n}\n\nfunction timeoutError(): ToolError {\n return new ToolError('TIMEOUT', 'timed out following logs', EXIT_TIMEOUT, true)\n}\n\nfunction abortableSleep(milliseconds: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.reject(new ToolError('CANCELED', 'operation canceled'))\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer)\n reject(new ToolError('CANCELED', 'operation canceled'))\n }\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, milliseconds)\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n parseTimestamp,\n requiredInputString,\n} from '../core/service.ts'\nimport { waitForTask } from '../core/task.ts'\n\nconst TASK_MANAGER = 'task-manager'\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nexport function createTaskModule(): CommandModule {\n return {\n name: 'task',\n summary: 'Inspect, wait for, cancel, and retry durable Tasks',\n commands: [listCommand(), getCommand(), waitCommand(), cancelCommand(), retryCommand()],\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List visible Tasks',\n options: [\n { name: 'owner', description: 'Creator user ID', type: 'string' },\n { name: 'type', description: 'Task schema ID', type: 'string' },\n { name: 'state', description: 'Task phase', type: 'string' },\n { name: 'since', description: 'Created at or after this time', type: 'string' },\n { name: 'until', description: 'Created at or before this time', type: 'string' },\n { name: 'cursor', description: 'Opaque page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 500', type: 'integer' },\n {\n name: 'include-archived',\n property: 'include_archived',\n description: 'Include archived Tasks',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n owner: { type: 'string', minLength: 1 },\n type: { type: 'string', minLength: 1 },\n state: { type: 'string', minLength: 1 },\n since: {},\n until: {},\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n include_archived: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n outputSchema: pageSchema(),\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task list --state running --limit 50'],\n handler: async (ctx, input) => {\n const limit = normalizeLimit(input.limit)\n const response = expectObject(\n await callService(\n ctx,\n TASK_MANAGER,\n 'list_tasks',\n compact({\n creator_user_id: inputString(input, 'owner'),\n schema_id: inputString(input, 'type'),\n phase: input.state === undefined ? undefined : normalizePhase(String(input.state)),\n created_after: parseTimestamp(input.since, 'since'),\n created_before: parseTimestamp(input.until, 'until'),\n cursor: inputString(input, 'cursor'),\n limit,\n include_archived: input.include_archived === true,\n }),\n ),\n 'TaskManager list_tasks response',\n )\n const items = response.tasks\n if (!Array.isArray(items)) invalidResponse('list_tasks.tasks')\n return { items, next_cursor: response.next_cursor ?? null }\n },\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return {\n verb: 'get',\n summary: 'Get one Task snapshot and its direct children',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n options: [\n {\n name: 'children-cursor',\n property: 'children_cursor',\n description: 'Child page cursor',\n type: 'string',\n },\n {\n name: 'children-limit',\n property: 'children_limit',\n description: 'Child page size',\n type: 'integer',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n children_cursor: { type: 'string', minLength: 1 },\n children_limit: { type: 'integer', minimum: 1 },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task get t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n const [taskResponse, childrenResponse] = await Promise.all([\n callService(ctx, TASK_MANAGER, 'get_task', { task_id: taskId }),\n callService(\n ctx,\n TASK_MANAGER,\n 'get_subtasks',\n compact({\n task_id: taskId,\n cursor: inputString(input, 'children_cursor'),\n limit: normalizeLimit(input.children_limit),\n }),\n ),\n ])\n const taskEnvelope = expectObject(taskResponse, 'TaskManager get_task response')\n const childrenEnvelope = expectObject(childrenResponse, 'TaskManager get_subtasks response')\n if (!Array.isArray(childrenEnvelope.tasks)) invalidResponse('get_subtasks.tasks')\n return {\n task: expectObject(taskEnvelope.task ?? taskEnvelope, 'TaskManager task'),\n children: {\n items: childrenEnvelope.tasks,\n next_cursor: childrenEnvelope.next_cursor ?? null,\n },\n }\n },\n }\n}\n\nfunction waitCommand(): CommandDefinition {\n return {\n verb: 'wait',\n summary: 'Stream changes until a Task becomes terminal',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n inputSchema: taskIdSchema(),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'stream',\n requiresSession: true,\n examples: ['buckyos --timeout 10m task wait t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n return await waitForTask(ctx, taskId, {\n failOnTaskFailure: false,\n onObservation: async (observation) => {\n await ctx.io.stdout(`${\n JSON.stringify({\n schema_version: 1,\n type: 'task-progress',\n task_id: taskId,\n revision: observation.revision ?? null,\n phase: observation.phase,\n outcome: observation.outcome ?? null,\n progress: observation.progress ?? null,\n message: observation.message ?? null,\n })\n }\\n`)\n },\n })\n },\n }\n}\n\nfunction cancelCommand(): CommandDefinition {\n return {\n verb: 'cancel',\n summary: 'Request Task cancellation',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n options: [\n { name: 'recursive', description: 'Request cancellation for descendants', type: 'boolean' },\n {\n name: 'expected-revision',\n property: 'expected_revision',\n description: 'Optimistic revision fence',\n type: 'integer',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n recursive: { type: 'boolean' },\n expected_revision: { type: 'integer', minimum: 0 },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task cancel t-0123456789abcdef0123456789abcdef --recursive'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n return await callService(\n ctx,\n TASK_MANAGER,\n 'request_control',\n compact({\n task_id: taskId,\n action: 'Cancel',\n request_id: ctx.idempotencyKey ?? `ctl-${crypto.randomUUID().replaceAll('-', '')}`,\n recursive: input.recursive === true,\n expected_revision: input.expected_revision,\n }),\n )\n },\n }\n}\n\nfunction retryCommand(): CommandDefinition {\n return {\n verb: 'retry',\n summary: 'Create a new Task through the owning domain retry handler',\n positionals: [{ name: 'task_id', description: 'Failed terminal Task ID', required: true }],\n options: [{\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return after creation',\n type: 'boolean',\n }],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: ['buckyos --idempotency-key retry-42 task retry t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n const oldEnvelope = expectObject(\n await callService(ctx, TASK_MANAGER, 'get_task', { task_id: taskId }),\n 'TaskManager get_task response',\n )\n const oldTask = expectObject(oldEnvelope.task ?? oldEnvelope, 'TaskManager task')\n if (oldTask.phase !== 'Terminal' || oldTask.outcome !== 'Failed') {\n throw new UsageError('TASK_NOT_RETRYABLE', 'only a terminal failed Task can be retried')\n }\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'task.retry', {\n task_id: taskId,\n idempotency_key: ctx.idempotencyKey ?? `retry-${crypto.randomUUID()}`,\n }),\n 'Control Panel task.retry response',\n )\n const retryTaskId = expectString(response.task_id, 'task.retry.task_id')\n if (retryTaskId === taskId || response.retry_of !== taskId) {\n invalidResponse('task.retry identity')\n }\n if (input.no_wait === true) return response\n return await waitForTask(ctx, retryTaskId)\n },\n }\n}\n\nfunction taskIdSchema(): JsonSchema {\n return {\n type: 'object',\n properties: { task_id: { type: 'string', minLength: 1 } },\n required: ['task_id'],\n additionalProperties: false,\n }\n}\n\nfunction pageSchema(): JsonSchema {\n return {\n type: 'object',\n properties: {\n items: { type: 'array', items: {} },\n next_cursor: {},\n },\n required: ['items', 'next_cursor'],\n additionalProperties: false,\n }\n}\n\nfunction normalizePhase(value: string): string {\n const normalized = value.trim().toLowerCase()\n const phase = ['promised', 'accepted', 'running', 'waiting', 'paused', 'terminal']\n .find((candidate) => candidate === normalized)\n if (!phase) throw new UsageError('INVALID_ARGUMENT', `unknown Task phase: ${value}`)\n return phase[0].toUpperCase() + phase.slice(1)\n}\n\nfunction normalizeLimit(value: unknown): number | undefined {\n if (value === undefined) return undefined\n if (!Number.isSafeInteger(value) || Number(value) < 1 || Number(value) > 500) {\n throw new UsageError('INVALID_ARGUMENT', 'limit must be an integer between 1 and 500')\n }\n return Number(value)\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n\nfunction invalidResponse(label: string): never {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} is invalid`, EXIT_INTERNAL)\n}\n","import type {\n CommandDefinition,\n CommandModule,\n JsonSchema,\n OptionDefinition,\n} from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport {\n EXIT_OPERATION,\n EXIT_PARTIAL,\n EXIT_PERMISSION,\n EXIT_USAGE,\n ToolError,\n UsageError,\n} from '../core/errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\nimport { TOOL_VERSION } from '../version.ts'\nimport * as provisionSdk from 'buckyos/provision'\n\n// provision: first activation of an installed, not yet activated BuckyOS root on\n// this machine (single OOD, did:web, no SN/BNS). Every command is local: no\n// Zone session, no verify-hub, no TaskManager, no network. The activation\n// implementation lives in the SDK (buckyos/provision); this module is the thin\n// argv/confirmation/secret/output layer described in doc/modules/provision.md.\n\n// The built SDK entry is untyped for `deno check` (as buckyos/node is for the\n// core); these interfaces mirror the API documented in src/provision_activate.ts.\nexport type ActivationState = 'not_installed' | 'unactivated' | 'partial' | 'configured' | 'invalid'\n\nexport interface ActivationProblem {\n code: string\n message: string\n}\n\nexport interface ActivationFileEntry {\n path: string\n role: string\n required: boolean\n secret: boolean\n}\n\nexport interface ObservedActivationFile extends ActivationFileEntry {\n present: boolean\n}\n\nexport interface CommittedActivationFile extends ActivationFileEntry {\n sha256: string | null\n}\n\nexport interface ActivationDnsRecord {\n type: 'A' | 'AAAA'\n name: string\n value: string\n}\n\nexport interface ActivationLockInfo {\n path: string\n schemaVersion: number | null\n traceId: string | null\n startedAt: number | null\n domain: string | null\n stage: string | null\n committedFiles: string[]\n ownerKeyBackupPath: string | null\n corrupt: boolean\n}\n\nexport interface ActivationStatus {\n rootDir: string\n state: ActivationState\n startupRequired: boolean\n observedAt: number\n zoneDid: string | null\n ownerDid: string | null\n deviceDid: string | null\n deviceName: string | null\n accessHostname: string | null\n files: ObservedActivationFile[]\n problems: ActivationProblem[]\n warnings: string[]\n lock: ActivationLockInfo | null\n}\n\nexport interface OfflineActivationCheckOptions {\n rootDir: string\n domain: string\n ownerName: string\n ownerKeyBackupPath: string\n rtcpPort?: number\n guestAccess?: boolean\n publicIp?: string\n}\n\nexport interface OfflineActivationOptions extends OfflineActivationCheckOptions {\n adminPassword: string\n traceId?: string\n}\n\nexport interface OfflineActivationPrecheck {\n ready: boolean\n rootDir: string\n state: ActivationState\n domain: string\n ownerName: string\n ownerDid: string\n zoneDid: string\n deviceDid: string\n deviceName: string\n accessHostname: string\n rtcpPort: number\n guestAccess: boolean\n publicIp: string | null\n dnsRecords: ActivationDnsRecord[]\n ownerKeyBackup: { path: string; directoryExists: boolean; exists: boolean }\n plannedFiles: ActivationFileEntry[]\n problems: ActivationProblem[]\n status: ActivationStatus\n}\n\nexport interface OfflineActivationResult {\n rootDir: string\n state: 'configured'\n startupRequired: true\n domain: string\n ownerName: string\n ownerDid: string\n zoneDid: string\n deviceDid: string\n deviceName: string\n accessHostname: string\n rtcpPort: number\n guestAccess: boolean\n publicIp: string | null\n documentIat: number\n documentExp: number\n ownerKeyBackup: { path: string; saved: true }\n dnsRecords: ActivationDnsRecord[]\n committedFiles: CommittedActivationFile[]\n warnings: string[]\n}\n\ninterface ProvisionSdk {\n inspectActivationRoot(rootDir: string): Promise<ActivationStatus>\n checkOfflineActivation(options: OfflineActivationCheckOptions): Promise<OfflineActivationPrecheck>\n activateOfflineZone(options: OfflineActivationOptions): Promise<OfflineActivationResult>\n}\n\nconst sdk = provisionSdk as unknown as ProvisionSdk\n\nexport interface ProvisionModuleDependencies {\n inspect?: ProvisionSdk['inspectActivationRoot']\n check?: ProvisionSdk['checkOfflineActivation']\n activate?: ProvisionSdk['activateOfflineZone']\n}\n\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nconst ROOT_OPTION: OptionDefinition = {\n name: 'root',\n description:\n 'Installed BuckyOS root on this machine (BUCKYOS_ROOT); read by status/check, written by activate',\n type: 'string',\n required: true,\n}\n\nconst TARGET_OPTIONS: OptionDefinition[] = [\n ROOT_OPTION,\n {\n name: 'domain',\n description: 'Fixed public host name; Owner DID and Zone DID become did:web:<domain>',\n type: 'string',\n required: true,\n },\n {\n name: 'owner-name',\n property: 'owner_name',\n description: 'Local administrator / OwnerDocument name (lowercase DNS label)',\n type: 'string',\n required: true,\n },\n {\n name: 'owner-key-backup',\n property: 'owner_key_backup',\n description:\n 'New file for the Owner private-key recovery copy; its directory must exist and the file must not',\n type: 'string',\n required: true,\n },\n {\n name: 'public-ip',\n property: 'public_ip',\n description: 'Fixed public IP used only for the A/AAAA record instructions',\n type: 'string',\n },\n {\n name: 'rtcp-port',\n property: 'rtcp_port',\n description: 'RTCP port, default 2980',\n type: 'integer',\n },\n {\n name: 'guest-access',\n property: 'guest_access',\n description: 'Enable guest access in the first-boot configuration',\n type: 'boolean',\n },\n]\n\nconst TARGET_INPUT_PROPERTIES: Record<string, JsonSchema> = {\n root: { type: 'string', minLength: 1 },\n domain: { type: 'string', minLength: 1 },\n owner_name: { type: 'string', minLength: 1 },\n owner_key_backup: { type: 'string', minLength: 1 },\n public_ip: { type: 'string' },\n rtcp_port: { type: 'integer', minimum: 1 },\n guest_access: { type: 'boolean' },\n}\n\nconst TARGET_REQUIRED = ['root', 'domain', 'owner_name', 'owner_key_backup']\n\nconst POLICY_NOTE =\n 'Paths are read from argv by the launcher to grant the minimal filesystem permissions; ' +\n 'root and owner_key_backup given only inside --input are limited to the policy roots (cwd, ' +\n 'and the paired BUCKYOS_ROOT of the system distribution).'\n\nexport function createProvisionModule(\n dependencies: ProvisionModuleDependencies = {},\n): CommandModule {\n const deps: ResolvedDependencies = {\n inspect: dependencies.inspect ?? sdk.inspectActivationRoot,\n check: dependencies.check ?? sdk.checkOfflineActivation,\n activate: dependencies.activate ?? sdk.activateOfflineZone,\n }\n return {\n name: 'provision',\n summary: 'Activate an installed BuckyOS root on this machine (first Zone, Owner, and OOD)',\n commands: [statusCommand(deps), checkCommand(deps), activateCommand(deps)],\n }\n}\n\ntype ResolvedDependencies = Required<ProvisionModuleDependencies>\n\nfunction statusCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'status',\n summary: 'Inspect the local activation material of an installed BuckyOS root',\n description:\n 'Read-only. Reports not_installed, unactivated, partial, configured, or invalid from the ' +\n 'files under the root; configured only means the first-boot material is complete and internally ' +\n 'consistent (startup_required=true). Service health, DNS, TLS, and public DID discovery are not checked. ' +\n POLICY_NOTE,\n options: [ROOT_OPTION],\n inputSchema: {\n type: 'object',\n properties: { root: { type: 'string', minLength: 1 } },\n required: ['root'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n root: { type: 'string' },\n state: {\n type: 'string',\n enum: ['not_installed', 'unactivated', 'partial', 'configured', 'invalid'],\n },\n startup_required: { type: 'boolean' },\n },\n required: ['root', 'state', 'startup_required'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos provision status --root /opt/buckyos'],\n handler: async (ctx, input) => {\n const root = resolvePath(ctx, requiredString(input, 'root'))\n await assertHostAccess(root, 'read')\n return statusView(await runSdk(() => deps.inspect(root)))\n },\n }\n}\n\nfunction checkCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'check',\n summary: 'Validate activation parameters and the target root without writing anything',\n description:\n 'Read-only precheck shared with activate: parameters, target state, and the owner key ' +\n 'backup location. No keys are generated, no backup is written, and no operation is produced; ' +\n 'activate re-validates the target itself. Fails with the first problem code when the target is not ready. ' +\n POLICY_NOTE,\n options: TARGET_OPTIONS,\n inputSchema: {\n type: 'object',\n properties: TARGET_INPUT_PROPERTIES,\n required: TARGET_REQUIRED,\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n ready: { type: 'boolean' },\n root: { type: 'string' },\n state: { type: 'string' },\n },\n required: ['ready', 'root', 'state'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos provision check --root /opt/buckyos --domain corp.example.com --owner-name admin --owner-key-backup /secure-backup/corp-owner.pem',\n ],\n handler: async (ctx, input) => {\n const options = activationOptions(ctx, input)\n await assertHostAccess(options.rootDir, 'read')\n await assertHostAccess(getHost().path.dirname(options.ownerKeyBackupPath), 'read')\n const precheck = await runSdk(() => deps.check(options))\n if (!precheck.ready) throw precheckError(precheck)\n return precheckView(precheck)\n },\n }\n}\n\nfunction activateCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'activate',\n summary:\n 'Activate the root: create the first Zone, Owner, and OOD identity and the first-boot configuration',\n description:\n 'Privileged local write. Generates random Ed25519 Owner/device keys and current-time documents, ' +\n 'saves the Owner private-key backup, then commits the identity, Zone, and start_config files; ' +\n 'etc/node_identity.json is written last because node-daemon treats it as the activation switch. ' +\n 'The administrator password is read from the secret admin_password field of --input JSON or from a ' +\n 'hidden terminal prompt; there is no --admin-password option. Non-interactive runs require --yes. ' +\n 'Repeated, partial, and invalid targets are rejected; there is no --force. After success restart ' +\n 'BuckyOS through the installer or node control entry; this command never reports the Zone as online. ' +\n POLICY_NOTE,\n options: TARGET_OPTIONS,\n inputSchema: {\n type: 'object',\n properties: {\n ...TARGET_INPUT_PROPERTIES,\n admin_password: {\n type: 'string',\n secret: true,\n description: 'Administrator password (secret; --input JSON or hidden prompt only)',\n },\n },\n required: TARGET_REQUIRED,\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n root: { type: 'string' },\n state: { type: 'string', enum: ['configured'] },\n startup_required: { type: 'boolean' },\n },\n required: ['root', 'state', 'startup_required'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos provision activate --root /opt/buckyos --domain corp.example.com --owner-name admin --owner-key-backup /secure-backup/corp-owner.pem',\n 'buckyos --non-interactive --yes --input activation.json provision activate --root /opt/buckyos --owner-key-backup /secure-backup/corp-owner.pem',\n ],\n handler: async (ctx, input) => {\n const options = activationOptions(ctx, input)\n const backupDirectory = getHost().path.dirname(options.ownerKeyBackupPath)\n await assertHostAccess(options.rootDir, 'read')\n await assertHostAccess(options.rootDir, 'write')\n await assertHostAccess(backupDirectory, 'read')\n await assertHostAccess(backupDirectory, 'write')\n const precheck = await runSdk(() => deps.check(options))\n if (!precheck.ready) throw precheckError(precheck)\n const adminPassword = await obtainAdminPassword(ctx, input)\n await confirmActivation(ctx, precheck)\n const result = await runSdk(() =>\n deps.activate({ ...options, adminPassword, traceId: ctx.traceId })\n )\n return resultView(ctx, input, result)\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// input handling\n// ---------------------------------------------------------------------------\n\nfunction activationOptions(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): OfflineActivationCheckOptions {\n return {\n rootDir: resolvePath(ctx, requiredString(input, 'root')),\n domain: requiredString(input, 'domain'),\n ownerName: requiredString(input, 'owner_name'),\n ownerKeyBackupPath: resolvePath(ctx, requiredString(input, 'owner_key_backup')),\n publicIp: optionalString(input, 'public_ip'),\n rtcpPort: typeof input.rtcp_port === 'number' ? input.rtcp_port : undefined,\n guestAccess: input.guest_access === true,\n }\n}\n\nfunction requiredString(input: Record<string, unknown>, key: string): string {\n const value = optionalString(input, key)\n if (!value) throw new UsageError('INVALID_ARGUMENT', `${key} is required`)\n return value\n}\n\nfunction optionalString(input: Record<string, unknown>, key: string): string | undefined {\n const value = input[key]\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction resolvePath(ctx: CommandContext, value: string): string {\n const path = getHost().path\n return path.isAbsolute(value) ? path.resolve(value) : path.resolve(ctx.cwd, value)\n}\n\nasync function assertHostAccess(path: string, operation: 'read' | 'write'): Promise<void> {\n try {\n await getHost().assertAccess(path, operation)\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n throw new ToolError(\n 'HOST_ACCESS_DENIED',\n `${error.message}; pass the path on the command line (--root / --owner-key-backup) so the launcher can grant it`,\n EXIT_PERMISSION,\n false,\n { path, operation },\n )\n }\n throw error\n }\n}\n\nasync function obtainAdminPassword(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<string> {\n if (typeof input.admin_password === 'string') return input.admin_password\n if (ctx.config.nonInteractive) {\n throw new UsageError(\n 'SECRET_REQUIRED',\n 'admin_password must be provided through --input JSON in non-interactive mode',\n )\n }\n if (!ctx.io.inputIsTerminal) {\n throw new UsageError(\n 'SECRET_INPUT_UNAVAILABLE',\n 'the administrator password requires an interactive terminal or --input JSON',\n )\n }\n const host = getHost()\n let password: string\n let confirmation: string\n try {\n password = await host.readSecret('Administrator password: ')\n confirmation = await host.readSecret('Confirm administrator password: ')\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n throw new UsageError('SECRET_INPUT_UNAVAILABLE', error.message)\n }\n throw error\n }\n if (password !== confirmation) {\n throw new UsageError('PASSWORD_MISMATCH', 'the administrator passwords do not match')\n }\n return password\n}\n\nasync function confirmActivation(\n ctx: CommandContext,\n precheck: OfflineActivationPrecheck,\n): Promise<void> {\n if (ctx.confirmed) return\n if (ctx.config.nonInteractive) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'provision activate requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n )\n }\n if (!ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'provision activate requires an interactive terminal or --yes',\n EXIT_PERMISSION,\n )\n }\n await ctx.io.stderr(\n [\n 'Activation summary',\n ` BUCKYOS_ROOT : ${precheck.rootDir}`,\n ` Owner/Zone : ${precheck.zoneDid}`,\n ` Device : ${precheck.deviceDid}`,\n ` Admin : ${precheck.ownerName}`,\n ` Network : ${'wan'} (no SN, no BNS)`,\n ` RTCP port : ${precheck.rtcpPort}`,\n ` Guest access : ${precheck.guestAccess}`,\n ` Owner backup : ${precheck.ownerKeyBackup.path}`,\n '',\n ].join('\\n'),\n )\n const answer = (await ctx.io.prompt('Write this activation to disk? [y/N] '))?.trim()\n .toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', 'activation was declined', EXIT_PERMISSION)\n }\n}\n\n// ---------------------------------------------------------------------------\n// SDK error mapping\n// ---------------------------------------------------------------------------\n\ninterface SdkError extends Error {\n code: string\n details: Record<string, unknown>\n}\n\nfunction isSdkError(error: unknown): error is SdkError {\n return error instanceof Error && error.name === 'ActivationError' &&\n typeof (error as { code?: unknown }).code === 'string'\n}\n\nasync function runSdk<T>(run: () => Promise<T>): Promise<T> {\n try {\n return await run()\n } catch (error) {\n if (isSdkError(error)) {\n const exitCode = error.code === 'INVALID_ARGUMENT'\n ? EXIT_USAGE\n : error.code === 'ACTIVATION_COMMIT_FAILED'\n ? EXIT_PARTIAL\n : EXIT_OPERATION\n throw new ToolError(error.code, error.message, exitCode, false, error.details ?? {})\n }\n throw error\n }\n}\n\nfunction precheckError(precheck: OfflineActivationPrecheck): ToolError {\n const [first] = precheck.problems\n const single = precheck.problems.length === 1\n return new ToolError(\n single ? first.code : 'ACTIVATION_PRECHECK_FAILED',\n single\n ? first.message\n : `activation precheck failed: ${precheck.problems.map((p) => p.message).join('; ')}`,\n EXIT_OPERATION,\n false,\n precheckView(precheck),\n )\n}\n\n// ---------------------------------------------------------------------------\n// output views (snake_case, never secrets)\n// ---------------------------------------------------------------------------\n\nfunction statusView(status: ActivationStatus): Record<string, unknown> {\n return {\n root: status.rootDir,\n state: status.state,\n startup_required: status.startupRequired,\n observed_at: status.observedAt,\n zone_did: status.zoneDid,\n owner_did: status.ownerDid,\n device_did: status.deviceDid,\n device_name: status.deviceName,\n access_hostname: status.accessHostname,\n files: status.files.map((file) => ({\n path: file.path,\n role: file.role,\n required: file.required,\n secret: file.secret,\n present: file.present,\n })),\n problems: status.problems,\n warnings: status.warnings,\n lock: status.lock\n ? {\n path: status.lock.path,\n stage: status.lock.stage,\n trace_id: status.lock.traceId,\n started_at: status.lock.startedAt,\n domain: status.lock.domain,\n committed_files: status.lock.committedFiles,\n owner_key_backup: status.lock.ownerKeyBackupPath,\n corrupt: status.lock.corrupt,\n }\n : null,\n }\n}\n\nfunction precheckView(precheck: OfflineActivationPrecheck): Record<string, unknown> {\n return {\n ready: precheck.ready,\n root: precheck.rootDir,\n state: precheck.state,\n domain: precheck.domain,\n owner_name: precheck.ownerName,\n owner_did: precheck.ownerDid,\n zone_did: precheck.zoneDid,\n device_did: precheck.deviceDid,\n device_name: precheck.deviceName,\n access_hostname: precheck.accessHostname,\n rtcp_port: precheck.rtcpPort,\n guest_access: precheck.guestAccess,\n public_ip: precheck.publicIp,\n dns_records: precheck.dnsRecords,\n owner_key_backup: {\n path: precheck.ownerKeyBackup.path,\n directory_exists: precheck.ownerKeyBackup.directoryExists,\n exists: precheck.ownerKeyBackup.exists,\n },\n planned_files: precheck.plannedFiles,\n problems: precheck.problems,\n target: statusView(precheck.status),\n }\n}\n\nfunction resultView(\n ctx: CommandContext,\n input: Record<string, unknown>,\n result: OfflineActivationResult,\n): Record<string, unknown> {\n const dnsNotes = [\n ...result.dnsRecords.map((record) => `${record.type} ${record.name} ${record.value}`),\n ...(result.publicIp ? [] : [`A/AAAA ${result.domain} <this node's fixed public IP>`]),\n `The address record is also saved in etc/zone_dns_records.json under ${result.rootDir}.`,\n `Local boot uses etc/${result.domain}.zone.json; no DNS BOOT/PKX/DEV records are required.`,\n 'TLS/ACME is not provided by SN in this mode; configure it on the public gateway.',\n ]\n return {\n root: result.rootDir,\n state: result.state,\n startup_required: result.startupRequired,\n domain: result.domain,\n owner_name: result.ownerName,\n owner_did: result.ownerDid,\n zone_did: result.zoneDid,\n device_did: result.deviceDid,\n device_name: result.deviceName,\n access_hostname: result.accessHostname,\n rtcp_port: result.rtcpPort,\n guest_access: result.guestAccess,\n public_ip: result.publicIp,\n document_iat: result.documentIat,\n document_exp: result.documentExp,\n owner_key_backup: result.ownerKeyBackup,\n dns_records: result.dnsRecords,\n dns_notes: dnsNotes,\n committed_files: result.committedFiles,\n warnings: result.warnings,\n next_steps: [\n 'Restart BuckyOS through the installer or the node control entry to leave activation mode and boot the new Zone.',\n 'Check the running Zone afterwards with system status; activation does not verify service health, DNS, or TLS.',\n `Keep the Owner private-key backup ${result.ownerKeyBackup.path} offline; it is the only recovery copy.`,\n ],\n audit: {\n module: ctx.command.module,\n verb: ctx.command.verb,\n trace_id: ctx.traceId,\n tool_version: TOOL_VERSION,\n input_fingerprint: inputFingerprint(input),\n },\n }\n}\n\nfunction inputFingerprint(input: Record<string, unknown>): string {\n const material: Record<string, unknown> = {}\n for (const key of Object.keys(TARGET_INPUT_PROPERTIES).sort()) {\n if (input[key] !== undefined) material[key] = input[key]\n }\n const hash = getHost().createHash('sha256')\n hash.update(new TextEncoder().encode(JSON.stringify(material)))\n return hash.digestHex()\n}\n","import type { CommandModule, JsonSchema, OptionDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, EXIT_PERMISSION, ToolError, UsageError } from '../core/errors.ts'\nimport { callService, requiredInputString } from '../core/service.ts'\nimport { getHost } from '../runtime/host.ts'\nimport { openZip, readTarGz, readZipEntry, sha256Bytes } from './pikg_archive.ts'\nimport { inspectPikg } from './pikg_protocol.ts'\n\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst SKILL_KINDS = ['cmd', 'goal']\nconst SKILLS_SUB_PKG = 'agent_skills'\nconst SKILL_DIRS = ['cmd_skills', 'goal_skills', 'tools']\nconst MAX_SKILL_PAYLOAD_BYTES = 64 * 1024 * 1024\nconst AGENT_ID = /^[A-Za-z0-9][A-Za-z0-9._-]*$/\n\nconst AGENT_OPTION: OptionDefinition = {\n name: 'agent',\n property: 'agent_id',\n description: 'Agent ID; the Agent serves kRPC at /kapi/<agent_id>',\n type: 'string',\n required: true,\n}\n\nconst KIND_OPTION: OptionDefinition = {\n name: 'kind',\n description: 'Skill kind',\n type: 'string',\n enum: SKILL_KINDS,\n}\n\nexport function createSkillModule(): CommandModule {\n return {\n name: 'skill',\n summary: 'List, install, and remove the cmd/goal skills of an Agent',\n commands: [\n {\n verb: 'list',\n summary: 'List the skills of an Agent',\n options: [AGENT_OPTION, KIND_OPTION],\n inputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: SKILL_KINDS },\n },\n required: ['agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos skill list --agent jarvis.example.zone',\n 'buckyos skill list --agent jarvis.example.zone --kind cmd',\n ],\n handler: async (ctx, input) => {\n const agentId = agentIdFrom(input)\n const kind = typeof input.kind === 'string' ? input.kind : undefined\n const skills = await listSkills(ctx, agentId, kind)\n return { agent_id: agentId, ...(kind ? { kind } : {}), total: skills.length, skills }\n },\n },\n {\n verb: 'install',\n summary: 'Install the skills of a skill PIKG into an Agent',\n description:\n 'Verifies the PIKG offline, requires app_type agent_skills, and sends the files of its agent_skills sub package (cmd_skills/, goal_skills/, tools/) to the Agent. Sessions created before keep their frozen manuals.',\n positionals: [{ name: 'pikg_path', description: 'Local skill .pikg file' }],\n options: [\n AGENT_OPTION,\n {\n name: 'replace',\n description: 'Replace skills of the same names from another package',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n pikg_path: { type: 'string', minLength: 1 },\n agent_id: { type: 'string', minLength: 1 },\n replace: { type: 'boolean' },\n },\n required: ['pikg_path', 'agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos skill install ./dapp_dist/hello-skills-0.1.0.pikg --agent jarvis.example.zone',\n 'buckyos skill install ./hello-skills-0.2.0.pikg --agent jarvis.example.zone --replace',\n ],\n handler: async (ctx, input) => await installSkills(ctx, input),\n },\n {\n verb: 'remove',\n summary: 'Remove an installed skill from an Agent',\n description:\n 'Only installed skills can be removed. Without --kind the kind is looked up by name.',\n positionals: [{ name: 'name', description: 'Skill name' }],\n options: [AGENT_OPTION, KIND_OPTION],\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', minLength: 1 },\n agent_id: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: SKILL_KINDS },\n },\n required: ['name', 'agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --yes skill remove hello --agent jarvis.example.zone --kind cmd'],\n handler: async (ctx, input) => await removeSkill(ctx, input),\n },\n ],\n }\n}\n\nasync function installSkills(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const agentId = agentIdFrom(input)\n const raw = requiredInputString(input, 'pikg_path')\n const path = getHost().path.isAbsolute(raw)\n ? getHost().path.resolve(raw)\n : getHost().path.resolve(ctx.cwd, raw)\n const inspection = await inspectPikg(path)\n if (inspection.app.app_type !== SKILLS_SUB_PKG) {\n throw new UsageError(\n 'NOT_A_SKILL_PACKAGE',\n `PIKG app_type is ${inspection.app.app_type}; a skill package has app_type ${SKILLS_SUB_PKG} (buckyos pikg init --kind agent-skills)`,\n )\n }\n const payload = inspection.subpackages.find((item) => item.key === SKILLS_SUB_PKG)\n ?.payload as { path: string; digest: string }\n const archive = await openZip(path)\n const bytes = await readZipEntry(\n archive,\n archive.byName.get(payload.path)!,\n MAX_SKILL_PAYLOAD_BYTES,\n )\n if (`sha256:${sha256Bytes(bytes)}` !== payload.digest) {\n throw new ToolError('INVALID_PACKAGE', 'PIKG changed after it was verified')\n }\n const files: Record<string, { content: string; executable: boolean }> = {}\n const ignored: string[] = []\n for (const entry of await readTarGz(bytes, MAX_SKILL_PAYLOAD_BYTES)) {\n if (!SKILL_DIRS.includes(entry.path.split('/')[0])) {\n ignored.push(entry.path)\n continue\n }\n files[entry.path] = { content: base64(entry.bytes), executable: entry.executable }\n }\n const result = await callService<unknown>(ctx, agentId, 'skills.install', {\n package: {\n package: inspection.app.name,\n version: inspection.app.version,\n pikg_digest: inspection.pikg_digest,\n files,\n },\n replace: input.replace === true,\n })\n return {\n agent_id: agentId,\n pikg_path: inspection.pikg_path,\n pikg_digest: inspection.pikg_digest,\n ...expectObject(result, 'skills.install'),\n ...(ignored.length ? { ignored_files: ignored } : {}),\n }\n}\n\nasync function removeSkill(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const agentId = agentIdFrom(input)\n const name = requiredInputString(input, 'name')\n let kind = typeof input.kind === 'string' ? input.kind : undefined\n if (!kind) {\n const kinds = (await listSkills(ctx, agentId)).filter((skill) => skill.name === name)\n .map((skill) => String(skill.kind))\n if (kinds.length === 0) {\n throw new ToolError('RESOURCE_NOT_FOUND', `Agent ${agentId} has no skill named ${name}`)\n }\n if (kinds.length > 1) {\n throw new UsageError('AMBIGUOUS_SKILL', `${name} is both a cmd and a goal skill; use --kind`)\n }\n kind = kinds[0]\n }\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'skill remove requires --yes in non-interactive execution',\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Remove ${kind} skill ${name} from ${agentId}? [y/N] `))\n ?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', 'skill remove was declined', EXIT_PERMISSION)\n }\n }\n const removed = await callService<unknown>(ctx, agentId, 'skills.remove', { kind, name })\n return { agent_id: agentId, removed: expectObject(removed, 'skills.remove') }\n}\n\nasync function listSkills(\n ctx: CommandContext,\n agentId: string,\n kind?: string,\n): Promise<Record<string, unknown>[]> {\n const skills = await callService<unknown>(ctx, agentId, 'skills.list', kind ? { kind } : {})\n if (!Array.isArray(skills)) invalidResponse('skills.list')\n return (skills as unknown[]).map((skill) => expectObject(skill, 'skills.list'))\n}\n\nfunction agentIdFrom(input: Record<string, unknown>): string {\n const agentId = requiredInputString(input, 'agent_id')\n if (!AGENT_ID.test(agentId)) {\n throw new UsageError('INVALID_AGENT_ID', `invalid Agent ID: ${agentId}`)\n }\n return agentId\n}\n\nfunction expectObject(value: unknown, method: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) invalidResponse(method)\n return value as Record<string, unknown>\n}\n\nfunction invalidResponse(method: string): never {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n `Agent returned an invalid response for ${method}`,\n EXIT_INTERNAL,\n )\n}\n\nfunction base64(bytes: Uint8Array): string {\n let binary = ''\n for (let index = 0; index < bytes.length; index += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000))\n }\n return btoa(binary)\n}\n","import type { CommandModule, JsonSchema, PositionalDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { callService, expectObject, requiredInputString } from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst AGENT_POSITIONAL: PositionalDefinition = {\n name: 'agent_id',\n description: 'Agent ID as `agent list` prints it (raw host name, e.g. jarvis.example.zone)',\n}\nconst AGENT_INPUT: JsonSchema = {\n type: 'object',\n properties: { agent_id: { type: 'string', minLength: 1 } },\n required: ['agent_id'],\n additionalProperties: false,\n}\nconst PROFILE_FIELDS = ['display_name', 'bio']\n\n// Control Panel answers for Agents the caller owns; admins (and the device identity) see all.\nexport function createAgentModule(): CommandModule {\n return {\n name: 'agent',\n summary: 'List Agents and read or change their profiles',\n commands: [\n {\n verb: 'list',\n summary: 'List the Agents visible to the caller',\n description: 'Owners see their own Agents; admins see every Agent in the Zone.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n outputSchema: {\n type: 'object',\n properties: { agents: { type: 'array', items: OBJECT_OUTPUT } },\n required: ['agents'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent list'],\n handler: async (ctx) => {\n const response = await callAgent(ctx, 'agent.list', {})\n if (!Array.isArray(response.agents)) {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n 'agent.list agents must be an array',\n EXIT_INTERNAL,\n )\n }\n return { agents: response.agents }\n },\n },\n {\n verb: 'get',\n summary: 'Get one Agent: profile, settings, install state, template, and runtime',\n positionals: [AGENT_POSITIONAL],\n inputSchema: AGENT_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent get jarvis.example.zone'],\n handler: async (ctx, input) =>\n await callAgent(ctx, 'agent.get', { agent_id: requiredInputString(input, 'agent_id') }),\n },\n {\n verb: 'profile-get',\n summary: 'Get the public profile (display name, bio, avatar) of an Agent',\n positionals: [AGENT_POSITIONAL],\n inputSchema: AGENT_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent profile-get jarvis.example.zone'],\n handler: async (ctx, input) => {\n const agentId = requiredInputString(input, 'agent_id')\n return {\n agent_id: agentId,\n ...await callAgent(ctx, 'agent.profile.get', { agent_id: agentId }),\n }\n },\n },\n {\n verb: 'profile-set',\n summary: 'Change the display name or bio of an Agent',\n description:\n 'Only the given fields change; an empty value clears the field. Returns the profile before and after the change, and Message Center reloads the new name.',\n positionals: [AGENT_POSITIONAL],\n options: [\n {\n name: 'display-name',\n description: 'New display name; empty clears it',\n type: 'string',\n },\n { name: 'bio', description: 'New bio; empty clears it', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string', minLength: 1 },\n display_name: { type: 'string' },\n bio: { type: 'string' },\n },\n required: ['agent_id'],\n additionalProperties: false,\n },\n outputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string' },\n before: OBJECT_OUTPUT,\n profile: OBJECT_OUTPUT,\n },\n required: ['agent_id', 'before', 'profile'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n \"buckyos agent profile-set jarvis.example.zone --display-name 'Jarvis'\",\n \"buckyos agent profile-set jarvis.example.zone --bio ''\",\n ],\n handler: async (ctx, input) => {\n const agentId = requiredInputString(input, 'agent_id')\n const changes = Object.fromEntries(\n PROFILE_FIELDS.filter((field) => typeof input[field] === 'string')\n .map((field) => [field, input[field]]),\n )\n if (Object.keys(changes).length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'give --display-name or --bio')\n }\n const before = await callAgent(ctx, 'agent.profile.get', { agent_id: agentId })\n const after = await callAgent(ctx, 'agent.profile.set', { agent_id: agentId, ...changes })\n return {\n agent_id: agentId,\n before: expectObject(before.profile, 'agent.profile.get profile'),\n profile: expectObject(after.profile, 'agent.profile.set profile'),\n }\n },\n },\n ],\n }\n}\n\nasync function callAgent(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n try {\n return expectObject(await callService(ctx, CONTROL_PANEL, method, params), method)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (message.includes('agent_not_found')) {\n throw new ToolError('RESOURCE_NOT_FOUND', `Agent not found or not yours: ${params.agent_id}`)\n }\n throw error\n }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n inputString,\n parseTimestamp,\n splitServices,\n} from '../core/service.ts'\n\nconst AICC = 'aicc'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst EMPTY_INPUT: JsonSchema = { type: 'object', properties: {}, additionalProperties: false }\nconst RANGES = ['last1d', 'last7d', 'last30d']\nconst GROUPS = [\n 'provider_instance_name',\n 'provider_model',\n 'request_model',\n 'method',\n 'capability',\n 'caller_app_id',\n 'user_id',\n 'tenant_id',\n]\n\n// Read views of the AICC service (/kapi/aicc); provider and routing changes stay in Control Panel.\nexport function createAiModule(): CommandModule {\n return {\n name: 'ai',\n summary: 'Read AI provider, routing, usage and token quota state of the AICC service',\n commands: [\n readCommand({\n verb: 'providers',\n summary: 'List configured AI provider instances with auth, health, and model inventory',\n method: 'provider.list',\n description:\n 'Credentials are reported only as configured/kind; secrets are never returned.',\n }),\n readCommand({\n verb: 'routing',\n summary: 'Get the AICC routing overlay and its settings revision',\n method: 'routing.get',\n description: 'An empty routing object means the default routing of the model catalog.',\n }),\n usageCommand(),\n quotaCommand(),\n ],\n }\n}\n\nfunction quotaCommand(): CommandDefinition {\n return {\n verb: 'quota',\n summary: \"Show the token quota rules that limit the caller's AI calls and what is left\",\n description:\n 'Admin rules on the caller and the caller\\'s Apps, shared App rules, and the caller\\'s own App limits, each with its current window or total account. A refused call returns quota_exhausted / quota_budget_exceeded with the blocking rules.',\n options: [\n { name: 'app', description: 'Only the rules that apply to calls of this App (an AppId or AgentId)', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: { app: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos ai quota', 'buckyos ai quota --app aiworkspace'],\n handler: async (ctx, input) =>\n expectObject(\n await callService(ctx, AICC, 'quota.query', inputString(input, 'app') ? { app_id: inputString(input, 'app') } : {}),\n 'quota.query',\n ),\n }\n}\n\nfunction readCommand(options: {\n verb: string\n summary: string\n method: string\n description: string\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n description: options.description,\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [`buckyos ai ${options.verb}`],\n handler: async (ctx) =>\n expectObject(await callService(ctx, AICC, options.method, {}), options.method),\n }\n}\n\nfunction usageCommand(): CommandDefinition {\n return {\n verb: 'usage',\n summary: \"Aggregate the caller's AI usage: requests, tokens, and cost\",\n description:\n \"Scoped to the caller's own user (a device identity sees only its own calls, not the Zone total). Without --since the range defaults to last7d; --until defaults to now.\",\n options: [\n {\n name: 'range',\n description: 'last1d, last7d (default), or last30d',\n type: 'string',\n enum: RANGES,\n },\n { name: 'since', description: 'RFC 3339 or Unix ms lower bound', type: 'string' },\n { name: 'until', description: 'RFC 3339 or Unix ms upper bound', type: 'string' },\n {\n name: 'group-by',\n description: `Comma-separated: ${GROUPS.join(', ')}`,\n type: 'string',\n },\n {\n name: 'bucket',\n description: 'Time buckets: hour or day',\n type: 'string',\n enum: ['hour', 'day'],\n },\n { name: 'events', description: 'Also return the individual usage events', type: 'boolean' },\n { name: 'limit', description: 'Event page size', type: 'integer' },\n { name: 'cursor', description: 'Opaque event page cursor', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n range: { type: 'string', enum: RANGES },\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n group_by: { type: 'string', minLength: 1 },\n bucket: { type: 'string', enum: ['hour', 'day'] },\n events: { type: 'boolean' },\n limit: { type: 'integer', minimum: 1 },\n cursor: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos ai usage --range last1d --group-by provider_instance_name,provider_model',\n 'buckyos ai usage --since 2026-10-01T00:00:00Z --bucket day',\n ],\n handler: async (ctx, input) => {\n const groupBy = splitServices(input.group_by)\n const unknown = groupBy.filter((group) => !GROUPS.includes(group))\n if (unknown.length > 0) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `unknown group-by ${unknown.join(', ')}; use ${GROUPS.join(', ')}`,\n )\n }\n return expectObject(\n await callService(ctx, AICC, 'usage.query', {\n time_range: timeRange(input),\n ...(groupBy.length > 0 ? { group_by: groupBy } : {}),\n ...(input.bucket ? { time_bucket: input.bucket } : {}),\n output_mode: input.events === true ? 'summary_and_events' : 'summary',\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n ...(inputString(input, 'cursor') ? { cursor: inputString(input, 'cursor') } : {}),\n }),\n 'usage.query',\n )\n },\n }\n}\n\nfunction timeRange(input: Record<string, unknown>): Record<string, unknown> {\n const since = parseTimestamp(input.since, 'since')\n const until = parseTimestamp(input.until, 'until')\n if (since === undefined) {\n if (until !== undefined) throw new UsageError('INVALID_ARGUMENT', '--until requires --since')\n return { kind: inputString(input, 'range') ?? 'last7d' }\n }\n if (input.range !== undefined) {\n throw new UsageError('ARGUMENT_CONFLICT', '--range cannot be combined with --since')\n }\n return { kind: 'explicit', start_time_ms: since, end_time_ms: until ?? Date.now() }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { expectObject, inputString, parseTimestamp, requiredInputString } from '../core/service.ts'\n\n// Share links of the Zone file service (nfs-server `share.*` over NFSP,\n// buckyos notepads/share-content-mgr-tech-design-todo.md §3.6).\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst DAY_MS = 86_400_000\nconst EXPIRES_HELP = '1d, 7d (default), 30d, none, or an RFC 3339 time'\n\nexport function createShareModule(): CommandModule {\n return {\n name: 'share',\n summary: 'Share files and folders as links, and manage what you have shared',\n commands: [\n createCommand(),\n listCommand(),\n getCommand(),\n updateCommand(),\n stopCommand(),\n statsCommand(),\n ],\n }\n}\n\ninterface NfspSession {\n call(method: string, args: Record<string, unknown>, write?: boolean): Promise<Record<string, unknown>>\n}\n\nasync function openNfsp(ctx: CommandContext): Promise<NfspSession> {\n const session = ctx.session\n if (!session) throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n const token = (await session.ensureValid()).token\n const base = gatewayOrigin(ctx.connection.endpoint)\n let seq = 0\n const post = async (method: string, body: Record<string, unknown>) => {\n const response = await fetch(`${base}/nfs/v1/${method}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },\n body: JSON.stringify(body),\n signal: ctx.signal,\n })\n let parsed: { ok?: boolean; result?: unknown; error?: Record<string, unknown> }\n try {\n parsed = await response.json()\n } catch {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `file service answered HTTP ${response.status}`, EXIT_INTERNAL)\n }\n if (parsed.ok !== true) {\n const error = parsed.error ?? {}\n const reason = typeof error.reason === 'string' ? error.reason.toUpperCase() : String(error.code ?? 'INTERNAL')\n throw new ToolError(`SHARE_${reason}`, String(error.message ?? 'share request failed'))\n }\n return expectObject(parsed.result, `${method} result`)\n }\n const hello = await post('hello', { args: { versions: ['nfsp/0'] } })\n const sessionId = String(hello.session ?? '')\n if (!Array.isArray(hello.features) || !hello.features.includes('share')) {\n throw new ToolError('SHARE_UNSUPPORTED', 'the file service of this Zone does not support sharing')\n }\n return {\n call: (method, args, write = false) =>\n post(method, { session: sessionId, args: { ...args, source_hint: 'cli' }, ...(write ? { seq: ++seq } : {}) }),\n }\n}\n\nfunction gatewayOrigin(endpoint: string): string {\n const url = new URL(endpoint)\n const marker = url.pathname.indexOf('/kapi')\n url.pathname = marker >= 0 ? url.pathname.slice(0, marker) || '/' : '/'\n url.search = ''\n url.hash = ''\n return url.toString().replace(/\\/$/, '')\n}\n\n/** `--expires` → unix seconds, `null` for no expiry, `undefined` for the server default (7 days). */\nexport function parseExpires(value: unknown): number | null | undefined {\n if (value === undefined) return undefined\n const text = String(value).trim().toLowerCase()\n if (text === 'none' || text === 'never') return null\n const days = text.match(/^(\\d+)d$/)\n if (days) return Math.floor((Date.now() + Number(days[1]) * DAY_MS) / 1000)\n const at = parseTimestamp(value, 'expires')\n if (at === undefined) return undefined\n if (at <= Date.now()) throw new UsageError('INVALID_ARGUMENT', 'expires must be in the future')\n return Math.floor(at / 1000)\n}\n\nfunction sourceLocator(path: string): Record<string, unknown> {\n if (path.startsWith('cyfs://')) return { uri: path }\n return { path: path.startsWith('/') ? path : `/${path}` }\n}\n\nfunction summary(share: Record<string, unknown>): Record<string, unknown> {\n const keep = ['share_id', 'kind', 'title', 'status', 'access', 'expires_at', 'url', 'target_app', 'delivery_state', 'source_path', 'revision', 'created_at', 'stats']\n return Object.fromEntries(keep.filter((key) => share[key] !== undefined).map((key) => [key, share[key]]))\n}\n\nfunction createCommand(): CommandDefinition {\n return {\n verb: 'create',\n summary: 'Share a file or folder as a link (a snapshot of its current content)',\n positionals: [{ name: 'path', description: 'File or folder, e.g. /home/alice/report.pdf or cyfs:///home/alice/report.pdf', required: true }],\n options: [\n { name: 'expires', description: `Link expiry: ${EXPIRES_HELP}`, type: 'string' },\n { name: 'password', description: 'Require this password to open the link', type: 'string' },\n { name: 'title', description: 'Title shown to visitors', type: 'string' },\n { name: 'no-download', property: 'no_download', description: 'Preview only, no download button', type: 'boolean' },\n { name: 'wait', description: 'Wait for a large snapshot to finish', type: 'boolean' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n path: { type: 'string', minLength: 1 },\n expires: { type: 'string', minLength: 1 },\n password: { type: 'string', minLength: 1 },\n title: { type: 'string', minLength: 1 },\n no_download: { type: 'boolean' },\n wait: { type: 'boolean' },\n },\n required: ['path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: [\n 'buckyos share create /home/alice/report.pdf',\n 'buckyos share create /home/alice/photos --expires 30d --password s3cret',\n ],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const expires = parseExpires(input.expires)\n const password = inputString(input, 'password')\n const policy: Record<string, unknown> = {\n access: password ? 'password' : 'holder',\n allow_download: input.no_download !== true,\n ...(password ? { password } : {}),\n ...(expires !== undefined ? { expires_at: expires } : {}),\n }\n let op = await nfsp.call('share.create', {\n source: sourceLocator(requiredInputString(input, 'path')),\n policy,\n title: inputString(input, 'title'),\n idempotency_key: ctx.idempotencyKey ?? crypto.randomUUID(),\n }, true)\n while (input.wait === true && (op.state === 'running' || op.state === 'preparing')) {\n await new Promise((resolve) => setTimeout(resolve, 1000))\n ctx.signal.throwIfAborted()\n op = await nfsp.call('share.operation', { operation_id: op.operation_id })\n }\n if (op.state === 'failed' || op.state === 'canceled') {\n const error = (op.error ?? {}) as Record<string, unknown>\n throw new ToolError(`SHARE_${String(error.reason ?? op.state).toUpperCase()}`, String(error.message ?? `share ${op.state}`))\n }\n return {\n operation_id: op.operation_id,\n state: op.state,\n share_id: op.share_id ?? null,\n url: op.url ?? null,\n source_changed: op.source_changed ?? false,\n ...(op.share ? { share: summary(op.share as Record<string, unknown>) } : {}),\n }\n },\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List your shares',\n options: [\n { name: 'kind', description: 'link or app_delivery', type: 'string', enum: ['link', 'app_delivery'] },\n { name: 'status', description: 'active, stopped, expired, ...', type: 'string' },\n { name: 'q', description: 'Search title and path', type: 'string' },\n { name: 'include-hidden', property: 'include_hidden', description: 'Include hidden shares', type: 'boolean' },\n { name: 'cursor', description: 'Page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 200', type: 'integer' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['link', 'app_delivery'] },\n status: { type: 'string', minLength: 1 },\n q: { type: 'string', minLength: 1 },\n include_hidden: { type: 'boolean' },\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share list --kind link --status active'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const page = await nfsp.call('share.list', {\n kind: input.kind,\n status: input.status,\n q: input.q,\n include_hidden: input.include_hidden === true,\n cursor: input.cursor,\n limit: input.limit,\n })\n const items = Array.isArray(page.items) ? page.items as Record<string, unknown>[] : []\n return { items: items.map(summary), next_cursor: page.next_cursor ?? null }\n },\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return {\n verb: 'get',\n summary: 'Show one share: link, policy, snapshot, delivery, statistics and history',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n inputSchema: {\n type: 'object',\n properties: { share_id: { type: 'string', minLength: 1 } },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share get sh_0123456789abcdef'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n return await nfsp.call('share.get', { share_id: requiredInputString(input, 'share_id') })\n },\n }\n}\n\nfunction updateCommand(): CommandDefinition {\n return {\n verb: 'update',\n summary: 'Change a link\\'s expiry, password, title or download setting',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n options: [\n { name: 'expires', description: `New expiry: ${EXPIRES_HELP}`, type: 'string' },\n { name: 'password', description: 'Set or change the password', type: 'string' },\n { name: 'no-password', property: 'no_password', description: 'Remove the password', type: 'boolean' },\n { name: 'title', description: 'New title', type: 'string' },\n { name: 'download', description: 'Allow (true) or forbid (false) downloading', type: 'boolean' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n share_id: { type: 'string', minLength: 1 },\n expires: { type: 'string', minLength: 1 },\n password: { type: 'string', minLength: 1 },\n no_password: { type: 'boolean' },\n title: { type: 'string', minLength: 1 },\n download: { type: 'boolean' },\n },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share update sh_0123456789abcdef --expires none', 'buckyos share update sh_0123456789abcdef --password n3w'],\n handler: async (ctx, input) => {\n if (input.password !== undefined && input.no_password === true) {\n throw new UsageError('INVALID_ARGUMENT', 'use either --password or --no-password')\n }\n const changes: Record<string, unknown> = {}\n const expires = parseExpires(input.expires)\n if (expires !== undefined) changes.expires_at = expires\n if (input.password !== undefined) changes.password = String(input.password)\n if (input.no_password === true) changes.password = null\n if (input.title !== undefined) changes.title = String(input.title)\n if (input.download !== undefined) changes.allow_download = input.download === true\n if (!Object.keys(changes).length) throw new UsageError('INVALID_ARGUMENT', 'nothing to change')\n const nfsp = await openNfsp(ctx)\n const shareId = requiredInputString(input, 'share_id')\n const current = await nfsp.call('share.get', { share_id: shareId })\n const result = await nfsp.call('share.update', { share_id: shareId, revision: current.revision, changes }, true)\n return { revision: result.revision, share: summary(expectObject(result.share, 'share.update share')) }\n },\n }\n}\n\nfunction stopCommand(): CommandDefinition {\n return {\n verb: 'stop',\n summary: 'Stop a share: the link stops working and the kept snapshot is released',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n options: [{ name: 'reason', description: 'Recorded in the share history', type: 'string' }],\n inputSchema: {\n type: 'object',\n properties: { share_id: { type: 'string', minLength: 1 }, reason: { type: 'string', minLength: 1 } },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share stop sh_0123456789abcdef --reason \"sent by mistake\"'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const shareId = requiredInputString(input, 'share_id')\n const current = await nfsp.call('share.get', { share_id: shareId })\n return await nfsp.call('share.stop', { share_id: shareId, revision: current.revision, reason: inputString(input, 'reason') }, true)\n },\n }\n}\n\nfunction statsCommand(): CommandDefinition {\n return {\n verb: 'stats',\n summary: 'Views, downloads, traffic and visitors of one share or all of yours',\n options: [\n { name: 'share-id', property: 'share_id', description: 'One share instead of all', type: 'string' },\n { name: 'days', description: 'How many days back (default 30)', type: 'integer' },\n { name: 'granularity', description: 'day or hour', type: 'string', enum: ['day', 'hour'] },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n share_id: { type: 'string', minLength: 1 },\n days: { type: 'integer', minimum: 1 },\n granularity: { type: 'string', enum: ['day', 'hour'] },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share stats --days 7', 'buckyos share stats --share-id sh_0123456789abcdef --granularity hour --days 2'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const to = Math.floor(Date.now() / 1000) + 1\n const days = typeof input.days === 'number' ? input.days : 30\n return await nfsp.call('share.stats', {\n share_id: inputString(input, 'share_id'),\n from: to - days * 86_400,\n to,\n granularity: input.granularity ?? 'day',\n })\n },\n }\n}\n","import { ExecutorCommandStream } from 'buckyos/node'\nimport type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst text = { type: 'string' as const, minLength: 1 }\ntype ExecutorRoute = Parameters<typeof ExecutorCommandStream.connect>[0]\ntype ExecutorOperationLocator = Parameters<InstanceType<typeof ExecutorCommandStream>['query']>[0]\nconst object = { type: 'object' as const, additionalProperties: true }\nconst targetProperties = {\n executor_id: text, generation: { type: 'integer' as const, minimum: 1 },\n profile_id: text, store_id: text, locator: text,\n}\n\nfunction call<T>(ctx: CommandContext, method: string, params: Record<string, unknown>): Promise<T> {\n return ctx.clients.call('control-panel', method, params, {\n traceId: ctx.traceId, signal: ctx.signal, timeoutMs: Math.max(1, (ctx.deadline ?? Date.now() + 30000) - Date.now()),\n })\n}\n\nfunction management(verb: string, method: string, properties: Record<string, JsonSchema>, required: string[], write = false): CommandDefinition {\n return {\n verb, summary: `Executor ${verb}`, inputSchema: { ...object, properties, required, additionalProperties: false },\n outputSchema: object, resultSchemaVersion: 1, access: { mode: 'fixed', level: write ? 'write' : 'read' },\n asyncMode: 'sync', requiresSession: true,\n options: Object.entries(properties).filter(([, schema]) => schema.type !== 'object').map(([name, schema]) => ({\n name: name.replaceAll('_', '-'), property: name, description: name, type: schema.type === 'integer' ? 'integer' as const : 'string' as const,\n required: required.includes(name),\n })),\n handler: (ctx, input) => call(ctx, method, input),\n }\n}\n\nexport function createExecutorModule(): CommandModule {\n return {\n name: 'executor', summary: 'Manage lightweight devices and explicitly target online command/file executors',\n commands: [\n management('create', 'executor.device.create', { name: text, profiles: object, limits: object, expires_at_ms: { type: 'integer' } }, ['name', 'profiles'], true),\n management('list', 'executor.device.list', {}, []),\n management('issue', 'executor.device.issue', { executor_id: text, expires_at_ms: { type: 'integer' } }, ['executor_id'], true),\n management('revoke', 'executor.device.revoke', { executor_id: text }, ['executor_id'], true),\n management('delete', 'executor.device.delete', { executor_id: text }, ['executor_id'], true),\n management('online', 'executor.online.list', {}, []),\n operation('exec', { cmd: text, cwd: text, env: object, execution_timeout_ms: { type: 'integer', minimum: 1 } }, ['cmd', 'cwd']),\n operation('read', { path: text }, ['path']),\n operation('write', { path: text, content: { type: 'string' }, mode: { type: 'string', enum: ['replace', 'append', 'create_new'] } }, ['path', 'content']),\n operation('edit', { path: text, old_string: text, new_string: { type: 'string' } }, ['path', 'old_string', 'new_string']),\n operation('query', { channel: { type: 'string', enum: ['stdout', 'stderr', 'content'] }, offset: { type: 'integer', minimum: 0 }, wait_ms: { type: 'integer', minimum: 0 } }, []),\n operation('cancel', {}, []),\n ],\n }\n}\n\nfunction operation(verb: string, extra: Record<string, JsonSchema>, required: string[]): CommandDefinition {\n const recovery = verb === 'query' || verb === 'cancel'\n const properties: Record<string, JsonSchema> = { ...targetProperties, ...extra }\n return {\n verb, summary: `${verb} on an explicit executor; persist --locator before dispatch and query it after disconnection`,\n inputSchema: { ...object, properties, required: [...Object.keys(targetProperties), ...required], additionalProperties: false },\n outputSchema: object, resultSchemaVersion: 1,\n access: { mode: 'fixed', level: ['read', 'query'].includes(verb) ? 'read' : 'write' },\n asyncMode: 'sync', requiresSession: true,\n options: Object.entries(properties).filter(([, schema]) => schema.type !== 'object').map(([name, schema]) => ({\n name: name.replaceAll('_', '-'), property: name, description: name,\n type: schema.type === 'integer' ? 'integer' as const : 'string' as const,\n required: Object.keys(targetProperties).includes(name) || required.includes(name),\n })),\n handler: async (ctx, input) => {\n const target = { executor_id: String(input.executor_id), generation: Number(input.generation), profile_id: String(input.profile_id), store_id: String(input.store_id) }\n const path = String(input.locator)\n const host = getHost()\n let locator: ExecutorOperationLocator\n if (recovery) locator = JSON.parse(await host.readTextFile(path))\n else {\n locator = { ...target, op_id: crypto.randomUUID(), run_id: ctx.traceId, call_id: ctx.idempotencyKey ?? crypto.randomUUID() }\n await host.writeTextFile(path, JSON.stringify(locator) + '\\n', { createNew: true, mode: 0o600 })\n }\n if (!ctx.session) throw new ToolError('AUTH_REQUIRED', 'An authenticated App session is required')\n const { token } = await ctx.session.ensureValid()\n const route = await call<ExecutorRoute>(ctx, 'executor.stream.open', { executor_id: target.executor_id, generation: target.generation, profile_id: target.profile_id })\n const stream = await ExecutorCommandStream.connect(route, target, token, 'buckyos-cli', locator.run_id)\n if (!stream) throw new ToolError('INVALID_SERVICE_RESPONSE', 'Executor stream did not initialize')\n const abort = () => stream.close()\n ctx.signal.addEventListener('abort', abort, { once: true })\n try {\n let reply\n if (verb === 'exec') reply = await stream.exec(locator, String(input.cmd), String(input.cwd), (input.env ?? {}) as Record<string, string>, Number(input.execution_timeout_ms ?? 60000))\n else if (verb === 'read') reply = await stream.read(locator, String(input.path))\n else if (verb === 'write') reply = await stream.write(locator, String(input.path), new TextEncoder().encode(String(input.content)), (input.mode ?? 'replace') as 'replace' | 'append' | 'create_new')\n else if (verb === 'edit') reply = await stream.edit(locator, String(input.path), [{ old_string: String(input.old_string), new_string: String(input.new_string) }])\n else if (verb === 'cancel') reply = await stream.cancel(locator)\n else reply = await stream.query(locator, input.channel as 'stdout' | 'stderr' | 'content' | undefined, Number(input.offset ?? 0), Number(input.wait_ms ?? 0))\n return { locator, reply }\n } finally { ctx.signal.removeEventListener('abort', abort); stream.close() }\n },\n }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema, OptionDefinition, PositionalDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport { callService, expectObject, inputString, requiredInputString } from '../core/service.ts'\nimport { getHost } from '../runtime/host.ts'\n\n// AI Workspace (`/kapi/aiworkspace`): reading a workspace, and the executor protocol of a wish run\n// (内核架构改进 M3): claim → heartbeat → report. Source of truth for the methods:\n// buckyos/src/frame/aiworkspace/README.md (Protocol).\nconst SERVICE = 'aiworkspace'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst WORKSPACE_OPTION: OptionDefinition = { name: 'workspace', property: 'workspace_id', description: 'Workspace id (ws_…)', type: 'string', required: true }\nconst RUN_OPTION: OptionDefinition = { name: 'run', property: 'run_id', description: 'Run id (run_…)', type: 'string', required: true }\nconst ATTEMPT_OPTION: OptionDefinition = { name: 'attempt', property: 'attempt', description: 'The attempt number `run-claim` answered', type: 'integer', required: true }\n\nfunction workspaceInput(extra: Record<string, JsonSchema>, required: string[] = []): JsonSchema {\n return { type: 'object', properties: { workspace_id: { type: 'string', minLength: 1 }, ...extra }, required: ['workspace_id', ...required], additionalProperties: false }\n}\n\nasync function aiws(ctx: CommandContext, method: string, params: Record<string, unknown>): Promise<Record<string, unknown>> {\n const result = expectObject(await callService<unknown>(ctx, SERVICE, method, params), method)\n if (result.ok === false) {\n const error = expectObject(result.error, `${method}.error`)\n const code = typeof error.code === 'string' ? error.code : 'AIWS_ERROR'\n const detail = typeof error.detail === 'string' ? error.detail : code\n throw new ToolError(code, `${code}${typeof error.sub_code === 'string' ? `/${error.sub_code}` : ''}: ${detail}`)\n }\n return result\n}\n\nasync function jsonInput(input: Record<string, unknown>, textKey: string, fileKey: string, label: string): Promise<unknown> {\n const text = inputString(input, textKey)\n const file = inputString(input, fileKey)\n if (text && file) throw new UsageError('AIWS_USAGE', `${textKey} and ${fileKey} are exclusive`)\n if (file) return JSON.parse(await getHost().readTextFile(file)) as unknown\n if (text) return JSON.parse(text) as unknown\n throw new UsageError('AIWS_USAGE', `${label}: pass --${textKey.replace(/_/g, '-')} or --${fileKey.replace(/_/g, '-')}`)\n}\n\nconst readCommand: CommandDefinition = {\n verb: 'read',\n summary: 'Read one entity of a workspace (envelope and content)',\n positionals: [{ name: 'entity_id', description: 'Entity id', required: true } satisfies PositionalDefinition],\n options: [WORKSPACE_OPTION, { name: 'selector', property: 'selector', description: 'Selector JSON, e.g. {\"kind\":\"table_record\",\"record_id\":\"r1\"}', type: 'string' }],\n inputSchema: workspaceInput({ entity_id: { type: 'string', minLength: 1 }, selector: { type: 'string' } }, ['entity_id']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws read orders --workspace ws_abc'],\n handler: (ctx, input) => {\n const selector = inputString(input, 'selector')\n return aiws(ctx, 'doc.read', { workspace_id: requiredInputString(input, 'workspace_id'), entity_id: requiredInputString(input, 'entity_id'), ...(selector ? { selector: JSON.parse(selector) } : {}) })\n },\n}\n\nconst queryCommand: CommandDefinition = {\n verb: 'query',\n summary: 'Query the rows of a table (or through a saved view)',\n options: [\n WORKSPACE_OPTION,\n { name: 'source', property: 'source_id', description: 'Table entity id', type: 'string' },\n { name: 'view', property: 'view_id', description: 'Table view (Block) id', type: 'string' },\n { name: 'filter', property: 'filter', description: 'Filter JSON (README: doc.query)', type: 'string' },\n { name: 'limit', property: 'limit', description: 'Rows per page (≤ 1000)', type: 'integer' },\n { name: 'cursor', property: 'cursor', description: 'Continue from a previous page', type: 'string' },\n ],\n inputSchema: workspaceInput({ source_id: { type: 'string' }, view_id: { type: 'string' }, filter: { type: 'string' }, limit: { type: 'integer' }, cursor: { type: 'string' } }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws query --workspace ws_abc --source orders --limit 100'],\n handler: (ctx, input) => {\n const params: Record<string, unknown> = { workspace_id: requiredInputString(input, 'workspace_id') }\n for (const key of ['source_id', 'view_id', 'cursor']) { const value = inputString(input, key); if (value) params[key] = value }\n const filter = inputString(input, 'filter')\n if (filter) params.filter = JSON.parse(filter)\n if (typeof input.limit === 'number') params.limit = input.limit\n if (!params.source_id && !params.view_id) throw new UsageError('AIWS_USAGE', 'pass --source or --view')\n return aiws(ctx, 'doc.query', params)\n },\n}\n\nconst infoCommand: CommandDefinition = {\n verb: 'info',\n summary: 'Workspace info: versions, capabilities of the caller, usage, hosted execution configuration',\n options: [WORKSPACE_OPTION],\n inputSchema: workspaceInput({}),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws info --workspace ws_abc'],\n handler: (ctx, input) => aiws(ctx, 'ws.get_info', { workspace_id: requiredInputString(input, 'workspace_id') }),\n}\n\nconst runGetCommand: CommandDefinition = {\n verb: 'run-get',\n summary: 'A wish run: state, execution context, the brief an executor starts from, candidate and preview',\n options: [WORKSPACE_OPTION, RUN_OPTION],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 } }, ['run_id']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-get --workspace ws_abc --run run_xyz'],\n handler: (ctx, input) => aiws(ctx, 'proc.get', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id') }),\n}\n\nconst runClaimCommand: CommandDefinition = {\n verb: 'run-claim',\n summary: 'Take a run as its executor: starts an attempt, answers the attempt number, a run token and the lease',\n options: [WORKSPACE_OPTION, RUN_OPTION, { name: 'claim-token', property: 'claim_token', description: 'The claim token the run was dispatched with (ct_…)', type: 'string', required: true, secret: true }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, claim_token: { type: 'string', minLength: 1 } }, ['run_id', 'claim_token']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-claim --workspace ws_abc --run run_xyz --claim-token ct_…'],\n handler: (ctx, input) => aiws(ctx, 'proc.claim', {\n workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), claim_token: requiredInputString(input, 'claim_token'),\n executor: { kind: 'agent', principal: ctx.principal.id },\n }),\n}\n\nconst runHeartbeatCommand: CommandDefinition = {\n verb: 'run-heartbeat',\n summary: 'Keep the lease of a claimed run alive (every minute while working); optionally report progress',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'phase', property: 'phase', description: 'A short progress phase, e.g. \"reading inputs\"', type: 'string' }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, phase: { type: 'string' } }, ['run_id', 'attempt']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-heartbeat --workspace ws_abc --run run_xyz --attempt 1 --phase \"reading inputs\"'],\n handler: (ctx, input) => {\n const phase = inputString(input, 'phase')\n return aiws(ctx, 'proc.heartbeat', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, ...(phase ? { progress: { phase } } : {}) })\n },\n}\n\nconst runFilesCommand: CommandDefinition = {\n verb: 'run-files',\n summary: 'Write the stage of a claimed run into a directory: the snapshot (context/), request.json, the Renderer catalog and the program host (lib/)',\n description: 'Run the program there the way the service does: `deno run -A lib/run.js` reads program/main.js and writes output/.aiws/results.json.',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'dir', property: 'dir', description: 'Directory to write into (created)', type: 'string', required: true }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, dir: { type: 'string', minLength: 1 } }, ['run_id', 'attempt', 'dir']),\n outputSchema: { type: 'object', properties: { dir: { type: 'string' }, files: { type: 'array', items: { type: 'string' } } }, required: ['dir', 'files'], additionalProperties: true },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-files --workspace ws_abc --run run_xyz --attempt 1 --dir work'],\n handler: async (ctx, input) => {\n const result = await aiws(ctx, 'proc.files', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt })\n const dir = requiredInputString(input, 'dir')\n const host = getHost()\n const written: string[] = []\n for (const [path, file] of Object.entries(expectObject(result.files, 'proc.files.files'))) {\n const f = expectObject(file, path)\n if (typeof f.text !== 'string' && typeof f.base64 !== 'string') continue\n const target = `${dir}/${path}`\n await host.mkdir(target.slice(0, target.lastIndexOf('/')), { recursive: true })\n if (typeof f.text === 'string') await host.writeTextFile(target, f.text)\n else await host.writeFile(target, Uint8Array.from(atob(f.base64 as string), (c) => c.charCodeAt(0)))\n written.push(path)\n }\n await host.mkdir(`${dir}/output`, { recursive: true })\n await host.mkdir(`${dir}/program`, { recursive: true })\n return { dir, files: written }\n },\n}\n\nconst runToolCommand: CommandDefinition = {\n verb: 'run-tool',\n summary: 'Call one stage tool of a claimed run (ws_profile, ws_read, ws_query, submit_analysis, put_result, check_results, finish, …): the service answers as it answers the model',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'name', property: 'name', description: 'Tool name (the claim answered the list, with their argument schemas)', type: 'string', required: true }, { name: 'args', property: 'args', description: 'Arguments JSON', type: 'string' }, { name: 'args-file', property: 'args_file', description: 'Path of a JSON file holding the arguments', type: 'string' }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, name: { type: 'string', minLength: 1 }, args: { type: 'string' }, args_file: { type: 'string' } }, ['run_id', 'attempt', 'name']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-tool --workspace ws_abc --run run_xyz --attempt 1 --name ws_profile --args \\'{\"target\":\"@B1\"}\\'', 'buckyos aiws run-tool --workspace ws_abc --run run_xyz --attempt 1 --name finish --args \\'{\"summary\":\"done\"}\\''],\n handler: async (ctx, input) => {\n const args = inputString(input, 'args') || inputString(input, 'args_file') ? await jsonInput(input, 'args', 'args_file', 'arguments') : {}\n return aiws(ctx, 'proc.tool', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, name: requiredInputString(input, 'name'), args })\n },\n}\n\nconst runProgramCommand: CommandDefinition = {\n verb: 'run-program',\n summary: 'Hand in a program run: the program source, what lib/run.js wrote to output/.aiws/results.json, the files under output/ and the log; the service validates it like its own run_program',\n options: [\n WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION,\n { name: 'dir', property: 'dir', description: 'The stage directory written by run-files (program/main.js, output/)', type: 'string', required: true },\n { name: 'log-file', property: 'log_file', description: 'Path of the program log to attach (stdout/stderr of deno run)', type: 'string' },\n ],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, dir: { type: 'string', minLength: 1 }, log_file: { type: 'string' } }, ['run_id', 'attempt', 'dir']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-program --workspace ws_abc --run run_xyz --attempt 1 --dir work --log-file work/run.log'],\n handler: async (ctx, input) => {\n const dir = requiredInputString(input, 'dir')\n const host = getHost()\n const source = await host.readTextFile(`${dir}/program/main.js`)\n let results: unknown = null\n try { results = JSON.parse(await host.readTextFile(`${dir}/output/.aiws/results.json`)) } catch { results = null }\n const logFile = inputString(input, 'log_file')\n const log = logFile ? await host.readTextFile(logFile).catch(() => '') : ''\n const files: Record<string, unknown> = {}\n const walk = async (rel: string) => {\n for (const entry of await host.readDir(`${dir}/output${rel ? `/${rel}` : ''}`)) {\n const name = rel ? `${rel}/${entry.name}` : entry.name\n if (name === '.aiws' || name.startsWith('.aiws/')) continue\n if (entry.isDirectory) await walk(name)\n else {\n const bytes = await host.readFile(`${dir}/output/${name}`)\n let text: string | null = null\n try { text = bytes.includes(0) ? null : new TextDecoder('utf-8', { fatal: true }).decode(bytes) } catch { text = null }\n files[`output/${name}`] = text ?? { base64: btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join('')) }\n }\n }\n }\n await walk('')\n return aiws(ctx, 'proc.program', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, source, results, log, files })\n },\n}\n\nconst runReportCommand: CommandDefinition = {\n verb: 'run-report',\n summary: 'End a claimed run: --finished after the stage tools accepted the work (submit_analysis / finish), or the candidate itself (results / analysis), or a failure',\n description: 'The service validates and plans what is reported; the user confirms it in the workspace. A superseded attempt or a cancelled run gets RUN_REVOKED.',\n options: [\n WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION,\n { name: 'finished', property: 'finished', description: 'The stage is done: what the tools collected becomes the candidate', type: 'boolean' },\n { name: 'results', property: 'results', description: 'Results JSON array (execute runs): [{ name, type, title?, content, config? }]', type: 'string' },\n { name: 'results-file', property: 'results_file', description: 'Path of a JSON file holding the results array', type: 'string' },\n { name: 'analysis', property: 'analysis', description: 'Analysis JSON (analyze runs, wish.analysis.v2)', type: 'string' },\n { name: 'analysis-file', property: 'analysis_file', description: 'Path of a JSON file holding the analysis', type: 'string' },\n { name: 'summary', property: 'summary', description: 'One paragraph on what was done', type: 'string' },\n { name: 'warning', property: 'warnings', description: 'A warning for the user (repeatable)', type: 'string' },\n { name: 'error', property: 'error', description: 'Report a failure instead: its reason', type: 'string' },\n ],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, finished: { type: 'boolean' }, results: { type: 'string' }, results_file: { type: 'string' }, analysis: { type: 'string' }, analysis_file: { type: 'string' }, summary: { type: 'string' }, warnings: { type: 'string' }, error: { type: 'string' } }, ['run_id', 'attempt']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --finished',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --results-file out/results.json --summary \"monthly totals and a commentary\"',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --analysis-file out/analysis.json',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --error \"the input table is empty\"',\n ],\n handler: async (ctx, input) => {\n const params: Record<string, unknown> = { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt }\n const error = inputString(input, 'error')\n if (error) {\n params.error = { code: 'EXECUTOR_FAILED', detail: error }\n } else if (input.finished === true) {\n params.finished = true\n } else if (inputString(input, 'analysis') || inputString(input, 'analysis_file')) {\n params.analysis = await jsonInput(input, 'analysis', 'analysis_file', 'an analysis')\n } else {\n params.results = await jsonInput(input, 'results', 'results_file', 'results')\n params.read_set = []\n }\n const summary = inputString(input, 'summary')\n if (summary) params.summary = summary\n const warning = inputString(input, 'warnings')\n if (warning) params.warnings = [warning]\n return aiws(ctx, 'proc.report', params)\n },\n}\n\nexport function createAiwsModule(): CommandModule {\n return {\n name: 'aiws',\n summary: 'AI Workspace: read a workspace, and execute wish runs as their executor (claim, heartbeat, report)',\n commands: [infoCommand, readCommand, queryCommand, runGetCommand, runClaimCommand, runHeartbeatCommand, runFilesCommand, runToolCommand, runProgramCommand, runReportCommand],\n }\n}\n","import type { GlobalOptions } from './argv.ts'\nimport { parseCommandArgs, parseDuration, parseInvocation, validateSchema } from './argv.ts'\nimport { AuthenticationSession, type SessionController } from './auth.ts'\nimport type { RegisteredCommand } from './command.ts'\nimport {\n type ConfigStore,\n type Environment,\n type ImplicitDeviceIdentity,\n localResolvedConfig,\n readEnvironment,\n resolveConfig,\n type ResolvedConfig,\n} from './config.ts'\nimport type { CommandContext } from './context.ts'\nimport { EXIT_PERMISSION, EXIT_SUCCESS, normalizeError, ToolError, UsageError } from './errors.ts'\nimport { applyImplicitDeviceIdentity, identityCandidateView } from './identity.ts'\nimport { errorEnvelope, renderError, renderSuccess, successEnvelope } from './output.ts'\nimport { CommandRegistry } from './registry.ts'\nimport { runRepl } from './repl.ts'\nimport {\n BuckyOSRuntimeAdapter,\n BuckyOSServiceClientRegistry,\n InteractiveSession,\n type RuntimeAdapter,\n type ServiceClientRegistry,\n} from './runtime.ts'\nimport { createAuthModule } from '../modules/auth.ts'\nimport { createCoreModules } from '../modules/core.ts'\nimport { createSystemModule } from '../modules/system.ts'\nimport { createSystemConfigModule } from '../modules/system_config.ts'\nimport { createPikgModule, type PikgModuleDependencies } from '../modules/pikg.ts'\nimport { type AppModuleDependencies, createAppModule } from '../modules/app.ts'\nimport { createDiagnosticModule, type DiagnosticModuleDependencies } from '../modules/diagnostic.ts'\nimport { createLogModule, type LogModuleDependencies } from '../modules/log.ts'\nimport { createTaskModule } from '../modules/task.ts'\nimport { createProvisionModule, type ProvisionModuleDependencies } from '../modules/provision.ts'\nimport { createSkillModule } from '../modules/skill.ts'\nimport { createAgentModule } from '../modules/agent.ts'\nimport { createAiModule } from '../modules/ai.ts'\nimport { createShareModule } from '../modules/share.ts'\nimport { createExecutorModule } from '../modules/executor.ts'\nimport { createAiwsModule } from '../modules/aiws.ts'\nimport {\n distributionManifestView,\n getHost,\n policyView,\n readDistributionManifest,\n} from '../runtime/host.ts'\nimport { PROTOCOL_VERSION, SDK_VERSION, TOOL_VERSION } from '../version.ts'\n\nexport const VERSION = TOOL_VERSION\n\nexport interface ToolStdio {\n stdout(value: string): Promise<void>\n stderr(value: string): Promise<void>\n readStdin(): Promise<string>\n prompt?(message: string): Promise<string | null>\n inputIsTerminal?(): boolean\n}\n\nexport interface ApplicationDependencies {\n environment?: Environment\n cwd?: string\n homeDir?: string\n stdio?: ToolStdio\n createAuthentication?: (config: ResolvedConfig) => SessionController\n runtime?: RuntimeAdapter\n createClients?: (\n config: ResolvedConfig,\n authentication: SessionController,\n ) => ServiceClientRegistry\n confirmDeviceIdentity?: (identity: ImplicitDeviceIdentity) => Promise<boolean>\n repl?: typeof runRepl\n pikg?: PikgModuleDependencies\n app?: AppModuleDependencies\n log?: LogModuleDependencies\n diagnostic?: DiagnosticModuleDependencies\n provision?: ProvisionModuleDependencies\n}\n\nexport class BuckyOSToolApplication {\n readonly registry: CommandRegistry\n readonly #environment: Environment\n readonly #cwd: string\n readonly #homeDir?: string\n readonly #stdio: ToolStdio\n readonly #createAuthentication: (config: ResolvedConfig) => SessionController\n readonly #runtime: RuntimeAdapter\n readonly #createClients: (\n config: ResolvedConfig,\n authentication: SessionController,\n ) => ServiceClientRegistry\n readonly #confirmDeviceIdentity: (identity: ImplicitDeviceIdentity) => Promise<boolean>\n readonly #repl: typeof runRepl\n\n constructor(dependencies: ApplicationDependencies = {}) {\n this.registry = createRegistry(\n dependencies.pikg,\n dependencies.app,\n dependencies.log,\n dependencies.diagnostic,\n dependencies.provision,\n )\n this.#environment = dependencies.environment ?? readEnvironment()\n this.#cwd = dependencies.cwd ?? getHost().cwd()\n this.#homeDir = dependencies.homeDir\n this.#stdio = dependencies.stdio ?? defaultStdio()\n this.#createAuthentication = dependencies.createAuthentication ??\n ((config) => new AuthenticationSession(config, this.#environment))\n this.#runtime = dependencies.runtime ?? new BuckyOSRuntimeAdapter()\n this.#createClients = dependencies.createClients ??\n ((config, authentication) => new BuckyOSServiceClientRegistry(config, authentication))\n this.#confirmDeviceIdentity = dependencies.confirmDeviceIdentity ?? confirmDeviceIdentity\n this.#repl = dependencies.repl ?? runRepl\n }\n\n async run(argv: string[]): Promise<number> {\n let fallbackTraceId: string = crypto.randomUUID()\n try {\n const invocation = parseInvocation(argv)\n fallbackTraceId = invocation.global.traceId ?? fallbackTraceId\n if (invocation.global.version) {\n if (invocation.module) {\n throw new UsageError('ARGUMENT_CONFLICT', '--version cannot be combined with a command')\n }\n if (invocation.global.verbose) {\n const distributionManifest = await readDistributionManifest()\n let identityCandidates: Record<string, unknown>\n try {\n const setup = await resolveConfig(invocation.global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n setup.resolved = await applyImplicitDeviceIdentity(\n setup.resolved,\n this.#environment,\n )\n identityCandidates = await identityCandidateView(\n setup.resolved,\n this.#environment,\n )\n } catch (error) {\n const normalized = normalizeError(error)\n identityCandidates = { mode: 'unavailable', error: normalized.code }\n }\n await this.#stdio.stdout(`${\n JSON.stringify(\n {\n buckyos: distributionManifest?.buckyos_version ?? null,\n buckyos_build_id: distributionManifest?.build_id ?? null,\n tool_version: TOOL_VERSION,\n sdk_version: SDK_VERSION,\n protocol_version: PROTOCOL_VERSION,\n target_zone: invocation.global.zone ?? getHost().env('BUCKYOS_TOOL_ZONE') ?? null,\n compatibility: 'not-checked',\n ...policyView(getHost()),\n identity_candidates: identityCandidates,\n distribution_manifest: distributionManifestView(distributionManifest),\n },\n null,\n 2,\n )\n }\\n`)\n } else {\n await this.#stdio.stdout(`buckyos ${VERSION}\\n`)\n }\n return EXIT_SUCCESS\n }\n if (invocation.global.cli) {\n return await this.#runInteractive(invocation.global, invocation.module, invocation.verb)\n }\n if (!invocation.module) {\n if (invocation.global.help) {\n await this.#stdio.stdout(`${topLevelHelp(this.registry)}\\n`)\n return EXIT_SUCCESS\n }\n throw new UsageError('COMMAND_REQUIRED', 'a module and verb are required')\n }\n if (!invocation.verb || invocation.verb === '--help' || invocation.verb === '-h') {\n await this.#stdio.stdout(`${moduleHelp(this.registry, invocation.module)}\\n`)\n return EXIT_SUCCESS\n }\n\n const command = this.registry.get(invocation.module, invocation.verb)\n if (\n invocation.global.help || invocation.actionArgv.includes('--help') ||\n invocation.actionArgv.includes('-h')\n ) {\n await this.#stdio.stdout(`${commandHelp(this.registry, command)}\\n`)\n return EXIT_SUCCESS\n }\n if (command.execution === 'local') assertNoSessionOptions(invocation.global, command)\n const setup = await this.#resolveForCommand(command, invocation.global)\n const inputObject = invocation.global.input\n ? await this.#readInputObject(invocation.global.input)\n : undefined\n const parsed = parseCommandArgs(command, invocation.actionArgv, inputObject)\n if (setup.resolved.output === 'raw' && !command.supportsRawOutput) {\n throw new UsageError(\n 'RAW_OUTPUT_UNSUPPORTED',\n `${command.module} ${command.verb} does not support raw output`,\n )\n }\n const session = command.requiresSession\n ? await this.#createSession(setup.resolved)\n : undefined\n return await this.#executeAndEmit(\n command,\n parsed.input,\n setup.resolved,\n setup.store,\n session,\n false,\n new AbortController().signal,\n )\n } catch (error) {\n const normalized = normalizeError(error)\n const envelope = errorEnvelope(normalized, { command: 'core', trace_id: fallbackTraceId })\n await this.#stdio.stdout(`${renderError(envelope, 'json')}\\n`)\n return normalized.exitCode\n }\n }\n\n async #runInteractive(global: GlobalOptions, module?: string, verb?: string): Promise<number> {\n if (module || verb) {\n throw new UsageError('ARGUMENT_CONFLICT', '--cli cannot be combined with a module or verb')\n }\n if (global.nonInteractive) {\n throw new UsageError('ARGUMENT_CONFLICT', '--cli conflicts with --non-interactive')\n }\n for (\n const [name, value] of [\n ['input', global.input],\n ['timeout', global.timeout],\n ['trace-id', global.traceId],\n ['idempotency-key', global.idempotencyKey],\n ['wait', global.wait],\n ['yes', global.yes],\n ] as const\n ) {\n if (value !== undefined) {\n throw new UsageError(\n 'ARGUMENT_CONFLICT',\n `--${name} is command-scoped and cannot be set when entering --cli`,\n )\n }\n }\n const setup = await resolveConfig(global, this.#environment, {\n interactive: true,\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n setup.resolved = await applyImplicitDeviceIdentity(setup.resolved, this.#environment)\n const session = await this.#createSession(setup.resolved)\n await this.#repl({\n registry: this.registry,\n config: setup.resolved,\n configStore: setup.store,\n session,\n execute: async (tokens, signal) =>\n await this.#executeInteractiveLine(tokens, signal, setup.resolved, setup.store, session),\n })\n return EXIT_SUCCESS\n }\n\n async #executeInteractiveLine(\n tokens: string[],\n signal: AbortSignal,\n frozen: ResolvedConfig,\n store: ConfigStore,\n session: InteractiveSession,\n ): Promise<void> {\n if (tokens.length < 2) throw new UsageError('COMMAND_REQUIRED', 'enter <module> <verb>')\n const command = this.registry.get(tokens[0], tokens[1])\n const actionArgv = tokens.slice(2)\n if (actionArgv.includes('--help') || actionArgv.includes('-h')) {\n await this.#stdio.stdout(`${commandHelp(this.registry, command)}\\n`)\n return\n }\n const preliminary = parseCommandArgs(command, actionArgv, undefined, true, true)\n if (preliminary.scoped.input === '-') {\n throw new UsageError('STDIN_UNAVAILABLE', '--input - is not available inside --cli')\n }\n const inputObject = preliminary.scoped.input\n ? await this.#readInputObject(preliminary.scoped.input)\n : undefined\n const parsed = parseCommandArgs(command, actionArgv, inputObject, true)\n const config: ResolvedConfig = {\n ...frozen,\n output: parsed.scoped.output ?? frozen.output,\n timeoutMs: parsed.scoped.timeout ? parseDuration(parsed.scoped.timeout) : frozen.timeoutMs,\n traceId: parsed.scoped.traceId,\n idempotencyKey: parsed.scoped.idempotencyKey,\n wait: parsed.scoped.wait ?? false,\n yes: parsed.scoped.yes ?? false,\n }\n if (config.output === 'raw' && !command.supportsRawOutput) {\n throw new UsageError(\n 'RAW_OUTPUT_UNSUPPORTED',\n `${command.module} ${command.verb} does not support raw output`,\n )\n }\n await this.#executeAndEmit(command, parsed.input, config, store, session, true, signal)\n }\n\n async #executeAndEmit(\n command: RegisteredCommand,\n input: Record<string, unknown>,\n config: ResolvedConfig,\n store: ConfigStore,\n session: InteractiveSession | undefined,\n interactive: boolean,\n signal: AbortSignal,\n ): Promise<number> {\n const traceId = config.traceId ?? crypto.randomUUID()\n const startedAt = Date.now()\n try {\n if (command.requiresSession && !session) {\n throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n }\n if (command.requiresSession) await session!.authentication.ensureValid()\n const principal = session?.authentication.current().principal ?? {\n id: 'local',\n appId: 'buckyos-tool',\n authentication: 'mock' as const,\n }\n const context: CommandContext = {\n command: { module: command.module, verb: command.verb },\n definition: command,\n connection: session?.connection ?? {\n zone: config.zone ?? 'local',\n endpoint: config.endpoint ?? 'local://',\n defaultProtocol: config.defaultProtocol,\n },\n principal,\n clients: session?.clients ?? unavailableClients,\n output: { format: config.output },\n traceId,\n idempotencyKey: config.idempotencyKey,\n deadline: Date.now() + config.timeoutMs,\n signal,\n cwd: this.#cwd,\n io: {\n stdout: (value) => this.#stdio.stdout(value),\n stderr: (value) => this.#stdio.stderr(value),\n prompt: (message) => this.#stdio.prompt?.(message) ?? Promise.resolve(null),\n inputIsTerminal: this.#stdio.inputIsTerminal?.() ?? false,\n },\n interactive,\n confirmed: config.yes,\n config,\n configStore: store,\n session: session?.authentication,\n }\n const data = await command.handler(context, input)\n try {\n validateSchema(data, command.outputSchema, 'output')\n } catch (error) {\n throw new ToolError(\n 'INVALID_HANDLER_OUTPUT',\n error instanceof Error ? error.message : String(error),\n 9,\n )\n }\n const envelope = successEnvelope(data, {\n command: `${command.module}.${command.verb}`,\n trace_id: traceId,\n duration_ms: Date.now() - startedAt,\n })\n await this.#stdio.stdout(\n `${renderSuccess(envelope, config.output)}${config.output === 'raw' ? '' : '\\n'}`,\n )\n return EXIT_SUCCESS\n } catch (error) {\n const normalized = normalizeError(error)\n const envelope = errorEnvelope(normalized, {\n command: `${command.module}.${command.verb}`,\n trace_id: traceId,\n duration_ms: Date.now() - startedAt,\n })\n await this.#stdio.stdout(`${renderError(envelope, config.output)}\\n`)\n if (config.verbose) await this.#stdio.stderr(`diagnostic: ${normalized.code}\\n`)\n return normalized.exitCode\n }\n }\n\n async #resolveForCommand(\n command: RegisteredCommand,\n global: GlobalOptions,\n ): Promise<{ resolved: ResolvedConfig; store: ConfigStore }> {\n if (command.requiresSession || (command.module === 'config' && command.verb === 'check')) {\n const setup = await resolveConfig(global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n if (command.requiresSession) {\n setup.resolved = await applyImplicitDeviceIdentity(setup.resolved, this.#environment)\n }\n return setup\n }\n return localResolvedConfig(global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n }\n\n async #createSession(config: ResolvedConfig): Promise<InteractiveSession> {\n await this.#approveImplicitDeviceIdentity(config)\n const authentication = this.#createAuthentication(config)\n return await InteractiveSession.create(\n config,\n authentication,\n this.#runtime,\n this.#createClients(config, authentication),\n )\n }\n\n async #approveImplicitDeviceIdentity(config: ResolvedConfig): Promise<void> {\n const identity = config.implicitDeviceIdentity\n if (!identity || config.yes) return\n if (config.nonInteractive) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'using the current device identity requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n if (!await this.#confirmDeviceIdentity(identity)) {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'current device identity confirmation was declined',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n }\n\n async #readInputObject(path: string): Promise<Record<string, unknown>> {\n let raw: string\n try {\n raw = path === '-' ? await this.#stdio.readStdin() : await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError(\n 'INPUT_READ_FAILED',\n `failed to read input: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_INPUT_JSON', 'input is not valid JSON')\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new UsageError('INVALID_INPUT_JSON', 'input JSON must be an object')\n }\n return parsed as Record<string, unknown>\n }\n}\n\nexport function createRegistry(\n pikgDependencies?: PikgModuleDependencies,\n appDependencies?: AppModuleDependencies,\n logDependencies?: LogModuleDependencies,\n diagnosticDependencies?: DiagnosticModuleDependencies,\n provisionDependencies?: ProvisionModuleDependencies,\n): CommandRegistry {\n const registry = new CommandRegistry()\n for (const module of createCoreModules(registry)) registry.register(module)\n registry.register(createAuthModule())\n registry.register(createPikgModule(pikgDependencies))\n registry.register(createSystemModule())\n registry.register(createSystemConfigModule())\n registry.register(createAppModule(appDependencies))\n registry.register(createTaskModule())\n registry.register(createLogModule(logDependencies))\n registry.register(createDiagnosticModule(diagnosticDependencies))\n registry.register(createProvisionModule(provisionDependencies))\n registry.register(createSkillModule())\n registry.register(createAgentModule())\n registry.register(createAiModule())\n registry.register(createShareModule())\n registry.register(createExecutorModule())\n registry.register(createAiwsModule())\n return registry\n}\n\n// Commands that declare execution=local run without a Zone, profile, identity,\n// or network; online-only session options must not silently retarget them.\nfunction assertNoSessionOptions(global: GlobalOptions, command: RegisteredCommand): void {\n for (\n const [name, value] of [\n ['profile', global.profile],\n ['zone', global.zone],\n ['endpoint', global.endpoint],\n ['identity', global.identity],\n ['session-token', global.sessionToken],\n ['session-token-file', global.sessionTokenFile],\n ] as const\n ) {\n if (value !== undefined) {\n throw new UsageError(\n 'ARGUMENT_CONFLICT',\n `--${name} cannot be combined with the local command ${command.module} ${command.verb}`,\n )\n }\n }\n}\n\nconst unavailableClients: ServiceClientRegistry = {\n call: () => Promise.reject(new ToolError('INTERNAL_ERROR', 'service clients are unavailable', 9)),\n}\n\nfunction topLevelHelp(registry: CommandRegistry): string {\n return [\n `BuckyOS Tool ${VERSION}`,\n '',\n 'Usage:',\n ' buckyos [global-options] <module> <verb> [primary-selector] [action-options]',\n ' buckyos [session-options] --cli',\n '',\n 'Modules:',\n ...registry.modules().map((module) => ` ${module.name.padEnd(12)} ${module.summary}`),\n '',\n 'Global options:',\n ' --config-dir <path> --profile <name> --zone <host-or-did>',\n ' --allow-read <path> Add a readable filesystem root (repeatable)',\n ' --endpoint <url> --identity <did-or-name>',\n ' --session-token <token> | --session-token-file <path>',\n ' Prefer --session-token-file for automation; argv tokens may appear in process listings.',\n ' --output <json|jsonl|table|text|raw> --input <path|->',\n ' --timeout <duration> --trace-id <id> --non-interactive --yes',\n ' --cli --help --version',\n '',\n 'Use `buckyos command describe <module> <verb>` for machine-readable schemas.',\n ].join('\\n')\n}\n\nfunction moduleHelp(registry: CommandRegistry, moduleName: string): string {\n const module = registry.modules().find((candidate) => candidate.name === moduleName)\n if (!module) throw new UsageError('UNKNOWN_MODULE', `unknown module: ${moduleName}`)\n return [\n `${module.name}: ${module.summary}`,\n '',\n 'Commands:',\n ...module.commands.map((command) => ` ${command.verb.padEnd(18)} ${command.summary}`),\n ].join('\\n')\n}\n\nfunction commandHelp(registry: CommandRegistry, command: RegisteredCommand): string {\n return [\n command.summary,\n '',\n `Usage: ${registry.syntax(command)}`,\n ...(command.description ? ['', command.description] : []),\n ...((command.positionals?.length ?? 0) > 0\n ? [\n '',\n 'Arguments:',\n ...command.positionals!.map((position) =>\n ` ${position.name.padEnd(20)} ${position.description}`\n ),\n ]\n : []),\n ...((command.options?.length ?? 0) > 0\n ? [\n '',\n 'Options:',\n ...command.options!.map((option) => ` --${option.name.padEnd(18)} ${option.description}`),\n ]\n : []),\n ...((command.examples?.length ?? 0) > 0\n ? ['', 'Examples:', ...command.examples!.map((example) => ` ${example}`)]\n : []),\n ].join('\\n')\n}\n\nfunction defaultStdio(): ToolStdio {\n return {\n stdout: async (value) => await getHost().stdout(value),\n stderr: async (value) => await getHost().stderr(value),\n readStdin: async () => await getHost().readStdin(),\n prompt: async (message) => await getHost().readLine(message),\n inputIsTerminal: () => getHost().inputIsTerminal(),\n }\n}\n\nasync function confirmDeviceIdentity(identity: ImplicitDeviceIdentity): Promise<boolean> {\n if (!getHost().inputIsTerminal()) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'using the current device identity requires an interactive terminal or --yes',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n const prompt = `Use current device identity ${identity.name} (${identity.did})? ` +\n 'This identity may have broad privileges. Continue? [y/N] '\n const answer = (await getHost().readLine(prompt))?.trim() ?? ''\n return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes'\n}\n","import { BuckyOSToolApplication } from './core/app.ts'\nimport type { ToolHost } from './runtime/host.ts'\nimport { installHost } from './runtime/host.ts'\n\nexport async function runCli(host: ToolHost, argv: string[]): Promise<number> {\n installHost(host)\n return await new BuckyOSToolApplication().run(argv)\n}\n","import { type DistributionPolicy, HostError, type HostPath, isHostError } from './host.ts'\n\nexport async function assertPathAccess(\n policy: DistributionPolicy,\n path: HostPath,\n realPath: (value: string) => Promise<string>,\n candidate: string,\n operation: 'read' | 'write',\n resolveLinks = true,\n): Promise<void> {\n const roots = operation === 'read' ? policy.readPaths : policy.writePaths\n const absolute = path.resolve(candidate)\n const physicalRoots: string[] = []\n for (const root of roots) {\n try {\n physicalRoots.push(await realPath(path.resolve(root)))\n } catch (error) {\n if (!isHostError(error, 'NotFound') && !isHostError(error, 'PermissionDenied')) throw error\n }\n }\n if (!insideAny(absolute, roots, path) && !insideAny(absolute, physicalRoots, path)) {\n throw new HostError(\n 'PermissionDenied',\n `${operation} access is outside ${policy.name}: ${absolute}`,\n absolute,\n )\n }\n if (!resolveLinks) return\n try {\n const physical = await realPath(absolute)\n if (!insideAny(physical, physicalRoots, path)) {\n throw new HostError(\n 'PermissionDenied',\n `${operation} access escapes ${policy.name}: ${absolute}`,\n absolute,\n )\n }\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nfunction insideAny(candidate: string, roots: readonly string[], path: HostPath): boolean {\n return roots.some((root) => {\n const relative = path.relative(path.resolve(root), candidate)\n return relative === '' || relative !== '..' && !relative.startsWith(`..${path.sep}`) &&\n !path.isAbsolute(relative)\n })\n}\n","import { createHash as nodeCreateHash } from 'node:crypto'\nimport {\n chmod,\n copyFile,\n lstat,\n mkdir,\n mkdtemp,\n open,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n symlink,\n writeFile,\n} from 'node:fs/promises'\nimport { createReadStream, createWriteStream } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport * as nodePath from 'node:path'\nimport { spawn } from 'node:child_process'\nimport process from 'node:process'\nimport { createInterface } from 'node:readline/promises'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { constants as zlibConstants, createGzip } from 'node:zlib'\nimport { assertPathAccess } from './path_policy.ts'\nimport {\n type DistributionPolicy,\n HostError,\n type HostFile,\n type HostFileInfo,\n type HostLineReader,\n type ToolHost,\n} from './host.ts'\n\nexport class NodeHost implements ToolHost {\n readonly kind = 'node' as const\n readonly runtimeName = 'node'\n readonly runtimeVersion = process.versions.node\n readonly platform = normalizePlatform(process.platform)\n readonly arch = normalizeArch(process.arch)\n readonly pid = process.pid\n readonly executable = process.argv[1] ? nodePath.resolve(process.argv[1]) : process.execPath\n readonly runtimeExecutable = process.execPath\n readonly path = nodePath\n readonly policy: DistributionPolicy\n\n constructor(policy: DistributionPolicy) {\n this.policy = policy\n }\n\n cwd(): string {\n return process.cwd()\n }\n\n homeDir(): string {\n return process.env.HOME ?? process.env.USERPROFILE ?? process.cwd()\n }\n\n env(name: string): string | undefined {\n if (!this.policy.environment.includes(name)) {\n throw new HostError('PermissionDenied', `environment access is not allowed: ${name}`)\n }\n return process.env[name]\n }\n\n exit(code: number): never {\n process.exit(code)\n }\n\n setExitCode(code: number): void {\n process.exitCode = code\n }\n\n async readTextFile(path: string): Promise<string> {\n await this.assertPath(path, 'read')\n try {\n return await readFile(path, 'utf8')\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async readFile(path: string): Promise<Uint8Array> {\n await this.assertPath(path, 'read')\n try {\n return new Uint8Array(await readFile(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async writeTextFile(\n path: string,\n value: string,\n options: { createNew?: boolean; mode?: number } = {},\n ): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await writeFile(path, value, {\n flag: options.createNew ? 'wx' : 'w',\n mode: options.mode,\n })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async writeFile(\n path: string,\n value: Uint8Array,\n options: { createNew?: boolean; mode?: number } = {},\n ): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await writeFile(path, value, {\n flag: options.createNew ? 'wx' : 'w',\n mode: options.mode,\n })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async readDir(path: string) {\n await this.assertPath(path, 'read')\n try {\n return (await readdir(path, { withFileTypes: true })).map((entry) => ({\n name: entry.name,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n isSymlink: entry.isSymbolicLink(),\n }))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async stat(path: string): Promise<HostFileInfo> {\n await this.assertPath(path, 'read')\n try {\n return fileInfo(await stat(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async lstat(path: string): Promise<HostFileInfo> {\n await this.assertPath(path, 'read', false)\n try {\n return fileInfo(await lstat(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async realPath(path: string): Promise<string> {\n await this.assertPath(path, 'read')\n try {\n return await realpath(path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async makeTempDir(options: { dir?: string; prefix?: string } = {}): Promise<string> {\n const directory = options.dir ?? tmpdir()\n await this.assertPath(directory, 'write')\n try {\n return await mkdtemp(nodePath.join(directory, options.prefix ?? 'buckyos-'))\n } catch (error) {\n throw translateNodeError(error, directory)\n }\n }\n\n async makeTempFile(options: { dir?: string; prefix?: string } = {}): Promise<string> {\n const directory = await this.makeTempDir({ dir: options.dir, prefix: options.prefix })\n const path = nodePath.join(directory, 'file')\n await this.writeFile(path, new Uint8Array(), { createNew: true, mode: 0o600 })\n return path\n }\n\n async rename(from: string, to: string): Promise<void> {\n await this.assertPath(from, 'write')\n await this.assertPath(to, 'write')\n try {\n await rename(from, to)\n } catch (error) {\n throw translateNodeError(error, `${from} -> ${to}`)\n }\n }\n\n async remove(path: string, options: { recursive?: boolean } = {}): Promise<void> {\n await this.assertPath(path, 'write', false)\n try {\n await rm(path, { recursive: options.recursive ?? false })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async mkdir(path: string, options: { recursive?: boolean; mode?: number } = {}): Promise<void> {\n await this.assertPath(path, 'write', false)\n try {\n await mkdir(path, { recursive: options.recursive, mode: options.mode })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async chmod(path: string, mode: number): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await chmod(path, mode)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async symlink(target: string, path: string): Promise<void> {\n await this.assertPath(target, 'read')\n await this.assertPath(path, 'write', false)\n try {\n await symlink(target, path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async copyFile(from: string, to: string): Promise<void> {\n await this.assertPath(from, 'read')\n await this.assertPath(to, 'write', false)\n try {\n await copyFile(from, to)\n } catch (error) {\n throw translateNodeError(error, `${from} -> ${to}`)\n }\n }\n\n async open(\n path: string,\n options: { read?: boolean; write?: boolean; createNew?: boolean; mode?: number },\n ): Promise<HostFile> {\n await this.assertPath(path, options.write ? 'write' : 'read', !options.createNew)\n const flags = options.read && options.write\n ? 'r+'\n : options.write\n ? options.createNew ? 'wx' : 'w'\n : 'r'\n try {\n return new NodeHostFile(await open(path, flags, options.mode))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async assertAccess(path: string, operation: 'read' | 'write'): Promise<void> {\n await this.assertPath(path, operation)\n }\n\n createHash(_algorithm: 'sha256') {\n const hash = nodeCreateHash('sha256')\n return {\n update(bytes: Uint8Array) {\n hash.update(bytes)\n },\n digestHex() {\n return hash.digest('hex')\n },\n }\n }\n\n async gzipFile(source: string, destination: string): Promise<void> {\n await this.assertPath(source, 'read')\n await this.assertPath(destination, 'write', false)\n try {\n await pipeline(\n Readable.from(fixedChunks(createReadStream(source))),\n createGzip({ level: 6, strategy: zlibConstants.Z_RLE }),\n createWriteStream(destination, { flags: 'wx', mode: 0o600 }),\n )\n } catch (error) {\n throw translateNodeError(error, destination)\n }\n }\n\n async run(command: string, args: string[]) {\n this.assertCommand(command)\n return await capture(command, args)\n }\n\n async runGzip(command: string, args: string[], destination: string) {\n this.assertCommand(command)\n await this.assertPath(destination, 'write', false)\n const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: false })\n const stderr: Uint8Array[] = []\n child.stderr.on('data', (chunk) => stderr.push(new Uint8Array(chunk)))\n try {\n await pipeline(\n Readable.from(fixedChunks(child.stdout)),\n createGzip({ level: 6, strategy: zlibConstants.Z_RLE }),\n createWriteStream(destination, { flags: 'wx', mode: 0o600 }),\n )\n const code = await childStatus(child)\n return { success: code === 0, code, stdout: new Uint8Array(), stderr: concat(stderr) }\n } catch (error) {\n child.kill()\n throw translateNodeError(error, destination)\n }\n }\n\n async stdout(value: string | Uint8Array): Promise<void> {\n await writeStream(process.stdout, value)\n }\n\n async stderr(value: string | Uint8Array): Promise<void> {\n await writeStream(process.stderr, value)\n }\n\n async readStdin(): Promise<string> {\n const chunks: Uint8Array[] = []\n for await (const chunk of process.stdin) chunks.push(new Uint8Array(chunk))\n return new TextDecoder().decode(concat(chunks))\n }\n\n async readLine(prompt: string): Promise<string | null> {\n const reader = createInterface({ input: process.stdin, output: process.stderr })\n try {\n return await reader.question(prompt)\n } catch {\n return null\n } finally {\n reader.close()\n }\n }\n\n async readSecret(prompt: string): Promise<string> {\n if (!this.inputIsTerminal() || typeof process.stdin.setRawMode !== 'function') {\n throw new HostError('PermissionDenied', 'secret input requires a terminal')\n }\n await this.stderr(prompt)\n process.stdin.setRawMode(true)\n process.stdin.resume()\n const bytes: number[] = []\n try {\n while (true) {\n const chunk = await readInputChunk()\n if (chunk === null) break\n const byte = chunk[0]\n if (byte === 10 || byte === 13) break\n if (byte === 3) throw new HostError('PermissionDenied', 'secret input canceled')\n if (byte === 8 || byte === 127) bytes.pop()\n else bytes.push(byte)\n }\n } finally {\n process.stdin.setRawMode(false)\n process.stdin.pause()\n await this.stderr('\\n')\n }\n return new TextDecoder().decode(Uint8Array.from(bytes))\n }\n\n inputIsTerminal(): boolean {\n return Boolean(process.stdin.isTTY)\n }\n\n createLineReader(options: {\n history: string[]\n historySize: number\n completer(line: string): [string[], string]\n onSigint(): void\n }): HostLineReader {\n const reader = createInterface({\n input: process.stdin,\n output: process.stderr,\n terminal: true,\n history: options.history,\n historySize: options.historySize,\n completer: options.completer,\n })\n reader.on('SIGINT', options.onSigint)\n return {\n [Symbol.asyncIterator]: () => reader[Symbol.asyncIterator](),\n write: (value) => process.stderr.write(value),\n setPrompt: (value) => reader.setPrompt(value),\n prompt: () => reader.prompt(),\n close: () => reader.close(),\n }\n }\n\n private assertCommand(command: string): void {\n if (!this.policy.subprocesses.includes(command)) {\n throw new HostError('PermissionDenied', `subprocess is not allowed: ${command}`)\n }\n }\n\n private async assertPath(\n candidate: string,\n operation: 'read' | 'write',\n resolveLinks = true,\n ): Promise<void> {\n await assertPathAccess(\n this.policy,\n nodePath,\n async (path) => {\n try {\n return await realpath(path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n },\n candidate,\n operation,\n resolveLinks,\n )\n }\n}\n\nasync function* fixedChunks(\n source: AsyncIterable<Uint8Array>,\n): AsyncGenerator<Uint8Array> {\n const size = 64 * 1024\n let pending = new Uint8Array(size)\n let used = 0\n for await (const chunk of source) {\n let offset = 0\n while (offset < chunk.byteLength) {\n const copied = Math.min(size - used, chunk.byteLength - offset)\n pending.set(chunk.subarray(offset, offset + copied), used)\n used += copied\n offset += copied\n if (used === size) {\n yield pending\n pending = new Uint8Array(size)\n used = 0\n }\n }\n }\n if (used > 0) yield pending.slice(0, used)\n}\n\nclass NodeHostFile implements HostFile {\n readonly handle\n #position = 0\n\n constructor(handle: Awaited<ReturnType<typeof open>>) {\n this.handle = handle\n }\n\n async read(buffer: Uint8Array): Promise<number | null> {\n const result = await this.handle.read(buffer, 0, buffer.length, this.#position)\n if (result.bytesRead === 0) return null\n this.#position += result.bytesRead\n return result.bytesRead\n }\n\n async write(buffer: Uint8Array): Promise<number> {\n const result = await this.handle.write(buffer, 0, buffer.length, this.#position)\n this.#position += result.bytesWritten\n return result.bytesWritten\n }\n\n seek(offset: number): Promise<number> {\n this.#position = offset\n return Promise.resolve(offset)\n }\n\n async stat(): Promise<HostFileInfo> {\n return fileInfo(await this.handle.stat())\n }\n\n async sync(): Promise<void> {\n await this.handle.sync()\n }\n\n close(): Promise<void> {\n return this.handle.close()\n }\n}\n\nfunction fileInfo(value: {\n isFile(): boolean\n isDirectory(): boolean\n isSymbolicLink(): boolean\n size: number\n mode: number\n mtime: Date\n dev: number\n ino: number\n}): HostFileInfo {\n return {\n isFile: value.isFile(),\n isDirectory: value.isDirectory(),\n isSymlink: value.isSymbolicLink(),\n size: value.size,\n mode: value.mode ?? null,\n mtime: value.mtime ?? null,\n dev: value.dev ?? null,\n ino: value.ino ?? null,\n }\n}\n\nasync function capture(command: string, args: string[]) {\n return await new Promise<{\n success: boolean\n code: number\n stdout: Uint8Array\n stderr: Uint8Array\n }>((resolve, reject) => {\n const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: false })\n const stdout: Uint8Array[] = []\n const stderr: Uint8Array[] = []\n child.stdout.on('data', (chunk) => stdout.push(new Uint8Array(chunk)))\n child.stderr.on('data', (chunk) => stderr.push(new Uint8Array(chunk)))\n child.once('error', reject)\n child.once('close', (code) =>\n resolve({\n success: code === 0,\n code: code ?? 1,\n stdout: concat(stdout),\n stderr: concat(stderr),\n }))\n })\n}\n\nasync function childStatus(child: ReturnType<typeof spawn>): Promise<number> {\n if (child.exitCode !== null) return child.exitCode\n return await new Promise((resolve, reject) => {\n child.once('error', reject)\n child.once('close', (code) => resolve(code ?? 1))\n })\n}\n\nfunction concat(chunks: Uint8Array[]): Uint8Array {\n const output = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.length, 0))\n let offset = 0\n for (const chunk of chunks) {\n output.set(chunk, offset)\n offset += chunk.length\n }\n return output\n}\n\nasync function writeStream(\n stream: NodeJS.WritableStream,\n value: string | Uint8Array,\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n stream.write(value, (error?: Error | null) => error ? reject(error) : resolve())\n })\n}\n\nasync function readInputChunk(): Promise<Uint8Array | null> {\n return await new Promise((resolve, reject) => {\n const onData = (chunk: Uint8Array) => done(new Uint8Array(chunk))\n const onEnd = () => done(null)\n const onError = (error: Error) => {\n cleanup()\n reject(error)\n }\n const cleanup = () => {\n process.stdin.off('data', onData)\n process.stdin.off('end', onEnd)\n process.stdin.off('error', onError)\n }\n const done = (value: Uint8Array | null) => {\n cleanup()\n resolve(value)\n }\n process.stdin.once('data', onData)\n process.stdin.once('end', onEnd)\n process.stdin.once('error', onError)\n })\n}\n\nfunction translateNodeError(error: unknown, path?: string): HostError {\n if (error instanceof HostError) return error\n const code = (error as { code?: string }).code\n const kind = code === 'ENOENT'\n ? 'NotFound'\n : code === 'EACCES' || code === 'EPERM'\n ? 'PermissionDenied'\n : code === 'EEXIST'\n ? 'AlreadyExists'\n : code === 'EINVAL'\n ? 'InvalidInput'\n : 'Unknown'\n return new HostError(kind, error instanceof Error ? error.message : String(error), path, error)\n}\n\nfunction normalizePlatform(value: string): string {\n return value === 'win32' ? 'windows' : value === 'darwin' ? 'macos' : value\n}\n\nfunction normalizeArch(value: string): string {\n return value === 'x64' ? 'x86_64' : value === 'arm64' ? 'aarch64' : value\n}\n","import process from 'node:process'\nimport { fileURLToPath } from 'node:url'\nimport { dirname, resolve } from 'node:path'\nimport { runCli } from '../main.ts'\nimport { buildDistributionPolicy, installHost, TOOL_ENVIRONMENT_NAMES } from './host.ts'\nimport { NodeHost } from './host_node.ts'\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..')\nconst environment = Object.fromEntries(\n TOOL_ENVIRONMENT_NAMES.map((name) => [name, process.env[name]]),\n)\nconst policy = buildDistributionPolicy({\n distribution: 'developer',\n argv: process.argv.slice(2),\n cwd: process.cwd(),\n packageRoot,\n homeDir: process.env.HOME ?? process.env.USERPROFILE ?? process.cwd(),\n environment,\n path: await import('node:path'),\n})\nconst host = new NodeHost(policy)\ninstallHost(host)\nhost.setExitCode(await runCli(host, process.argv.slice(2)))\n"],"names":["property","value","consumed","object","host","packageRoot","environment","summary","dirname","isAbsolute","join","resolve","token","module","command","EMPTY_INPUT","OBJECT_OUTPUT","optionalString","rpcOptions","expectObject","expectString","milliseconds","CONTROL_PANEL","buckyos","invalidResponse","relative","text","offset","view","stat","commentLength","realDirectory","basename","OBJECT_ID","normalizeArch","open","VERSION","resolveFromCwd","sourceSummary","packageMeta","info","abortableSleep","isObject","listCommand","getCommand","cancelCommand","statusCommand","gatewayOrigin","id","body","policy","exportCommand","compact","queryCommand","pageSchema","operation","readCommand","setup","nodeCreateHash","zlibConstants"],"mappings":";;;;;;;;;;;;;;;AAqEO,SAAS,eAAe,QAAkC;AAC/D,SAAO,OAAO,YAAY,OAAO,KAAK,WAAW,KAAK,GAAG;AAC3D;ACvEO,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AAEtB,MAAM,kBAAkB,MAAM;AAAA,EAMnC,YACE,MACA,SACA,WAAW,gBACX,YAAY,OACZ,UAAmC,IACnC;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AACF;AAEO,MAAM,mBAAmB,UAAU;AAAA,EACxC,YAAY,MAAc,SAAiB,UAAmC,CAAA,GAAI;AAChF,UAAM,MAAM,SAAS,YAAY,OAAO,OAAO;AAAA,EACjD;AACF;AAEA,MAAM,cAAc;AACpB,MAAM,yBAAyB;AAC/B,MAAM,uBACJ;AAEK,SAAS,gBAAgB,SAAyB;AACvD,SAAO,QACJ,WAAW,aAAa,kBAAkB,EAC1C,WAAW,wBAAwB,eAAe,EAClD,WAAW,sBAAsB,yBAAyB,EAC1D;AAAA,IACC;AAAA,IACA;AAAA,EAAA;AAEN;AAEO,SAAS,eAAe,OAA2B;AACxD,MAAI,iBAAiB,WAAW;AAC9B,WAAO,IAAI;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB,MAAM,OAAO;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EAEV;AAEA,QAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC3D,QAAA,UAAU,gBAAgB,GAAG;AAC7B,QAAA,QAAQ,QAAQ;AAEtB,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,QAAQ,GAAG;AACvD,WAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY;AAAA,EACrE;AACA,MAAI,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,WAAW,GAAG;AAC5D,WAAO,IAAI,UAAU,WAAW,uBAAuB,cAAc,IAAI;AAAA,EAC3E;AAEE,MAAA,MAAM,SAAS,mBAAmB,KAAK,MAAM,SAAS,eAAe,KACrE,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,qBAAqB,SAAS,eAAe;AAAA,EACpE;AACA,MACE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,cAAc,KACtE,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,iBAAiB,KACnE,MAAM,SAAS,eAAe,GAC9B;AACA,WAAO,IAAI;AAAA,MACT,MAAM,SAAS,SAAS,IAAI,oBAAoB;AAAA,MAChD,MAAM,SAAS,SAAS,IAAI,kCAAkC;AAAA,MAC9D;AAAA,IAAA;AAAA,EAEJ;AACA,MACE,MAAM,SAAS,cAAc,KAAK,MAAM,SAAS,oBAAoB,KACrE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,qBAAqB,KAC7E,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,uBAAuB,SAAS,kBAAkB,IAAI;AAAA,EAC7E;AACA,MAAI,MAAM,SAAS,WAAW,KAAK,MAAM,SAAS,eAAe,GAAG;AAClE,WAAO,IAAI,UAAU,sBAAsB,SAAS,cAAc;AAAA,EACpE;AACI,MAAA,MAAM,SAAS,iBAAiB,GAAG;AACrC,WAAO,IAAI,UAAU,oBAAoB,SAAS,cAAc;AAAA,EAClE;AACA,SAAO,IAAI,UAAU,kBAAkB,WAAW,kBAAkB,aAAa;AACnF;ACtGO,MAAM,iBAAiB,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAwCtE,MAAM,qCAAqB,IAAiC;AAAA,EAC1D,CAAC,cAAc,WAAW;AAAA,EAC1B,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,iBAAiB,cAAc;AAAA,EAChC,CAAC,sBAAsB,kBAAkB;AAAA,EACzC,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,SAAS,OAAO;AAAA,EACjB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,YAAY,SAAS;AAAA,EACtB,CAAC,mBAAmB,gBAAgB;AACtC,CAAC;AAED,MAAM,gDAAgC,IAAiC;AAAA,EACrE,CAAC,cAAc,WAAW;AAC5B,CAAC;AAED,MAAM,sCAAsB,IAAiC;AAAA,EAC3D,CAAC,OAAO,KAAK;AAAA,EACb,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,OAAO,KAAK;AAAA,EACb,CAAC,YAAY,SAAS;AAAA,EACtB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,WAAW,SAAS;AACvB,CAAC;AAED,MAAM,iDAAiC,IAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,MAAM,8BAAkC,oBAAA,IAAI,CAAC,QAAQ,KAAK,CAAC;AAEpD,SAAS,gBAAgB,MAA4B;AAC1D,QAAM,SAAwB,CAAA;AAC9B,MAAI,QAAQ;AACL,SAAA,QAAQ,KAAK,QAAQ;AACpB,UAAA,QAAQ,KAAK,KAAK;AACxB,QAAI,UAAU,MAAM;AACR,gBAAA,QAAQ,QAAQ,IAAI;AACrB,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,MAAM;AACT,eAAA;AACT;AAAA,IACF;AACI,QAAA,CAAC,MAAM,WAAW,IAAI;AAAG;AACvB,UAAA,SAAS,gBAAgB,KAAK;AACpC,UAAM,kBAAkB,gBAAgB,IAAI,OAAO,IAAI;AACvD,QAAI,iBAAiB;AACf,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACU,gBAAA,QAAQ,iBAAiB,IAAI;AAC9B,eAAA;AACT;AAAA,IACF;AACA,UAAM,iBAAiB,eAAe,IAAI,OAAO,IAAI;AACrD,UAAM,2BAA2B,0BAA0B,IAAI,OAAO,IAAI;AACtE,QAAA,CAAC,kBAAkB,CAAC,0BAA0B;AAChD,YAAM,IAAI,WAAW,kBAAkB,4BAA4B,OAAO,IAAI,EAAE;AAAA,IAClF;AACA,UAAM,EAAE,OAAO,aAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,QAAI,6BAA6B,aAAa;AAC5C,aAAO,YAAY,CAAC,GAAI,OAAO,aAAa,CAAA,GAAK,KAAK;AAAA,IAAA,OACjD;AACL,gBAAU,QAAQ,gBAAiB,qBAAqB,OAAO,MAAM,KAAK,CAAC;AAAA,IAC7E;AACS,aAAA;AAAA,EACX;AAEM,QAAA,SAAS,KAAK,KAAK;AACnB,QAAA,OAAO,KAAK,QAAQ,CAAC;AACrB,QAAA,aAAa,SAAS,KAAK,MAAM,SAAS,OAAO,IAAI,EAAE,IAAI;AAC7D,MAAA,QAAQ,WAAW,GAAG,GAAG;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iDAAiD,MAAM;AAAA,IAAA;AAAA,EAE3D;AACA,SAAO,EAAE,QAAQ,QAAQ,MAAM,WAAW;AAC5C;AAEO,SAAS,iBACd,SACA,MACA,aACA,yBAAyB,OACzB,kBAAkB,OACC;AACnB,QAAM,WAAoC,CAAA;AAC1C,QAAM,SAAwB,CAAA;AACxB,QAAA,cAAc,QAAQ,eAAe;AAC3C,QAAM,eAAe,IAAI,KAAK,QAAQ,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC,CAAC;AAC3F,MAAI,kBAAkB;AACtB,MAAI,OAAO;AAEX,WAAS,QAAQ,GAAG,QAAQ,KAAK,UAAS;AAClC,UAAA,QAAQ,KAAK,KAAK;AACpB,QAAA,UAAU,YAAY,UAAU,MAAM;AACjC,aAAA;AACE,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,MAAM;AAClB,iBAAW,mBAAmB,KAAK,MAAM,QAAQ,CAAC,GAAG;AACjC,0BAAA;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA;AAAA,IACF;AACA,QAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAC3B,wBAAkB,iBAAiB,UAAU,aAAa,iBAAiB,KAAK;AACvE,eAAA;AACT;AAAA,IACF;AAEM,UAAA,SAAS,gBAAgB,KAAK;AACpC,QAAI,0BAA0B,4BAA4B,IAAI,OAAO,IAAI,GAAG;AACtE,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACA,YAAMA,YAAW,gBAAgB,IAAI,OAAO,IAAI;AACtC,gBAAA,QAAQA,WAAU,IAAI;AACvB,eAAA;AACT;AAAA,IACF;AACA,QAAI,0BAA0B,2BAA2B,IAAI,OAAO,IAAI,GAAG;AACzE,YAAMA,YAAW,eAAe,IAAI,OAAO,IAAI;AACzC,YAAA,EAAE,OAAAC,QAAO,UAAAC,cAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,gBAAU,QAAQF,WAAU,qBAAqB,OAAO,MAAMC,MAAK,CAAC;AAC3DC,eAAAA;AACT;AAAA,IACF;AACA,QACE,2BACC,eAAe,IAAI,OAAO,IAAI,KAAK,0BAA0B,IAAI,OAAO,IAAI,KAC3E,gBAAgB,IAAI,OAAO,IAAI,IACjC;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,KAAK,OAAO,IAAI;AAAA,MAAA;AAAA,IAEpB;AAEA,UAAM,SAAS,aAAa,IAAI,OAAO,IAAI;AAC3C,QAAI,CAAC;AAAQ,YAAM,IAAI,WAAW,kBAAkB,qBAAqB,OAAO,IAAI,EAAE;AAChF,UAAA,WAAW,eAAe,MAAM;AACtC,QAAI,OAAO,OAAO,UAAU,QAAQ,GAAG;AACrC,YAAM,IAAI,WAAW,sBAAsB,qCAAqC,QAAQ,EAAE;AAAA,IAC5F;AACI,QAAA,OAAO,SAAS,WAAW;AACzB,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACA,eAAS,QAAQ,IAAI;AACZ,eAAA;AACT;AAAA,IACF;AACA,UAAM,EAAE,OAAO,aAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,aAAS,QAAQ,IAAI,iBAAiB,OAAO,MAAM,OAAO,OAAO,IAAI;AAC5D,aAAA;AAAA,EACX;AAEA,WAAS,QAAQ,iBAAiB,CAAC,mBAAmB,QAAQ,YAAY,QAAQ,SAAS;AACzF,QACE,YAAY,KAAK,EAAE,aAAa,SAChC,CAAC,OAAO,OAAO,eAAe,CAAA,GAAI,YAAY,KAAK,EAAE,IAAI,GACzD;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,YAAY,KAAK,EAAE,IAAI;AAAA,MAAA;AAAA,IAE3D;AAAA,EACF;AAEM,QAAA,QAAQ,kBAAkB,aAAa,QAAQ;AACrD,MAAI,CAAC;AAAgC,mBAAA,OAAO,QAAQ,aAAa,OAAO;AACjE,SAAA,EAAE,OAAO,QAAQ;AAC1B;AAEO,SAAS,cAAc,OAAuB;AACnD,QAAM,QAAQ,oBAAoB,KAAK,MAAM,KAAM,CAAA;AACnD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACA,QAAM,SAAS,OAAO,MAAM,CAAC,CAAC;AAC9B,QAAM,QAAQ,MAAM,CAAC,MAAM,OACvB,IACA,MAAM,CAAC,MAAM,MACb,MACA,MAAM,CAAC,MAAM,MACb,MACA;AACJ,QAAM,SAAS,SAAS;AACxB,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,UAAU,GAAG;AAChD,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACO,SAAA;AACT;AAEO,SAAS,eAAe,MAAwB;AACrD,QAAM,SAAmB,CAAA;AACzB,MAAI,UAAU;AACd,MAAI,QAAoC;AACxC,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,aAAW,aAAa,MAAM;AAC5B,QAAI,SAAS;AACA,iBAAA;AACD,gBAAA;AACA,gBAAA;AACV;AAAA,IACF;AACI,QAAA,cAAc,QAAQ,UAAU,UAAU;AAClC,gBAAA;AACA,gBAAA;AACV;AAAA,IACF;AACA,QAAI,UAAU,UAAU;AACtB,UAAI,cAAc;AAAa,gBAAA;AAAA;AACf,mBAAA;AAChB;AAAA,IACF;AACA,QAAI,UAAU,UAAU;AACtB,UAAI,cAAc;AAAa,gBAAA;AAAA;AACf,mBAAA;AAChB;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACb,cAAA;AACE,gBAAA;AACV;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACb,cAAA;AACE,gBAAA;AACV;AAAA,IACF;AACI,QAAA,KAAK,KAAK,SAAS,GAAG;AACxB,UAAI,SAAS;AACX,eAAO,KAAK,OAAO;AACT,kBAAA;AACA,kBAAA;AAAA,MACZ;AACA;AAAA,IACF;AACW,eAAA;AACD,cAAA;AAAA,EACZ;AACI,MAAA;AAAe,UAAA,IAAI,WAAW,wBAAwB,4BAA4B;AAClF,MAAA;AAAO,UAAM,IAAI,WAAW,wBAAwB,gBAAgB,KAAK,QAAQ;AACjF,MAAA;AAAS,WAAO,KAAK,OAAO;AACzB,SAAA;AACT;AAEgB,SAAA,eAAe,OAAgB,QAAoB,MAAoB;AACrF,MAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,cAAc,OAAO,GAAG,WAAW,KAAK,CAAC,GAAG;AAChF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,mBAAmB,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEpD;AACI,MAAA,OAAO,SAAS,UAAU;AACxB,QAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,oBAAoB;AAAA,IAC9E;AACA,UAAMC,UAAS;AACf,eAAW,YAAY,OAAO,YAAY,CAAA,GAAI;AAC5C,UAAI,CAAC,OAAO,OAAOA,SAAQ,QAAQ,GAAG;AACpC,cAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,IAAI,QAAQ,cAAc;AAAA,MACpF;AAAA,IACF;AACI,QAAA,OAAO,yBAAyB,OAAO;AACzC,iBAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACjC,YAAA,CAAC,OAAO,OAAO,OAAO,cAAc,CAAA,GAAI,GAAG,GAAG;AAChD,gBAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,IAAI,GAAG,iBAAiB;AAAA,QAClF;AAAA,MACF;AAAA,IACF;AACA,eAAW,CAAC,KAAK,aAAa,KAAK,OAAO,QAAQA,OAAM,GAAG;AACnD,YAAA,iBAAiB,OAAO,aAAa,GAAG;AAC1C,UAAA;AAAgB,uBAAe,eAAe,gBAAgB,GAAG,IAAI,IAAI,GAAG,EAAE;AAAA,IACpF;AACA;AAAA,EACF;AACI,MAAA,OAAO,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,IAC7E;AACA,QAAI,OAAO,OAAO;AAChB,YAAM,QAAQ,CAAC,MAAM,UAAU,eAAe,MAAM,OAAO,OAAQ,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;AAAA,IACzF;AACA;AAAA,EACF;AACI,MAAA,OAAO,SAAS,UAAU;AACxB,QAAA,OAAO,UAAU,UAAU;AAC7B,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,IAC7E;AACA,QAAI,OAAO,cAAc,UAAa,MAAM,SAAS,OAAO,WAAW;AACrE,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,eAAe;AAAA,IACzE;AACA;AAAA,EACF;AACA,MAAI,OAAO,SAAS,aAAa,OAAO,UAAU,WAAW;AAC3D,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,oBAAoB;AAAA,EAC9E;AACI,MAAA,OAAO,SAAS,cAAc,CAAC,OAAO,UAAU,KAAK,KAAK,OAAO,UAAU,WAAW;AACxF,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,qBAAqB;AAAA,EAC/E;AACA,MAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,EAC7E;AACF;AAEA,SAAS,iBACP,OACA,aACA,OACA,OACQ;AACF,QAAA,aAAa,YAAY,KAAK;AACpC,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,WAAW,sBAAsB,mCAAmC,KAAK,EAAE;AAAA,EACvF;AACM,QAAA,WAAW,IAAI,IAAI;AACzB,SAAO,QAAQ;AACjB;AAEA,SAAS,gBAAgB,OAAuD;AACxE,QAAA,UAAU,MAAM,MAAM,CAAC;AACvB,QAAA,aAAa,QAAQ,QAAQ,GAAG;AACtC,SAAO,aAAa,IAChB,EAAE,MAAM,YACR,EAAE,MAAM,QAAQ,MAAM,GAAG,UAAU,GAAG,aAAa,QAAQ,MAAM,aAAa,CAAC;AACrF;AAEA,SAAS,gBACP,MACA,OACA,QACqC;AACjC,MAAA,OAAO,gBAAgB,QAAW;AAChC,QAAA,CAAC,OAAO,aAAa;AACvB,YAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,mBAAmB;AAAA,IAC9E;AACA,WAAO,EAAE,OAAO,OAAO,aAAa,UAAU,EAAE;AAAA,EAClD;AACM,QAAA,QAAQ,KAAK,QAAQ,CAAC;AAC5B,MAAI,UAAU,UAAa,MAAM,WAAW,IAAI,GAAG;AACjD,UAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,mBAAmB;AAAA,EAC9E;AACO,SAAA,EAAE,OAAO,UAAU;AAC5B;AAEA,SAAS,iBAAiB,MAAc,OAAe,MAAuB;AAC5E,MAAI,SAAS;AAAiB,WAAA;AACxB,QAAA,SAAS,OAAO,KAAK;AACvB,MAAA,CAAC,OAAO,SAAS,MAAM,KAAM,SAAS,aAAa,CAAC,OAAO,UAAU,MAAM,GAAI;AACjF,UAAM,IAAI,WAAW,oBAAoB,KAAK,IAAI,eAAe,IAAI,EAAE;AAAA,EACzE;AACO,SAAA;AACT;AAEA,SAAS,kBACP,aACA,UACyB;AACzB,QAAM,SAAS,EAAE,GAAI,eAAe,CAAI,EAAA;AACxC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,QAAI,OAAO,OAAO,QAAQ,GAAG,GAAG;AAC9B,YAAM,IAAI,WAAW,qBAAqB,GAAG,GAAG,sCAAsC;AAAA,IACxF;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AACO,SAAA;AACT;AAEA,SAAS,qBAAqB,MAAc,OAAsC;AAChF,MAAI,SAAS,UAAU;AACrB,QAAI,CAAC,eAAe,SAAS,KAAqB,GAAG;AACnD,YAAM,IAAI,WAAW,yBAAyB,0BAA0B,KAAK,EAAE;AAAA,IACjF;AACO,WAAA;AAAA,EACT;AACO,SAAA;AACT;AAEA,SAAS,UACP,QACA,UACA,OACM;AACF,MAAA,OAAO,QAAQ,MAAM,QAAW;AAClC,UAAM,IAAI,WAAW,sBAAsB,mCAAmC,QAAQ,EAAE;AAAA,EAC1F;AACA,SAAO,QAAQ,IAAI;AACrB;AC5bO,MAAM,kBAAkB,MAAM;AAAA,EAInC,YAAY,MAAqB,SAAiB,MAAe,OAAiB;AAC1E,UAAA,SAAS,EAAE,MAAA,CAAO;AACxB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEgB,SAAA,YAAY,OAAgB,MAAyC;AAC5E,SAAA,iBAAiB,aAAa,MAAM,SAAS;AACtD;AA6IA,IAAI;AAEG,SAAS,YAAYC,OAAsB;AAChD,MAAI,cAAc,eAAeA;AAAY,UAAA,IAAI,MAAM,+BAA+B;AACzE,eAAAA;AACf;AAEO,SAAS,UAAoB;AAClC,MAAI,CAAC;AAAkB,UAAA,IAAI,MAAM,yCAAyC;AACnE,SAAA;AACT;AAMO,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAaO,SAAS,wBAAwB,SAA4C;AAClF,QAAM,EAAE,MAAM,KAAK,aAAAC,cAAa,SAAS,aAAAC,cAAa,KAAS,IAAA;AAC/D,QAAM,cAAc,KAAK;AAAA,IACvB,QAAQ,eAAeA,aAAY,gBAAgB,mBAAmB,OAAO;AAAA,EAAA;AAE/E,QAAM,aAAa,KAAK;AAAA,IACtBA,aAAY,2BAA2B,KAAK,KAAK,SAAS,eAAe;AAAA,EAAA;AAErE,QAAA,gCAAgB,IAAI;AAAA,IACxB,KAAK,QAAQD,YAAW;AAAA,IACxB,KAAK,QAAQ,GAAG;AAAA,IAChB;AAAA,IACA,KAAK,QAAQ,KAAK,KAAK,SAAS,UAAU,CAAC;AAAA,IAC3C,KAAK,QAAQ,KAAK,KAAK,SAAS,WAAW,CAAC;AAAA,EAAA,CAC7C;AACK,QAAA,iCAAiB,IAAI,CAAC,KAAK,QAAQ,GAAG,GAAG,UAAU,CAAC;AAC1D,MAAI,QAAQ,iBAAiB;AAAU,cAAU,IAAI,WAAW;AAE1D,QAAA,SAAS,qBAAqB,IAAI;AACxC,MACE,QAAQ,iBAAiB,YAAY,OAAO,WAAW,SACvD,CAAC,SAAS,SAAS,EAAE,SAAS,OAAO,QAAQ,EAAE,GAC/C;AACW,eAAA,IAAI,KAAK,KAAK,aAAa,SAAS,iBAAiB,gBAAgB,UAAU,CAAC;AAAA,EAC7F;AACA,aAAW,aAAa,OAAO;AAAM,cAAU,IAAI,iBAAiB,WAAW,KAAK,IAAI,CAAC;AAC9E,aAAA,aAAa,OAAO,aAAa;AAChC,cAAA,IAAI,KAAK,QAAQ,iBAAiB,WAAW,KAAK,IAAI,CAAC,CAAC;AAAA,EACpE;AACA,aAAW,aAAa,OAAO;AAAO,eAAW,IAAI,iBAAiB,WAAW,KAAK,IAAI,CAAC;AAChF,aAAA,aAAa,OAAO,cAAc;AAChC,eAAA,IAAI,KAAK,QAAQ,iBAAiB,WAAW,KAAK,IAAI,CAAC,CAAC;AAAA,EACrE;AACA,QAAM,eAAe,OAAO,WAAW,UAAU,CAAC,QAAQ,OAAO,EAAE,SAAS,OAAO,QAAQ,EAAE,IACzF,CAAC,QAAQ,IACT;AACJ,QAAM,UAAU,OAAO,WAAW,UAChC,CAAC,CAAC,QAAQ,WAAW,cAAc,UAAU,WAAW,EAAE,SAAS,OAAO,MAAM;AAC5E,QAAA,qBAAqB,QAAQ,iBAAiB,cAChD,uBAAuB,OAAO,CAAC,SAAS,SAAS,cAAc,IAC/D;AAEJ,SAAO,OAAO,OAAO;AAAA,IACnB,MAAM,QAAQ,iBAAiB,WAAW,mBAAmB;AAAA,IAC7D,cAAc,QAAQ;AAAA,IACtB,aAAa,KAAK,QAAQA,YAAW;AAAA,IACrC,WAAW,OAAO,OAAO,CAAC,GAAG,SAAS,CAAC;AAAA,IACvC,YAAY,OAAO,OAAO,CAAC,GAAG,UAAU,CAAC;AAAA,IACzC,aAAa,OAAO,OAAO,kBAAkB;AAAA,IAC7C,cAAc,OAAO,OAAO,YAAY;AAAA,IACxC;AAAA,IACA,GAAI,QAAQ,iBAAiB,WAAW,EAAE,gBAAgB,CAAC;AAAA,EAAA,CAC5D;AACH;AAEA,SAAS,mBAAmB,SAAgC;AACtD,MAAA,QAAQ,KAAK,QAAQ,MAAM;AAC7B,WAAO,QAAQ,YAAY,UACvB,QAAQ,KAAK,KAAK,QAAQ,YAAY,SAAS,SAAS,IACxD,QAAQ,KAAK,KAAK,QAAQ,SAAS,WAAW,WAAW,SAAS;AAAA,EACxE;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAe,KAAa,MAAwB;AACrE,SAAA,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK;AAC/E;AAEA,SAAS,qBAAqB,MAO5B;AACA,QAAM,OAAiB,CAAA;AACvB,QAAM,cAAwB,CAAA;AAC9B,QAAM,QAAkB,CAAA;AACxB,QAAM,eAAyB,CAAA;AAC3B,MAAA;AACA,MAAA;AACJ,MAAI,aAAa;AACX,QAAA,mCAAmB,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACK,QAAA,qCAAqB,IAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAC1C,UAAA,QAAQ,KAAK,KAAK;AACxB,QAAI,CAAC,UAAU,CAAC,MAAM,WAAW,GAAG,GAAG;AAC5B,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAG;AACtC,aAAA;AACP;AAAA,IACF;AACI,QAAA,MAAM,WAAW,IAAI,GAAG;AACpB,YAAA,QAAQ,MAAM,QAAQ,GAAG;AAC/B,YAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,IAAI,SAAY,KAAK;AACrD,UAAA,eAAe,IAAI,IAAI;AAAG;AAC9B,YAAM,SAAS,QAAQ,IAAI,SAAY,MAAM,MAAM,QAAQ,CAAC;AAC5D,YAAM,QAAQ,UAAU,KAAK,QAAQ,CAAC;AACtC,UAAI,WAAW,UAAa,UAAU,UAAa,CAAC,MAAM,WAAW,IAAI;AAAG;AAC5E,UAAI,UAAU;AAAW;AACzB,UAAI,SAAS,cAAc;AACzB,aAAK,KAAK,KAAK;AACf,cAAM,KAAK,KAAK;AAAA,MAAA,WACP,SAAS,cAAc;AAChC,aAAK,KAAK,KAAK;AAAA,MAAA,WACN,CAAC,SAAS,sBAAsB,MAAM,EAAE,SAAS,IAAI,GAAG;AACjE,YAAI,UAAU;AAAK,eAAK,KAAK,KAAK;AAAA,MACzB,WAAA,SAAS,YAAY,WAAW,QAAQ;AACjD,aAAK,KAAK,KAAK;AAAA,MAAA,WACN,SAAS,QAAQ;AAC1B,aAAK,KAAK,KAAK;AACX,YAAA,WAAW,SAAS,SAAS;AAAS,gBAAM,KAAK,KAAK;AAAA,MAAA,WACjD,SAAS;AAAQ,cAAM,KAAK,KAAK;AAAA,eACnC,SAAS,aAAa,WAAW,SAAS,SAAS;AAAW,aAAK,KAAK,KAAK;AAAA,eAC7E,SAAS,UAAU,WAAW,mBAAmB,SAAS,YAAY;AAC7E,aAAK,KAAK,KAAK;AAAA,MACN,WAAA,SAAS,UAAU,WAAW,aAAa;AAEpD,aAAK,KAAK,KAAK;AACf,YAAI,SAAS;AAAY,gBAAM,KAAK,KAAK;AAAA,MAChC,WAAA,SAAS,sBAAsB,WAAW,aAAa;AAEhE,oBAAY,KAAK,KAAK;AACtB,YAAI,SAAS;AAAY,uBAAa,KAAK,KAAK;AAAA,MACvC,WAAA,CAAC,aAAa,IAAI,IAAI;AAAG;AACpC;AAAA,IACF;AACI,QAAA,WAAW,SAAS,CAAC,SAAS,SAAS,EAAE,SAAS,QAAQ,EAAE,KAAK,iBAAiB,GAAG;AACnF,UAAA,CAAC,gBAAgB,KAAK,KAAK;AAAG,aAAK,KAAK,KAAK;AAAA,IAAA,WACxC,WAAW,WAAW,SAAS,aAAa,iBAAiB,GAAG;AACzE,WAAK,KAAK,KAAK;AAAA,IACN,WAAA,WAAW,UAAU,iBAAiB,GAAG;AAClD,WAAK,KAAK,KAAK;AACX,UAAA,SAAS,UAAU,SAAS;AAAQ,cAAM,KAAK,KAAK;AAAA,eAC/C,SAAS,WAAW,SAAS;AAAS,qBAAa,KAAK,KAAK;AAAA,IACxE;AAAA,EACF;AACA,SAAO,EAAE,MAAM,aAAa,OAAO,cAAc,QAAQ;AAC3D;AAEO,SAAS,WAAWD,OAAyC;AAC3D,SAAA;AAAA,IACL,YAAYA,MAAK;AAAA,IACjB,oBAAoBA,MAAK;AAAA,IACzB,cAAcA,MAAK,OAAO;AAAA,IAC1B,QAAQA,MAAK,OAAO;AAAA,IACpB,MAAMA,MAAK;AAAA,IACX,SAASA,MAAK;AAAA,IACd,iBAAiBA,MAAK;AAAA,IACtB,UAAUA,MAAK;AAAA,IACf,MAAMA,MAAK;AAAA,IACX,cAAcA,MAAK,OAAO;AAAA,IAC1B,YAAY,CAAC,GAAGA,MAAK,OAAO,SAAS;AAAA,IACrC,aAAa,CAAC,GAAGA,MAAK,OAAO,UAAU;AAAA,IACvC,aAAa,CAAC,GAAGA,MAAK,OAAO,WAAW;AAAA,IACxC,cAAc,CAAC,GAAGA,MAAK,OAAO,YAAY;AAAA,IAC1C,SAASA,MAAK,OAAO;AAAA,EAAA;AAEzB;AAEsB,eAAA,yBACpBA,QAAiB,WACwB;AACzC,QAAM,OAAOA,MAAK,KAAK,KAAKA,MAAK,OAAO,aAAa,mBAAmB;AACpE,MAAA;AACF,UAAM,QAAQ,KAAK,MAAM,MAAMA,MAAK,aAAa,IAAI,CAAC;AAC/C,WAAA,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC7D,QACA;AAAA,WACG,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACrC,UAAA;AAAA,EACR;AACF;AAEO,SAAS,yBACd,UACgC;AAChC,MAAI,CAAC;AAAiB,WAAA;AACtB,QAAM,EAAE,WAAW,OAAO,GAAGG,aAAY;AAClC,SAAA;AAAA,IACL,GAAGA;AAAA,IACH,gBAAgB,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS;AAAA,EAAA;AAE1D;AClaA,MAAMC,YAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAMC,eAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAMC,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAMC,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAqDhE,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,eAAe;AACrB,MAAM,qBAAqB;AAEpB,MAAM,YAAY;AAAA,EAGvB,YAAY,MAAc;AACnB,SAAA,OAAOA,UAAQ,IAAI;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAkC;AACtC,WAAO,MAAM,KAAK,UAAsBD,OAAK,KAAK,MAAM,aAAa,GAAG;AAAA,MACtE,gBAAgB;AAAA,IAAA,CACjB;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,MAAkD;AAClE,wBAAoB,IAAI;AACxB,WAAO,MAAM,KAAK,UAAyB,KAAK,YAAY,IAAI,GAAG,MAAS;AAAA,EAC9E;AAAA,EAEA,MAAM,eAAkC;AACtC,UAAM,YAAYA,OAAK,KAAK,MAAM,UAAU;AACxC,QAAA;AACF,YAAM,QAAkB,CAAA;AACxB,iBAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,SAAS,GAAG;AACtD,YAAI,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,GAAG;AAChD,gBAAM,OAAO,MAAM,KAAK,MAAM,GAAG,EAAE;AAC/B,cAAA,aAAa,KAAK,IAAI;AAAG,kBAAM,KAAK,IAAI;AAAA,QAC9C;AAAA,MACF;AACA,aAAO,MAAM;aACN,OAAO;AACV,UAAA,YAAY,OAAO,UAAU;AAAG,eAAO;AACrC,YAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAAmC;AACnD,uBAAmB,QAAQ,aAAa;AACxC,UAAM,KAAK,aAAaA,OAAK,KAAK,MAAM,aAAa,GAAG,MAAM;AAAA,EAChE;AAAA,EAEA,MAAM,aAAa,MAAc,SAAuC;AACtE,wBAAoB,IAAI;AACF,0BAAA,SAAS,YAAY,IAAI,OAAO;AACtD,UAAM,KAAK,aAAa,KAAK,YAAY,IAAI,GAAG,OAAO;AAAA,EACzD;AAAA,EAEA,YAAY,MAAsB;AAChC,wBAAoB,IAAI;AACxB,WAAOA,OAAK,KAAK,MAAM,YAAY,GAAG,IAAI,OAAO;AAAA,EACnD;AAAA,EAEA,cAAsB;AACpB,WAAOA,OAAK,KAAK,MAAM,SAAS,cAAc;AAAA,EAChD;AAAA,EAEA,MAAM,UAAa,MAAc,SAAoC;AAC/D,QAAA;AACI,YAAA,SAAS,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACxD,UAAA,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAClE,cAAM,IAAI,WAAW,kBAAkB,GAAG,IAAI,6BAA6B;AAAA,MAC7E;AACK,UAAA,OAAmC,mBAAmB,GAAG;AAC5D,cAAM,IAAI;AAAA,UACR;AAAA,UACA,GAAG,IAAI;AAAA,QAAA;AAAA,MAEX;AACI,UAAA,KAAK,SAAS,aAAa,KAAK,CAAC,KAAK,SAAS,YAAY,GAAG;AAChE,2BAAmB,QAAsB,IAAI;AAAA,MAAA,OACxC;AACL,8BAAsB,QAAyB,IAAI;AAAA,MACrD;AACO,aAAA;AAAA,aACA,OAAO;AACd,UAAI,YAAY,OAAO,UAAU,KAAK,YAAY;AAAkB,eAAA;AACpE,UAAI,iBAAiB,aAAa;AAChC,cAAM,IAAI,WAAW,kBAAkB,GAAG,IAAI,oBAAoB;AAAA,MACpE;AACM,YAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAc,OAA+B;AAC9D,UAAMN,QAAO;AACP,UAAAA,MAAK,MAAMI,UAAQ,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAA,CAAO;AAC1D,UAAA,YAAY,GAAG,IAAI,QAAQJ,MAAK,GAAG,IAAI,OAAO,WAAA,CAAY;AAChE,UAAM,OAAO,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA;AAC1C,QAAA;AACI,YAAAA,MAAK,cAAc,WAAW,MAAM,EAAE,MAAM,KAAO,WAAW,KAAA,CAAM;AACpE,YAAAA,MAAK,OAAO,WAAW,IAAI;AACjC,UAAIA,MAAK,aAAa;AAAiB,cAAAA,MAAK,MAAM,MAAM,GAAK;AAAA,aACtD,OAAO;AACV,UAAA;AACI,cAAAA,MAAK,OAAO,SAAS;AAAA,eACpB,cAAc;AAAA,MAEvB;AACM,YAAA;AAAA,IACR;AAAA,EACF;AACF;AAEA,eAAsB,cACpB,UACAE,eAA2B,mBAC3B,UAAqE,CAAA,GACV;AAC3D,QAAM,MAAM,QAAQ,OAAO,UAAU,IAAI;AACnC,QAAA,UAAU,QAAQ,WAAWA,aAAY,QAAQA,aAAY,eACjE,UAAU;AACZ,QAAM,YAAY,kBAAkB,UAAUA,cAAa,KAAK,OAAO;AACjE,QAAA,QAAQ,IAAI,YAAY,SAAS;AACjC,QAAA,SAAS,MAAM,MAAM;AAC3B,QAAM,cAAc,SAAS,WAAWA,aAAY,wBAAwB,OAAO;AACnF,QAAM,UAAU,cAAc,MAAM,MAAM,YAAY,WAAW,IAAI;AACjE,MAAA,eAAe,CAAC,SAAS;AAC3B,UAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AAAA,EAC/E;AAEA,QAAM,UAAkC;AAAA,IACtC,YAAY;AAAA,MACV,SAAS;AAAA,MACTA,aAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEF,QAAM,OAAO;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,WAAW;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,WAAW;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEE,MAAA;AACJ,MAAI,QAAQ,eAAe,SAAS,WAAW,QAAW;AAC/C,aAAA;AACT,YAAQ,SAAS;AAAA,EAAA,OACZ;AACI,aAAA;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT,SAASA,aAAY,mBAAmB;AAAA,MACxC,SAAS;AAAA,MACT,OAAO,UAAU;AAAA,MACjB;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,kBAAkB,SAAS,oBAAoB,cAAc,QAAQ,KAAK;AAChF,QAAM,YAAY,SAAS,UAAU,cAAc,SAAS,OAAO,IAAI;AAEnE,MAAA;AAAU,qBAAiB,QAAQ;AACjC,QAAA,eAAe,SAAS,gBAAgBA,aAAY;AACtD,MAAA;AAAsB,YAAA,gBAAgB,SAAS,eAAe,aAAa;AAC/E,MAAI,aAAa;AACf,YAAQ,UAAU,SAAS,UACvB,aACAA,aAAY,uBACZ,gBACA;AAAA,EACN;AAEO,SAAA;AAAA,IACL;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB,SAAS;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,SAAS;AAAA,MAClB,gBAAgB,SAAS;AAAA,MACzB,MAAM,SAAS,QAAQ;AAAA,MACvB,gBAAgB,SAAS,kBAAkB;AAAA,MAC3C,KAAK,SAAS,OAAO;AAAA,MACrB,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS,SAAS,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEO,SAAS,kBACd,UACAA,cACA,MAAM,QAAA,EAAU,IAAI,GACpB,UAAUA,aAAY,QAAQA,aAAY,eAAe,QAAQ,EAAE,WAC3D;AACR,QAAM,QAAQ,SAAS,aAAaA,aAAY,2BAC9CI,OAAK,SAAS,eAAe;AAC/B,SAAOD,aAAW,KAAK,IAAI,QAAQE,UAAQ,KAAK,KAAK;AACvD;AAEO,SAAS,oBACd,UACAL,eAA2B,mBAC3B,UAAqE,CAAA,GACnB;AAClD,QAAM,MAAM,QAAQ,OAAO,UAAU,IAAI;AACnC,QAAA,UAAU,QAAQ,WAAWA,aAAY,QAAQA,aAAY,eACjE,UAAU;AACZ,QAAM,YAAY,kBAAkB,UAAUA,cAAa,KAAK,OAAO;AACvE,QAAM,SAAS,QAAQ,eAAe,SAAS,WAAW,SACtD,UACA,SAAS,UAAU,SAASA,aAAY,mBAAmB,KAAK;AAC7D,SAAA;AAAA,IACL,OAAO,IAAI,YAAY,SAAS;AAAA,IAChC,UAAU;AAAA,MACR;AAAA,MACA,aAAa,SAAS,WAAWA,aAAY;AAAA,MAC7C,MAAM,SAAS,QAAQA,aAAY;AAAA,MACnC,UAAU,SAAS,YAAYA,aAAY;AAAA,MAC3C,UAAU,SAAS,YAAYA,aAAY;AAAA,MAC3C,cAAc,SAAS,gBAAgBA,aAAY;AAAA,MACnD,kBAAkB,SAAS;AAAA,MAC3B;AAAA,MACA,iBAAiB,cAAc,SAAS,YAAYA,aAAY,qBAAqB,KACnF;AAAA,MACF,WAAW,SAAS,UAAU,cAAc,SAAS,OAAO,IAAI;AAAA,MAChE,SAAS,SAAS;AAAA,MAClB,gBAAgB,SAAS;AAAA,MACzB,MAAM,SAAS,QAAQ;AAAA,MACvB,gBAAgB,SAAS,kBAAkB;AAAA,MAC3C,KAAK,SAAS,OAAO;AAAA,MACrB,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACTA,aAAY;AAAA,UACZ;AAAA,UACA;AAAA,QACF;AAAA,QACA,QAAQ,SAAS,SACb,aACAA,aAAY,sBACZ,gBACA;AAAA,MACN;AAAA,IACF;AAAA,EAAA;AAEJ;AAEO,SAAS,kBAA+B;AACvC,QAAA,UAAU,UAAU,OAAO;AACjC,SAAO,OAAO;AAAA,IACZ,kBAAkB,IAAI,CACpB,SACG,CAAC,MAAM,QAAQ,SAAS,IAAI,IAAI,QAAU,EAAA,IAAI,IAAI,IAAI,MAAS,CAAC;AAAA,EAAA;AAEzE;AAEO,SAAS,oBAAoB,QAAiD;AAC5E,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO,eAAe;AAAA,IAC/B,MAAM,OAAO,QAAQ;AAAA,IACrB,UAAU,UAAU,OAAO,QAAQ;AAAA,IACnC,UAAU,OAAO,YAAY;AAAA,IAC7B,eAAe,OAAO,gBAAgB;AAAA,IACtC,eAAe,OAAO,eAAe,iBAAiB;AAAA,IACtD,QAAQ,OAAO;AAAA,IACf,kBAAkB,OAAO;AAAA,IACzB,YAAY,OAAO;AAAA,IACnB,eAAe,OAAO,gBAAgB,OAAO,mBACzC;AAAA,MACA,SAAS;AAAA,MACT,QAAQ,OAAO,QAAQ,kBAAkB,OAAO,mBAAmB,SAAS;AAAA,MAC5E,SAAS;AAAA,IAAA,IAET,EAAE,SAAS,MAAM;AAAA,IACrB,SAAS,OAAO;AAAA,EAAA;AAEpB;AAEO,SAAS,oBAAoB,MAAoB;AACtD,MAAI,CAAC,aAAa,KAAK,IAAI,GAAG;AAC5B,UAAM,IAAI,WAAW,wBAAwB,yBAAyB,IAAI,EAAE;AAAA,EAC9E;AACF;AAEA,SAAS,mBAAmB,QAAoB,QAAsB;AAChE,MAAA,OAAO,mBAAmB,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,IAAA;AAAA,EAEb;AACA,MAAI,OAAO,oBAAoB;AAAW,wBAAoB,OAAO,eAAe;AACpF,MAAI,OAAO,WAAW;AAAoB,aAAA,OAAO,QAAQ,MAAM;AAC/D,oBAAkB,QAA8C;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,KACC,MAAM;AACX;AAEA,SAAS,sBAAsB,SAAwB,QAAsB;AACvE,MAAA,QAAQ,mBAAmB,GAAG;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,IAAA;AAAA,EAEb;AACA,MAAI,QAAQ,WAAW;AAAoB,aAAA,QAAQ,QAAQ,MAAM;AAE/D,MAAA,QAAQ,qBAAqB,UAC7B,CAAC,CAAC,WAAW,UAAU,EAAE,SAAS,QAAQ,gBAAgB,GAC1D;AACA,UAAM,IAAI,WAAW,kBAAkB,GAAG,MAAM,+CAA+C;AAAA,EACjG;AACA,MAAI,QAAQ;AAAU,qBAAiB,QAAQ,QAAQ;AACvD;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,QAAQ,YAAY,YAAY,oBAAoB,QAAQ;AAAA,IAC/E;AAAA,EAAA;AAEJ;AAEA,SAAS,kBACP,OACA,SACA,QACM;AACA,QAAA,aAAa,IAAI,IAAI,OAAO;AAClC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC;AACnE,MAAA,QAAQ,SAAS,GAAG;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM,iCAAiC,QAAQ,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEhE;AACF;AAEA,SAAS,SACP,OACA,SAAS,uBACiB;AAC1B,MAAI,UAAU;AAAkB,WAAA;AAC5B,MAAA,CAAC,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK,EAAE,SAAS,KAAK,GAAG;AAC9D,UAAM,IAAI,WAAW,yBAAyB,GAAG,MAAM,+BAA+B,KAAK,EAAE;AAAA,EAC/F;AACO,SAAA;AACT;AAEA,SAAS,OACP,MACA,UACAA,cACA,SACA,UACA,SACe;AACf,MAAI,aAAa,QAAW;AAC1B,YAAQ,IAAI,IAAI;AACT,WAAA;AAAA,EACT;AACA,MAAIA,iBAAgB,QAAW;AAC7B,YAAQ,IAAI,IAAI;AACT,WAAAA;AAAA,EACT;AACA,MAAI,YAAY,QAAW;AACzB,YAAQ,IAAI,IAAI;AACT,WAAA;AAAA,EACT;AACA,MAAI,aAAa;AAAW,YAAQ,IAAI,IAAI;AACrC,SAAA;AACT;AAEA,SAAS,SACP,UACAA,cACA,SACA,UACQ;AACD,SAAA,aAAa,SAChB,aACAA,iBAAgB,SAChB,gBACA,YAAY,SACZ,YACA;AACN;AAEA,SAAS,iBAAiB,OAAqB;AACzC,MAAA;AACA,MAAA;AACI,UAAA,IAAI,IAAI,KAAK;AAAA,EAAA,QACb;AACN,UAAM,IAAI,WAAW,oBAAoB,yBAAyB,KAAK,EAAE;AAAA,EAC3E;AACI,MAAA,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,GAAG;AACzC,UAAA,IAAI,WAAW,oBAAoB,iCAAiC;AAAA,EAC5E;AACF;AAEA,SAAS,cAAc,UAAkE;AACvF,MAAI,CAAC;AAAiB,WAAA;AACf,SAAA,SAAS,WAAW,SAAS,IAChC,YACA,SAAS,WAAW,UAAU,IAC9B,aACA;AACN;AAEA,SAAS,UAAU,OAA0C;AAC3D,MAAI,CAAC;AAAc,WAAA;AACf,MAAA;AACI,UAAA,MAAM,IAAI,IAAI,KAAK;AACrB,QAAA,IAAI,YAAY,IAAI,UAAU;AAChC,UAAI,WAAW;AACf,UAAI,WAAW;AAAA,IACjB;AACA,WAAO,IAAI;EAAS,QACd;AACC,WAAA;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,SAA4B;AAC3D,SAAO,IAAI,UAAU,wBAAwB,SAAS,CAAC;AACzD;AC5dO,MAAM,sBAAgD;AAAA,EAC3D,OAAO,IAAI,WAAW,MAAM;AAAA,EAE5B,MAAM,WACJ,QACA,SAC6B;AACvB,UAAA,gBAAgB,QAAQ;AACxB,UAAA,WAAW,gBAAgB,MAAM;AACjC,UAAA,aAAa,KAAK,KAAK;AAI7B,UAAM,WAAW,KAAK,KAAK,MAAM,cAAc,UAAU,OAAO;AAAA,MAC9D,OAAO,cAAc,UAAU;AAAA,MAC/B,aAAa,cAAc,UAAU;AAAA,MACrC,aAAa,YAAY;AAAA,MACzB;AAAA,MACA,iBAAiB,OAAO;AAAA,MACxB,cAAc,cAAc;AAAA,MAC5B,uBAAuB,CAAC;AAAA,MACxB,WAAW;AAAA,MACX,qBAAqB,kBAAkB,QAAQ,YAAY;AAAA,IAAA,CAC5D;AACM,WAAA;AAAA,MACL,MAAM,OAAO,QAAQ;AAAA,MACrB,UAAU,OAAO,YAAY,GAAG,OAAO,eAAe,GAAG,QAAQ;AAAA,MACjE,iBAAiB,OAAO;AAAA,IAAA;AAAA,EAE5B;AACF;AAEO,MAAM,6BAA8D;AAAA,EAChE;AAAA,EACA;AAAA,EACA,+BAAe;EAExB,YAAY,QAAwB,SAA4B;AAC9D,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,KACJ,SACA,QACA,QACA,SACY;AACZ,QAAI,SAAS,KAAK,SAAS,IAAI,OAAO;AACtC,QAAI,CAAC,QAAQ;AACX,YAAM,YAAY,QAAQ;AACjB,eAAA,IAAI,UAAU,kBAAkB,KAAK,SAAS,OAAO,GAAG,MAAM,MAAM;AAAA,QAC3E,sBAAsB,aAAa,MAAM,KAAK,SAAS,YAAe,GAAA;AAAA,MAAA,CACvE;AACI,WAAA,SAAS,IAAI,SAAS,MAAM;AAAA,IACnC;AACM,UAAA,UAAU,OAAO,KAAK,QAAQ,QAAQ,EAAE,SAAS,QAAQ,QAAA,CAAS;AACxE,WAAO,MAAM,aAAa,SAAS,QAAQ,WAAW,QAAQ,MAAM;AAAA,EACtE;AAAA,EAEA,MAAM,kBAAkB,SAAiB,QAA4C;AAC5E,WAAA,MAAM,QAAQ,kBAAkB,SAAS,EAAE,aAAa,KAAO,QAAQ;AAAA,EAChF;AACF;AAEO,MAAM,mBAAmB;AAAA,EAMtB,YACN,gBACA,SACA,YACA;AACA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,aAAa;AACb,SAAA,YAAY,KAAK;EACxB;AAAA,EAEA,aAAa,OACX,QACA,gBACA,UAA0B,IAAI,yBAC9B,SAC6B;AAC7B,UAAM,eAAe;AACrB,UAAM,aAAa,MAAM,QAAQ,WAAW,QAAQ,cAAc;AAClE,WAAO,IAAI;AAAA,MACT;AAAA,MACA,WAAW,IAAI,6BAA6B,QAAQ,cAAc;AAAA,MAClE;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,YAA2B;AACzB,UAAA,KAAK,eAAe;EAC5B;AACF;AAEgB,SAAA,kBAAkB,QAAwB,SAAyB;AACjF,MAAI,OAAO,UAAU;AACnB,UAAM,WAAW,IAAI,IAAI,OAAO,QAAQ;AACxC,UAAM,SAAS,SAAS,SAAS,QAAQ,QAAQ;AACjD,QAAI,UAAU;AAAY,eAAA,WAAW,GAAG,SAAS,SAAS,MAAM,GAAG,MAAM,CAAC,SAAS,OAAO;AAAA,aACjF,SAAS,SAAS,SAAS,OAAO,GAAG;AAC5C,eAAS,WAAW,GAAG,SAAS,QAAQ,IAAI,OAAO;AAAA,IACrD;AAAgB,eAAA,WAAW,GAAG,SAAS,SAAS,QAAQ,OAAO,EAAE,CAAC,SAAS,OAAO;AAClF,aAAS,SAAS;AAClB,aAAS,OAAO;AAChB,WAAO,SAAS,SAAW,EAAA,QAAQ,OAAO,EAAE;AAAA,EAC9C;AACM,QAAAF,QAAO,gBAAgB,MAAM;AACnC,SAAO,GAAG,OAAO,eAAe,GAAGA,KAAI,SAAS,OAAO;AACzD;AAEO,SAAS,gBAAgB,QAAgC;AAC9D,MAAI,OAAO,MAAM;AACX,QAAA;AACF,aAAO,QAAQ,IAAI,QAAQ,OAAO,IAAI,EAAE;IAAc,QAChD;AACN,YAAM,IAAI,WAAW,gBAAgB,6BAA6B,OAAO,IAAI,EAAE;AAAA,IACjF;AAAA,EACF;AACA,MAAI,OAAO;AAAU,WAAO,IAAI,IAAI,OAAO,QAAQ,EAAE;AAC/C,QAAA,IAAI,WAAW,uBAAuB,qDAAqD;AACnG;AAEsB,eAAA,aACpB,SACA,WACA,QACY;AACZ,MAAI,QAAQ;AAAS,UAAM,IAAI,UAAU,YAAY,sBAAsB,CAAC;AACxE,MAAA;AACA,MAAA;AACJ,QAAM,SAA2B;AAAA,IAC/B,IAAI,QAAQ,CAAC,GAAG,WAAW;AACjB,cAAA;AAAA,QACN,MAAM,OAAO,IAAI,UAAU,WAAW,uBAAuB,GAAG,IAAI,CAAC;AAAA,QACrE;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAAA;AAEH,MAAI,QAAQ;AACH,WAAA;AAAA,MACL,IAAI,QAAQ,CAAC,GAAG,WAAW;AACzB,uBAAe,MAAM,OAAO,IAAI,UAAU,YAAY,sBAAsB,CAAC,CAAC;AAC9E,eAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,MAAM;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,EAEL;AACI,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AAAA,EAAA,UAC9C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAC3C,QAAI,UAAU;AAAqB,aAAA,oBAAoB,SAAS,YAAY;AAAA,EAC9E;AACF;ACzMO,MAAM,oCAAoC;AA8BjD,eAAsB,0BACpB,QACkC;AAC9B,MAAA;AACI,UAAA,MAAM,kBAAkB,QAAQ,eAAe;AACrD,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACzC,UAAM,QAAQ,MAAM;AAAA,MAClB,OAAO,KAAc,uBAAuB,EAAE;AAAA,MAC9C,OAAO;AAAA,IAAA;AAEH,UAAA,SAAS,sBAAsB,KAAK;AAC1C,WAAO,OAAO,UACV,EAAE,OAAO,WAAW,QAAQ,OAAO,IACnC,EAAE,OAAO,YAAY,QAAQ,OAAO;AAAA,WACjC,OAAO;AACP,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAAA;AAAA,EAEjE;AACF;AAEO,SAAS,sBAAsB,OAAkC;AAClE,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACzD,UAAA,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,QAAM,SAAS;AACf,QAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK;AACtC,QAAM,eAAe,CAAC,WAAW,cAAc,cAAc,gBAAgB;AAC7E,MAAI,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,YAAY,GAAG;AACnD,UAAA,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACI,MAAA,OAAO,mBAAmB,mCAAmC;AAC/D,UAAM,IAAI,MAAM,+CAA+C,OAAO,OAAO,cAAc,CAAC,EAAE;AAAA,EAChG;AACI,MAAA,OAAO,OAAO,YAAY,WAAW;AACjC,UAAA,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAM,YAAY,OAAO;AACzB,QAAM,YAAY,OAAO;AACzB,QAAM,iBAAiB,OAAO,cAAc,SAAS,KAAM,YAAuB,KAChF,OAAO,cAAc,YAAY,UAAU,KAAA,EAAO,SAAS;AACvD,QAAA,mBAAmB,cAAc,QAAQ,cAAc;AACzD,MAAA,CAAC,kBAAkB,CAAC,kBAAkB;AAClC,UAAA,IAAI,MAAM,+EAA+E;AAAA,EACjG;AACI,MAAA,OAAO,WAAW,CAAC,gBAAgB;AAC/B,UAAA,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA;AAEhB;AAEA,eAAe,YAAe,SAAqB,WAA+B;AAC5E,MAAA;AACJ,QAAM,UAAU,IAAI,QAAe,CAAC,GAAG,WAAW;AACxC,YAAA,WAAW,MAAM,OAAO,IAAI,MAAM,iCAAiC,CAAC,GAAG,SAAS;AAAA,EAAA,CACzF;AACG,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,EAAA,UAC5C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAAA,EAC7C;AACF;ACjGA,MAAMM,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AAEjE,MAAM,8BAA8B;AA0B7B,MAAM,2BAA2B;AAC3B,MAAA,2BAA2B,OAAO,OAAO;AAAA,EACpD;AAAA,EACA;AACF,CAAC;AAoBD,eAAsB,4BACpB,QACAJ,eAA2B,mBACF;AAEvB,MAAA,OAAO,gBAAgB,OAAO,oBAAoB,OAAO,YAAY,OAAO,QAC5E,OAAO,UACP;AACO,WAAA;AAAA,EACT;AACM,QAAA,SAAS,MAAM,0BAA0BA,YAAW;AAC1D,MAAI,CAAC;AAAe,WAAA;AACb,SAAA;AAAA,IACL,GAAG;AAAA,IACH,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,IACV,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,IACrB,iBAAiB;AAAA,IACjB,wBAAwB;AAAA,IACxB,SAAS;AAAA,MACP,GAAG,OAAO;AAAA,MACV,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EAAA;AAEJ;AAEsB,eAAA,0BACpBA,eAA2B,mBACiD;AAC5E,MACE,QAAU,EAAA,OAAO,iBAAiB,eAAeA,aAAY,iBAAiB;AACvE,WAAA;AACT,QAAM,cAAcA,aAAY,gBAAgB,mBAAmBA,YAAW;AAC9E,QAAM,mBAAmBI,OAAK,aAAa,OAAO,oBAAoB;AAClE,MAAA;AACA,MAAA;AACF,YAAQ,KAAK,MAAM,MAAM,UAAU,aAAa,gBAAgB,CAAC;AAAA,WAC1D,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACvC,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sDAAsD,gBAAgB;AAAA,QACtE;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2CAA2C,gBAAgB;AAAA,MAC3D;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACA,QAAM,WAAW;AACX,QAAA,MAAM,eAAe,SAAS,UAAU;AACxC,QAAA,OAAO,eAAe,SAAS,WAAW;AAC1C,QAAA,UAAU,eAAe,SAAS,QAAQ;AAC5C,MAAA,SAAS,WAAW,8BAA8B,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;AAC/E,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACI,MAAA;AACM,YAAA,IAAI,QAAQ,GAAG;AACf,YAAA,IAAI,QAAQ,OAAO;AAAA,EAAA,QACrB;AACN,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAYA,OAAK,aAAa,SAAS,UAAU;AAAA,IACjD,cAAcA,OAAK,aAAa,UAAU;AAAA,EAAA;AAE9C;AAEO,SAAS,kBACd,QACAJ,eAA2B,mBAC3B,UAA+B,CAAA,GACX;AACpB,QAAM,SAAS,OAAO;AACtB,MAAI,QAAQ;AACV,WAAO,CAAC;AAAA,MACN,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AAEA,QAAM,OAAOA,aAAY,QAAQA,aAAY,eAAe,QAAA,EAAU;AACtE,QAAM,QAA4B,CAAA;AAC9B,MAAA,QAAQ,qBAAqB,MAAM;AACrC,UAAM,KAAK;AAAA,MACT,YAAYI,OAAK,MAAM,YAAY,SAAS,UAAU;AAAA,MACtD,cAAcA,OAAK,MAAM,YAAY,UAAU;AAAA,MAC/C,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AACI,MAAA,QAAQ,oBAAoB,OAAO;AACrC,UAAM,KAAK;AAAA,MACT,YAAYA,OAAK,MAAM,aAAa,SAAS,UAAU;AAAA,MACvD,cAAcA,OAAK,MAAM,aAAa,UAAU;AAAA,MAChD,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AACA,SAAO,iBAAiB,KAAK;AAC/B;AAEsB,eAAA,wBACpB,kBACA,QACAJ,eAA2B,gBAC3B,GAAA,UAA+B,IACJ;AACrB,QAAA,WAAW,iBAAiB;AAClC,MAAI,CAAC;AAAgB,UAAA,IAAI,WAAW,qBAAqB,mBAAmB;AAE5E,aAAW,SAAS,kBAAkB,QAAQA,cAAa,OAAO,GAAG;AACnE,eAAW,aAAa,MAAM,qBAAqB,MAAM,YAAY,QAAQ,GAAG;AAC9E,YAAM,WAAW,MAAM,qBAAqB,OAAO,WAAW,QAAQ;AAClE,UAAA;AAAiB,eAAA;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,wDAAwD,QAAQ;AAAA,IAChE;AAAA,EAAA;AAEJ;AAEA,eAAsB,uBACpB,QACAA,eAA2B,mBAC3B,UAA+B,CAAA,GACC;AAChC,QAAM,aAAkC,CAAA;AACxC,QAAM,UAA4C,CAAA;AAC5C,QAAA,2BAAW;AACjB,QAAM,QAAQ,kBAAkB,QAAQA,cAAa,OAAO;AAC5D,aAAW,QAAQ,OAAO;AACpB,QAAA;AACA,QAAA;AACF,oBAAc,MAAM,qBAAqB,KAAK,YAAY,EAAE;AAAA,aACrD,OAAO;AACV,UAAA,YAAY,OAAO,kBAAkB,GAAG;AAClC,gBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,YAAY,QAAQ,gBAAiB,CAAA;AACpF;AAAA,MACF;AACM,YAAA;AAAA,IACR;AACA,eAAW,aAAa,aAAa;AACnC,UAAI,WAAW,UAAU;AAA0B;AACnD,YAAM,eAAeI,OAAK,KAAK,YAAY,WAAW,UAAU;AAC5D,UAAA;AACF,cAAM,WAAW,MAAM,qBAAqB,MAAM,SAAS;AAC3D,YAAI,CAAC,UAAU;AACL,kBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,cAAc,QAAQ,aAAA,CAAc;AAC9E;AAAA,QACF;AACA,YAAI,KAAK,IAAI,SAAS,GAAG,GAAG;AAC1B,kBAAQ,KAAK;AAAA,YACX,QAAQ,KAAK;AAAA,YACb,UAAU,SAAS;AAAA,YACnB,MAAM;AAAA,YACN,QAAQ;AAAA,UAAA,CACT;AACD;AAAA,QACF;AACK,aAAA,IAAI,SAAS,GAAG;AACrB,mBAAW,KAAK,EAAE,UAAU,QAAQ,KAAK,QAAQ,WAAW;AAAA,eACrD,OAAO;AACV,YAAA,YAAY,OAAO,kBAAkB,GAAG;AAClC,kBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,cAAc,QAAQ,gBAAA,CAAiB;AACjF;AAAA,QACF;AACA,YAAI,iBAAiB,aAAa,MAAM,SAAS,+BAA+B;AAC9E,kBAAQ,KAAK;AAAA,YACX,QAAQ,KAAK;AAAA,YACb,UAAU,OAAO,MAAM,QAAQ,aAAa,WACxC,MAAM,QAAQ,WACd;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,UAAA,CACT;AACD;AAAA,QACF;AACM,cAAA;AAAA,MACR;AAAA,IACF;AACA,QAAI,WAAW,UAAU;AAA0B;AAAA,EACrD;AACO,SAAA;AAAA,IACL,OAAO,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;AAAA,IACrD,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,sBACpB,QACAJ,eAA2B,gBAAgB,GAC3C,uBAAuB,OACW;AAClC,MAAI,OAAO,UAAU;AACf,QAAA;AACF,YAAM,WAAW,MAAM,wBAAwB,OAAO,UAAU,QAAQA,cAAa;AAAA,QACnF,kBAAkB;AAAA,MAAA,CACnB;AACM,aAAA;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,GAAG;AAAA,QACpB,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,UACX,UAAU,SAAS;AAAA,UACnB,QAAQ,OAAO,QAAQ,YAAY;AAAA,UACnC,eAAe,SAAS;AAAA,QAAA,CACzB;AAAA,QACD,SAAS,CAAC;AAAA,MAAA;AAAA,aAEL,OAAO;AACP,aAAA;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,QACb,SAAS,CAAC;AAAA,UACR,UAAU,OAAO;AAAA,UACjB,QAAQ,iBAAiB,YAAY,MAAM,OAAO;AAAA,QAAA,CACnD;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;AACA,QAAM,OAAO,MAAM,uBAAuB,QAAQA,cAAa;AAAA,IAC7D,kBAAkB;AAAA,EAAA,CACnB;AACM,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,OAAO,KAAK;AAAA,IACZ,YAAY,KAAK,WAAW,IAAI,CAAC,eAAe;AAAA,MAC9C,UAAU,UAAU,SAAS;AAAA,MAC7B,QAAQ,UAAU;AAAA,MAClB,eAAe,UAAU,SAAS;AAAA,IAAA,EAClC;AAAA,IACF,SAAS,KAAK;AAAA,EAAA;AAElB;AAEA,eAAe,qBACb,OACA,WACA,UACuC;AACvC,QAAM,eAAeI,OAAK,MAAM,YAAY,WAAW,UAAU;AAC3D,QAAA,WAAW,MAAM,qBAAqB,YAAY;AACxD,MAAI,CAAC,YAAY,YAAY,CAAC,gBAAgB,UAAU,QAAQ;AAAU,WAAA;AAC1E,QAAM,MAAM,OAAO,SAAS,OAAO,WAAW,SAAS,KAAK;AAC5D,QAAM,UAAU,OAAO,SAAS,SAAS,YAAY,SAAS,KAAK,KAC/D,IAAA,SAAS,KAAK,KAAA,IACd;AACA,MAAA,CAAC,OAAO,CAAC;AAAgB,WAAA;AAE7B,QAAM,iBAAiBA,OAAK,MAAM,cAAc,WAAW,4BAA4B;AACnF,MAAA;AACF,UAAM,iBAAiB,MAAM,QAAA,EAAU,aAAa,cAAc,GAAG;AACrE,QAAI,CAAC;AAAsB,aAAA;AACpB,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,eAAe,OAAO,SAAS,gBAAgB,WAAW,WAAW;AAAA,MACrE,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,MAAM;AAAA,IAAA;AAAA,WAET,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AAEA,QAAM,aAAaA,OAAK,MAAM,cAAc,WAAW,4BAA4B;AAC/E,MAAA;AACI,UAAA,QAAU,EAAA,KAAK,UAAU;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,UAAU,KAAK,aAAa,WAAW;AAAA,IAAA;AAAA,WAEpC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACO,SAAA;AACT;AAEA,eAAe,qBAAqB,YAAoB,UAAqC;AACvF,MAAA,SAAS,WAAW,MAAM,GAAG;AAC3B,QAAA;AACF,aAAO,CAAC,QAAQ,IAAI,QAAQ,QAAQ,EAAE,YAAY;AAAA,IAAA,QAC5C;AACN,YAAM,IAAI,WAAW,oBAAoB,gBAAgB,QAAQ,EAAE;AAAA,IACrE;AAAA,EACF;AACA,QAAM,cAAwB,CAAA;AAC1B,MAAA;AACF,eAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,UAAU,GAAG;AACvD,UAAI,MAAM;AAAyB,oBAAA,KAAK,MAAM,IAAI;AAAA,IACpD;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG,aAAO;AACrC,UAAA;AAAA,EACR;AACA,SAAO,YAAY;AACrB;AAEA,eAAe,qBAAqB,MAAuD;AACrF,MAAA;AACI,UAAA,QAAQ,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACpD,WAAA,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC7D,QACA;AAAA,WACG,OAAO;AACd,QAAI,YAAY,OAAO,UAAU,KAAK,iBAAiB;AAAoB,aAAA;AACrE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,gBAAgB,UAAmC,UAA2B;AACrF,MAAI,OAAO,SAAS,OAAO,YAAY,SAAS,OAAO;AAAiB,WAAA;AACxE,SAAO,OAAO,SAAS,SAAS,YAAY,SAAS,SAAS;AAChE;AAEgB,SAAA,mBAAmBJ,eAA2B,mBAA2B;AACnF,MAAA,QAAA,EAAU,aAAa,WAAW;AACpC,UAAM,UAAUA,aAAY;AAC5B,WAAO,UAAUI,OAAK,SAAS,SAAS,IAAI;AAAA,EAC9C;AACO,SAAA;AACT;AAEA,SAAS,sBAAsB,MAAyB;AACtD,SAAO,IAAI;AAAA,IACT;AAAA,IACA,uCAAuC,IAAI;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,OAAoC;AACnD,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,iBAAiB,OAA+C;AACjE,QAAA,2BAAW;AACV,SAAA,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAM,MAAM,GAAG,KAAK,UAAU,KAAK,KAAK,YAAY;AAChD,QAAA,KAAK,IAAI,GAAG;AAAU,aAAA;AAC1B,SAAK,IAAI,GAAG;AACL,WAAA;AAAA,EAAA,CACR;AACH;ACjWA,MAAM,eAAe;AACrB,MAAM,0BAA0B,KAAK;AAE9B,MAAM,sBAAmD;AAAA,EAa9D,YACE,QACAJ,eAA2B,mBAC3B,eAA2C,CAAA,GAC3C;AANF,SAAA,oBAAgF;AAO9E,SAAK,SAAS;AACd,SAAK,eAAeA;AACpB,SAAK,aAAa,aAAa,aAAa,IAAI,2BAA2B;AACtE,SAAA,gBAAgB,aAAa,gBAAgB;AAC7C,SAAA,gBAAgB,aAAa,gBAAgB;AAC7C,SAAA,uBAAuB,aAAa,uBAAuB;AAC3D,SAAA,OAAO,aAAa,OAAO,KAAK;AAAA,EACvC;AAAA,EAvBS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBA,MAAM,UAAyC;AAC7C,QAAI,KAAK;AAAU,aAAO,KAAK;AAC/B,SAAK,WAAW,MAAM,KAAK,cAAc,KAAK;AAC9C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,cAA6C;AAC3C,UAAA,UAAU,MAAM,KAAK;AAC3B,UAAM,MAAM,YAAY,QAAQ,OAAO,GAAG;AAC1C,UAAM,aAAa,KAAK,MAAM,KAAK,KAAA,IAAS,GAAK;AAC7C,QAAA,QAAQ,UAAa,MAAM,aAAa;AAAW,aAAA;AACnD,QAAA,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,SAAK,WAAW,MAAM,KAAK,cAAc,IAAI;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,YAA2C;AAC/C,SAAK,WAAW,MAAM,KAAK,cAAc,IAAI;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgC;AAC1B,QAAA,CAAC,KAAK,UAAU;AAClB,YAAM,IAAI,UAAU,iBAAiB,8BAA8B,SAAS;AAAA,IAC9E;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAkC;AAC1B,UAAA,UAAU,KAAK;AACf,UAAA,YAAY,QAAQ,UAAU;AACpC,UAAM,MAAM,YAAY,QAAQ,OAAO,GAAG;AAC1C,UAAM,mBAAmB,QAAQ,SAC7B,OACA,KAAK,IAAI,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,GAAK,CAAC;AAC9C,WAAA;AAAA,MACL,eAAe;AAAA,MACf,WAAW,QAAQ,UAAU;AAAA,MAC7B,OAAO,QAAQ,UAAU;AAAA,MACzB,iBAAiB,QAAQ,UAAU,iBAAiB;AAAA,MACpD,gBAAgB,QAAQ,UAAU;AAAA,MAClC,WAAW,QAAQ;AAAA,MACnB,YAAY,aAAa;AAAA,MACzB,mBAAmB;AAAA,MACnB,gBAAgB,KAAK,kBAAkB,SAAS;AAAA,MAChD,mBAAmB,KAAK;AAAA,IAAA;AAAA,EAE5B;AAAA,EAEA,MAAM,cAAc,WAAmD;AACjE,QAAA,KAAK,OAAO,cAAc;AAC5B,YAAM,SAAS,KAAK,OAAO,QAAQ,kBAAkB,gBACjD,gBACA;AACJ,aAAO,gBAAgB,KAAK,OAAO,cAAc,QAAQ,KAAK,MAAM;AAAA,IACtE;AAEI,QAAA,KAAK,OAAO,kBAAkB;AAC5BM,UAAAA;AACA,UAAA;AACFA,kBAAS,MAAM,QAAQ,EAAE,aAAa,KAAK,OAAO,gBAAgB,GAAG;eAC9D,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,sCACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,UAAI,CAACA,QAAO;AACV,cAAM,IAAI,UAAU,yBAAyB,+BAA+B,SAAS;AAAA,MACvF;AACA,aAAO,gBAAgBA,QAAO,sBAAsB,KAAK,KAAM,CAAA;AAAA,IACjE;AAEA,UAAM,WAAW,KAAK,aAAa,iCAAiC,KAAK;AACrE,QAAA;AAAU,aAAO,gBAAgB,UAAU,eAAe,KAAK,KAAM,CAAA;AAEzE,QAAI,KAAK,mBAAmB;AACtB,UAAA,KAAK,kBAAkB,WAAW,iBAAiB;AACrD,cAAM,KAAK;MACb;AACA,aAAO,MAAM,KAAK,mBAAmB,KAAK,iBAAiB;AAAA,IAC7D;AAEI,QAAA,KAAK,OAAO,UAAU;AACxB,YAAM,WAAW,MAAM,KAAK,yBAAyB,KAAK,OAAO,QAAQ;AACzE,YAAM,UAAU,MAAM,KAAK,mBAAmB,QAAQ;AACtD,WAAK,oBAAoB;AAClB,aAAA;AAAA,IACT;AAEA,SAAK,oBAAoB;AACzB,UAAM,aAAa,MAAM,uBAAuB,KAAK,QAAQ,KAAK,YAAY;AAC9E,UAAM,oBAAoB,MAAM,KAAK,uBAAuB,WAAW,UAAU;AAC7E,QAAA;AAA0B,aAAA;AAExB,UAAA,kBAAkB,MAAM,KAAK;AACnC,QACE,gBAAgB,UAAU,aAC1B,WAAW,WAAW,SAAS,0BAC/B;AACA,YAAM,iBAAiB,IAAI;AAAA,QACzB,WAAW,WAAW,IAAI,CAAC,cAAc,UAAU,SAAS,GAAG;AAAA,MAAA;AAEjE,YAAM,YAAY,MAAM,uBAAuB,KAAK,QAAQ,KAAK,cAAc;AAAA,QAC7E,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,MAAA,CACnB;AACK,YAAA,YAAY,2BAA2B,WAAW,WAAW;AAC7D,YAAA,aAAa,UAAU,WAAW;AAAA,QAAO,CAAC,cAC9C,CAAC,eAAe,IAAI,UAAU,SAAS,GAAG;AAAA,MAAA,EAC1C,MAAM,GAAG,SAAS;AACpB,YAAM,mBAAmB,MAAM,KAAK,uBAAuB,UAAU;AACjE,UAAA;AAAyB,eAAA;AAAA,IAC/B;AACI,QAAA,KAAK,kBAAkB,SAAS,GAAG;AACrC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,OAAO,KAAK,kBAAkB,MAAM;AAAA,QACpC;AAAA,QACA;AAAA,QACA,EAAE,UAAU,KAAK,kBAAkB;AAAA,MAAA;AAAA,IAEvC;AAEI,QAAA,KAAK,OAAO,gBAAgB;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,WAAW,KAAK,OAAO,UAAU,WAAW,MAAM,IACpD,MAAM,KAAK,cAAc,YAAY,IACrC,KAAK,OAAO,YAAY,MAAM,KAAK,cAAc,YAAY;AAC7D,QAAA,CAAC,SAAS,KAAK;AAAG,YAAM,IAAI,UAAU,iBAAiB,wBAAwB,SAAS;AAC5F,UAAM,WAAW,MAAM,KAAK,cAAc,YAAY,2BAA2B,YAAY;AACvF,UAAA,QAAQ,MAAM,KAAK,WAAW;AAAA,MAClC,kBAAkB,KAAK,QAAQ,YAAY;AAAA,MAC3C,SAAS,KAAK;AAAA,MACd;AAAA,MACA,cAAc,SAAS,MAAM;AAAA,MAC7B,KAAK,OAAO;AAAA,IAAA;AAEd,WAAO,qBAAqB,OAAO,YAAY,MAAM,KAAK,MAAM;AAAA,EAClE;AAAA,EAEA,MAAM,yBAAyB,kBAAqD;AAC9E,QAAA,KAAK,OAAO,wBAAwB;AACtC,aAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,YAAY;AAAA,IACvF;AAEI,QAAA;AACF,aAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,YAAY;AAAA,aAC9E,OAAO;AACd,UAAI,EAAE,iBAAiB,cAAc,MAAM,SAAS;AAA4B,cAAA;AAAA,IAClF;AAEA,UAAM,KAAK;AACX,WAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,cAAc;AAAA,MACrF,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IAAA,CACnB;AAAA,EACH;AAAA,EAEA,MAAM,uBACJ,YAC2C;AAC3C,eAAW,aAAa,YAAY;AAC9B,UAAA;AACF,cAAM,UAAU,MAAM,KAAK,mBAAmB,UAAU,QAAQ;AAChE,aAAK,oBAAoB,UAAU;AAC5B,eAAA;AAAA,eACA,OAAO;AACV,YAAA,CAAC,oBAAoB,KAAK;AAAS,gBAAA;AACvC,aAAK,kBAAkB,KAAK;AAAA,UAC1B,UAAU,UAAU,SAAS;AAAA,UAC7B,MAAM,MAAM;AAAA,UACZ,SAAS,gBAAgB,MAAM,OAAO;AAAA,QAAA,CACvC;AAAA,MACH;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,UAA2D;AAClF,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,KAAK,KAAK;AAAA,IAAA;AAEN,UAAA,QAAQ,MAAM,KAAK,WAAW;AAAA,MAClC,kBAAkB,KAAK,QAAQ,YAAY;AAAA,MAC3C;AAAA,MACA,mBAAmB,SAAS,eAAe,SAAS,OAAO;AAAA,MAC3D,KAAK,OAAO;AAAA,IAAA;AAEd,WAAO,qBAAqB,OAAO,YAAY,MAAM,KAAK,MAAM;AAAA,EAClE;AAAA,EAEA,MAAM,wBAA0D;AAC9D,SAAK,mBAAmB,MAAM,KAAK,qBAAqB,KAAK,MAAM;AACnE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,kCAAiD;AAC/C,UAAA,WAAW,MAAM,KAAK;AAC5B,QAAI,SAAS,UAAU;AAAW;AAClC,SAAK,oBAAoB;AACrB,QAAA,SAAS,UAAU,YAAY;AACjC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,QAAQ,gBAAgB,SAAS,MAAM,EAAE;AAAA,IAAA;AAAA,EAE/C;AACF;AAEA,SAAS,oBAAoB,OAAoC;AAC/D,SAAO,iBAAiB,aAAa,yBAAyB,SAAS,MAAM,IAAI;AACnF;AAEO,MAAM,2BAA8D;AAAA,EACzE,MAAM,WACJ,KACA,KACA,QACA,WACiB;AACjB,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACzC,UAAM,WAAW,MAAM;AAAA,MACrB,IAAI,gBAAgB,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ;AAAA,MACtD;AAAA,IAAA;AAEF,QAAI,CAAC,SAAS;AAAqB,YAAA,IAAI,MAAM,sCAAsC;AACnF,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,gBACJ,KACA,UACA,UACA,QACA,WACiB;AACjB,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACnC,UAAA,YAAY,IAAI,gBAAgB,MAAM;AACtC,UAAA,QAAQ,KAAK;AACnB,cAAU,OAAO,KAAK;AACtB,UAAM,WAAW,MAAM;AAAA,MACrB,UAAU,gBAAgB;AAAA,QACxB;AAAA,QACA,UAAW,QAAQ,aAIN,UAAU,UAAU,KAAK;AAAA,QACtC;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,MACD;AAAA,IAAA;AAEI,UAAA,aAAa,gBAAgB,uBAAuB,QAAQ;AAClE,QAAI,CAAC,WAAW;AAAqB,YAAA,IAAI,MAAM,sCAAsC;AACrF,WAAO,WAAW;AAAA,EACpB;AACF;AAEA,SAAS,mBACP,eACA,SACY;AACL,SAAA,kBAAkB,WACrB,EAAE,MAAM,UAAU,YAAY,aAC9B,IAAA,cAAc,OAAO;AAC3B;AAEA,SAAS,cAAc,aAAiC;AAC/C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,oBAAoB,cAAc,WAAW;AAAA,EAAA;AAElE;AAEO,SAAS,qBACd,OACA,gBACA,WACA,QAAQ,KAAK,OACS;AAChB,QAAA,SAAS,YAAY,KAAK;AAC1B,QAAA,MAAM,YAAY,OAAO,GAAG;AAClC,QAAM,aAAa,KAAK,MAAM,QAAQ,GAAK;AACvC,MAAA,QAAQ,UAAa,OAAO,YAAY;AAC1C,UAAM,IAAI,UAAU,mBAAmB,iCAAiC,SAAS;AAAA,EACnF;AACA,QAAM,KAAK,YAAY,OAAO,GAAG,KAAK,YAAY,OAAO,MAAM;AAC/D,QAAM,QAAQ,YAAY,OAAO,KAAK,KAAK,YAAY,OAAO,GAAG;AAC7D,MAAA,CAAC,MAAM,CAAC,OAAO;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,gBAAgB,YAAY,OAAO,eAAe,KACtD,YAAa,OAAO,OAA+C,eAAe;AAC7E,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,QAAQ,SAAY,SAAY,IAAI,KAAK,MAAM,GAAK,EAAE,YAAY;AAAA,IACpF;AAAA,EAAA;AAEJ;AAEA,SAAS,gBACP,OACA,gBAIA,OACsB;AACtB,SAAO,qBAAqB,OAAO,gBAAgB,OAAO,KAAK;AACjE;AAEA,SAAS,YAAY,OAAwC;AACrD,QAAA,SAAS,wBAAwB,KAAK;AAC5C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,UAAU,yBAAyB,oCAAoC,SAAS;AAAA,EAC5F;AACO,SAAA;AACT;AAEA,eAAe,eACb,SACA,QACA,eACA,OACiB;AACjB,QAAM,MAAM,KAAK,MAAM,QAAQ,GAAK;AACpC,QAAM,SAAS,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK;AACjD,QAAM,UAAU;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,KAAK,OAAO,WAAW;AAAA,IACvB,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK,MAAM;AAAA,IACX,MAAM;AAAA,IACN,OAAO,CAAC;AAAA,EAAA;AAEV,QAAM,eAAe,GAAG,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC,IAAI,UAAU,KAAK,UAAU,OAAO,CAAC,CAAC;AACzF,QAAA,WAAW,SAAS,aAAa;AACnC,MAAA;AACA,MAAA;AACI,UAAA,MAAM,OAAO,OAAO;AAAA,MACxB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,EAAE,MAAM,UAAU;AAAA,MAClB;AAAA,MACA,CAAC,MAAM;AAAA,IAAA;AAAA,EACT,QACM;AACN,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,WAAW,KAAK,IAAI,YAAY,EAAE,OAAO,YAAY,CAAC;AAC1F,SAAA,GAAG,YAAY,IAAI,UAAU,IAAI,WAAW,SAAS,CAAC,CAAC;AAChE;AAEA,SAAS,SAAS,KAAyB;AACnC,QAAA,UAAU,IAAI,QAAQ,oBAAoB,EAAE,EAAE,WAAW,OAAO,EAAE;AAClE,QAAA,SAAS,KAAK,OAAO;AACpB,SAAA,WAAW,KAAK,QAAQ,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AACvE;AAEA,SAAS,UAAU,OAAoC;AAC/C,QAAA,QAAQ,OAAO,UAAU,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI;AAC5E,MAAI,SAAS;AACb,aAAW,QAAQ;AAAiB,cAAA,OAAO,aAAa,IAAI;AAC5D,SAAO,KAAK,MAAM,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,EAAE;AAClF;AAEA,SAAS,YAAY,OAAoC;AAChD,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,YAAY,OAAoC;AACvD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,eAAe,iBAAoB,SAAqB,WAA+B;AACjF,MAAA;AACJ,QAAM,UAAU,IAAI,QAAe,CAAC,GAAG,WAAW;AACxC,YAAA;AAAA,MACN,MAAM,OAAO,IAAI,UAAU,WAAW,4BAA4B,GAAG,IAAI,CAAC;AAAA,MAC1E;AAAA,IAAA;AAAA,EACF,CACD;AACG,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,EAAA,UAC5C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAAA,EAC7C;AACF;AAEA,eAAe,YAAY,QAAiC;AAC1D,UAAQ,MAAM,UAAU,SAAS,MAAM,IAAI,KAAU,KAAA;AACvD;AAEA,eAAe,WAAW,QAAiC;AACzD,MAAI,CAAC,UAAU,mBAAmB;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,WAAW,MAAM;AAAA,WACjC,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACrD;AAAA,IAAA;AAAA,EAEJ;AACF;ACzhBgB,SAAA,gBAAgB,MAAe,MAAqC;AAClF,SAAO,EAAE,gBAAgB,GAAG,IAAI,MAAM,MAAM;AAC9C;AAEgB,SAAA,cACd,OACA,MACe;AACR,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEgB,SAAA,cAAc,UAA2B,QAA8B;AACjF,MAAA,WAAW,UAAU,WAAW;AAAgB,WAAA,KAAK,UAAU,QAAQ;AAC3E,MAAI,WAAW,OAAO;AAChB,QAAA,OAAO,SAAS,SAAS;AAAgB,YAAA,IAAI,MAAM,qCAAqC;AAC5F,WAAO,SAAS;AAAA,EAClB;AACA,MAAI,WAAW;AAAe,WAAA,WAAW,SAAS,IAAI;AAC/C,SAAA,YAAY,SAAS,IAAI;AAClC;AAEgB,SAAA,YAAY,UAAyB,QAA8B;AACjF,MAAI,WAAW,UAAU,WAAW,WAAW,WAAW;AAAc,WAAA,KAAK,UAAU,QAAQ;AAC/F,QAAM,YAAY,SAAS,MAAM,YAAY,iBAAiB;AACvD,SAAA,GAAG,SAAS,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,MAAM,OAAO;AACtE;AAEA,SAAS,WAAW,MAAuB;AACzC,MAAI,OAAO,SAAS;AAAiB,WAAA;AACjC,MAAA,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,UAAMT,UAAS;AACX,QAAA,OAAOA,QAAO,WAAW;AAAU,aAAOA,QAAO;AACjD,QAAA,OAAOA,QAAO,SAAS;AAAU,aAAOA,QAAO;AAAA,EACrD;AACA,SAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACrC;AAEA,SAAS,YAAY,MAAuB;AACtC,MAAA,MAAM,QAAQ,IAAI;AAAG,WAAO,WAAW,IAAI;AAC3C,MAAA,QAAQ,OAAO,SAAS,UAAU;AACpC,UAAMA,UAAS;AACf,UAAM,aAAa,OAAO,QAAQA,OAAM,EAAE,KAAK,CAAC,CAAG,EAAA,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC;AAC9E,QAAA;AAAmB,aAAA,WAAW,WAAW,CAAC,CAAc;AAC5D,UAAM,OAAO,OAAO,QAAQA,OAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,OAAO,aAAa,KAAK,EAAI,EAAA;AAC/F,WAAO,WAAW,IAAI;AAAA,EACxB;AACO,SAAA,OAAO,QAAQ,EAAE;AAC1B;AAEA,SAAS,WAAW,MAAyB;AAC3C,MAAI,KAAK,WAAW;AAAU,WAAA;AAC9B,QAAM,UAAU,KAAK;AAAA,IAAI,CAAC,QACxB,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,IAChD,MACA,EAAE,OAAO,IAAI;AAAA,EAAA;AAEnB,QAAM,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,QAAQ,CAAC,QAAQ,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AACvE,QAAM,WAAW,QAAQ,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,WAAW,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC;AACxF,QAAM,SAAS,QAAQ;AAAA,IAAI,CAAC,QAAQ,UAClC,KAAK,IAAI,OAAO,QAAQ,GAAG,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,MAAM,CAAC;AAAA,EAAA;AAErE,QAAM,SAAS,QAAQ,IAAI,CAAC,QAAQ,UAAU,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAC/E,QAAA,YAAY,OAAO,IAAI,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI;AACpE,QAAM,OAAO,SAAS;AAAA,IAAI,CAAC,QACzB,IAAI,IAAI,CAAC,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAAA;AAElE,SAAO,CAAC,QAAQ,WAAW,GAAG,IAAI,EAAE,KAAK,IAAI;AAC/C;AAEA,SAAS,aAAa,OAAwB;AACxC,MAAA,UAAU,QAAQ,UAAU;AAAkB,WAAA;AAClD,MAAI,OAAO,UAAU;AAAiB,WAAA;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAW,WAAO,OAAO,KAAK;AACzE,SAAA,KAAK,UAAU,KAAK;AAC7B;AC5GA,MAAM,aAAa;AAEnB,MAAM,iBAAiB;AAAA,EACrB,EAAE,MAAM,cAAc,UAAU,aAAa,MAAM,UAAU,OAAO,UAAU;AAAA,EAC9E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,UAAU,OAAO,UAAU;AAAA,EACzE,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,UAAU,OAAO,UAAU;AAAA,EACnE,EAAE,MAAM,YAAY,UAAU,YAAY,MAAM,UAAU,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,YAAY,UAAU,YAAY,MAAM,UAAU,OAAO,UAAU;AAAA,EAC3E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,EAAE,MAAM,OAAO,UAAU,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,EAClE;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAAA,EAChD;AAAA,EACA,EAAE,MAAM,SAAS,UAAU,SAAS,MAAM,UAAU,OAAO,UAAU;AAAA,EACrE,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,YAAY,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,YAAY,UAAU,WAAW,MAAM,UAAU,OAAO,UAAU;AAAA,EAC1E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,WAAW,OAAO,UAAU;AAAA,EACpE;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,EAAE,MAAM,OAAO,UAAU,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,EAClE,EAAE,MAAM,YAAY,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAAA,EAC1E,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,WAAW,OAAO,UAAU;AAAA,EACpE,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAC5E;AAEA,MAAM,gDAAgC,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,gBAAgB;AAAA,EAC3B,+BAAe;EACf,gCAAgB;EAEhB,SAAS,QAA6B;AACpC,QAAI,CAAC,WAAW,KAAK,OAAO,IAAI,GAAG;AACjC,YAAM,IAAI,MAAM,wBAAwB,OAAO,IAAI,EAAE;AAAA,IACvD;AACA,QAAI,KAAK,SAAS,IAAI,OAAO,IAAI,GAAG;AAClC,YAAM,IAAI,MAAM,qBAAqB,OAAO,IAAI,EAAE;AAAA,IACpD;AACW,eAAA,cAAc,OAAO,UAAU;AACnC,WAAA,oBAAoB,OAAO,MAAM,UAAU;AAChD,YAAM,MAAM,GAAG,OAAO,IAAI,IAAI,WAAW,IAAI;AACzC,UAAA,KAAK,UAAU,IAAI,GAAG;AAAG,cAAM,IAAI,MAAM,sBAAsB,GAAG,EAAE;AACnE,WAAA,UAAU,IAAI,KAAK;AAAA,QACtB,GAAG;AAAA,QACH,QAAQ,OAAO;AAAA,QACf,eAAe,OAAO;AAAA,MAAA,CACvB;AAAA,IACH;AACA,SAAK,SAAS,IAAI,OAAO,MAAM,MAAM;AAAA,EACvC;AAAA,EAEA,IAAI,QAAgB,MAAiC;AAC7C,UAAA,UAAU,KAAK,UAAU,IAAI,GAAG,MAAM,IAAI,IAAI,EAAE;AACtD,QAAI,CAAC,SAAS;AACZ,UAAI,CAAC,KAAK,SAAS,IAAI,MAAM,GAAG;AAC9B,cAAM,IAAI,WAAW,kBAAkB,mBAAmB,MAAM,EAAE;AAAA,MACpE;AACA,YAAM,IAAI,WAAW,mBAAmB,oBAAoB,MAAM,IAAI,IAAI,EAAE;AAAA,IAC9E;AACO,WAAA;AAAA,EACT;AAAA,EAEA,UAA2B;AACzB,WAAO,CAAC,GAAG,KAAK,SAAS,OAAQ,CAAA,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EAChF;AAAA,EAEA,WAAgC;AAC9B,WAAO,CAAC,GAAG,KAAK,UAAU,OAAA,CAAQ,EAAE;AAAA,MAAK,CAAC,GAAG,MAC3C,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE;AAAA,IAAA;AAAA,EAEjE;AAAA,EAEA,SAAS,QAAgB,MAAuC;AAC9D,UAAM,UAAU,KAAK,IAAI,QAAQ,IAAI;AAC9B,WAAA;AAAA,MACL,gBAAgB;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,aAAa,QAAQ,eAAe,QAAQ;AAAA,MAC5C,QAAQ,KAAK,OAAO,OAAO;AAAA,MAC3B,gBAAgB;AAAA,MAChB,sBAAsB,eAAe;AAAA,QAAO,CAAC,WAC3C,0BAA0B,IAAI,OAAO,IAAI;AAAA,MAC3C;AAAA,MACA,aAAa,QAAQ,eAAe,CAAC;AAAA,MACrC,UAAU,QAAQ,WAAW,CAAA,GAAI,IAAI,CAAC,YAAY;AAAA,QAChD,GAAG;AAAA,QACH,UAAU,eAAe,MAAM;AAAA,MAAA,EAC/B;AAAA,MACF,cAAc,QAAQ;AAAA,MACtB,eAAe,QAAQ;AAAA,MACvB,uBAAuB,QAAQ;AAAA,MAC/B,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,kBAAkB,QAAQ;AAAA,MAC1B,WAAW,QAAQ,cAAc,QAAQ,kBAAkB,YAAY;AAAA,MACvE,gBAAgB,QAAQ,iBAAiB,QAAQ;AAAA,MACjD,UAAU,QAAQ,YAAY,CAAC;AAAA,IAAA;AAAA,EAEnC;AAAA,EAEA,OAAO,SAAoC;AACzC,UAAM,eAAe,QAAQ,eAAe,CAAI,GAAA;AAAA,MAAI,CAAC,aACnD,SAAS,aAAa,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI;AAAA,IAAA;AAExE,UAAM,WAAW,QAAQ,WAAW,CAAI,GAAA;AAAA,MAAI,CAAC,WAC3C,OAAO,SAAS,YACZ,MAAM,OAAO,IAAI,MACjB,MAAM,OAAO,IAAI,KAAK,OAAO,YAAY,OAAO,IAAI;AAAA,IAAA;AAE1D,WAAO,CAAC,WAAW,QAAQ,QAAQ,QAAQ,MAAM,GAAG,aAAa,GAAG,OAAO,EAAE,KAAK,GAAG;AAAA,EACvF;AAAA,EAEA,qBAAqB,QAA4B;AAC/C,QAAI,OAAO,UAAU;AAAG,aAAO,KAAK,UAAU,IAAI,CAACU,YAAWA,QAAO,IAAI;AACzE,UAAM,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC;AAC1C,QAAI,CAAC;AAAQ,aAAO,KAAK,UAAU,IAAI,CAAC,cAAc,UAAU,IAAI;AAChE,QAAA,OAAO,WAAW,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,IAAI,GAAG;AAC/C,aAAA,OAAO,SAAS,IAAI,CAACC,aAAYA,SAAQ,IAAI,EAAE;IACxD;AACM,UAAA,OAAO,OAAO,CAAC;AACf,UAAA,UAAU,KAAK,UAAU,IAAI,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE;AAC3D,QAAI,CAAC;AAAgB,aAAA,OAAO,SAAS,IAAI,CAAC,cAAc,UAAU,IAAI,EAAE;AACjE,WAAA;AAAA,MACL,IAAI,QAAQ,WAAW,CAAA,GAAI,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE;AAAA,MAC7D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,EACT;AAAA,EAEA,oBAAoB,QAAgB,YAAqC;AACvE,QAAI,CAAC,WAAW,KAAK,WAAW,IAAI,GAAG;AACrC,YAAM,IAAI,MAAM,sBAAsB,MAAM,IAAI,WAAW,IAAI,EAAE;AAAA,IACnE;AACM,UAAA,cAAc,WAAW,eAAe;AACxC,UAAA,sCAAsB;AAC5B,eAAW,cAAc,aAAa;AACpC,UAAI,gBAAgB,IAAI,WAAW,IAAI,GAAG;AAClC,cAAA,IAAI,MAAM,wBAAwB,WAAW,IAAI,OAAO,MAAM,IAAI,WAAW,IAAI,EAAE;AAAA,MAC3F;AACgB,sBAAA,IAAI,WAAW,IAAI;AAAA,IACrC;AACM,UAAA,kCAAkB;AACxB,eAAW,UAAU,WAAW,WAAW,CAAA,GAAI;AACzC,UAAA,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,GAAG;AACjE,cAAM,IAAI;AAAA,UACR,iCAAiC,OAAO,IAAI,OAAO,MAAM,IAAI,WAAW,IAAI;AAAA,QAAA;AAAA,MAEhF;AACY,kBAAA,IAAI,OAAO,IAAI;AAAA,IAC7B;AACK,SAAA,oBAAoB,WAAW,aAAa,GAAG,MAAM,IAAI,WAAW,IAAI,QAAQ;AAChF,SAAA,oBAAoB,WAAW,cAAc,GAAG,MAAM,IAAI,WAAW,IAAI,SAAS;AAAA,EACzF;AAAA,EAEA,oBAAoB,QAAoB,OAAqB;AAC3D,QAAI,OAAO,SAAS;AAAU,YAAM,IAAI,MAAM,GAAG,KAAK,2BAA2B;AAAA,EACnF;AACF;AC/MA,MAAM,eACJ;AAEK,MAAM,YAAY;AAAA,EAKvB,YAAY,MAAc,QAAQ,KAAK;AAFvC,SAAA,WAAqB;AAGnB,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EALA;AAAA,EAOA,MAAM,OAA0B;AAC1B,QAAA;AACG,WAAA,YAAY,MAAM,UAAU,aAAa,KAAK,IAAI,GACpD,MAAM,OAAO,EACb,IAAI,CAAC,SAAS,KAAK,KAAM,CAAA,EACzB,OAAO,OAAO,EACd,MAAM,CAAC,KAAK,KAAK;AAAA,aACb,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,UAAU;AAAS,cAAA;AAC3C,WAAK,WAAW;IAClB;AACO,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAEA,UAAoB;AACX,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAEA,MAAM,IAAI,MAAc,SAA4C;AAC9D,QAAA,CAAC,qBAAqB,MAAM,OAAO;AAAG;AAC1C,QAAI,KAAK,SAAS,GAAG,EAAE,MAAM;AAAW,WAAA,SAAS,KAAK,IAAI;AAC1D,SAAK,WAAW,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK;AAC/C,UAAMV,QAAO;AACb,UAAMA,MAAK,MAAMA,MAAK,KAAK,QAAQ,KAAK,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AACzE,UAAAA,MAAK,cAAc,KAAK,MAAM,GAAG,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,GAAM,EAAE,MAAM,IAAA,CAAO;AACpF,QAAIA,MAAK,aAAa;AAAW,YAAMA,MAAK,MAAM,KAAK,MAAM,GAAK;AAAA,EACpE;AACF;AAEgB,SAAA,qBAAqB,MAAc,SAAsC;AACnF,MAAA,aAAa,KAAK,IAAI;AAAU,WAAA;AACpC,MAAI,CAAC;AAAgB,WAAA;AACrB,MAAI,OAAO,OAAO,QAAQ,YAAY,cAAc,EAAE,EAAE,KAAK,CAAC,WAAW,OAAO,MAAM,GAAG;AAChF,WAAA;AAAA,EACT;AACI,MAAA;AACA,MAAA;AACF,aAAS,eAAe,IAAI;AAAA,EAAA,QACtB;AACC,WAAA;AAAA,EACT;AACA,QAAM,gBAAgB,IAAI;AAAA,KACvB,QAAQ,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,OAAO,MAAM,EAAE,QAAQ,CAAC,WAAW;AAAA,MAC5E,KAAK,OAAO,IAAI;AAAA,MAChB,eAAe,MAAM;AAAA,IAAA,CACtB;AAAA,EAAA;AAEH,SAAO,CAAC,OAAO,KAAK,CAAC,UAAU,cAAc,IAAI,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E;ACjDA,eAAsB,QAAQ,SAAqC;AACjE,QAAM,UAAU,IAAI,YAAY,QAAQ,YAAY,aAAa;AAC3D,QAAA,eAAe,MAAM,QAAQ;AAC7B,QAAA,YAAY,CAAC,SAAqC;AACtD,UAAM,WAAW,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK;AAC/C,UAAM,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,SAAS,MAAM;AACtD,QAAA;AACA,QAAA;AACF,eAAS,eAAe,MAAM;AAAA,IAAA,QACxB;AACN,eAAS,OAAO,OAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AAAA,IACpD;AACA,WAAO,KAAK,QAAQ;AACpB,UAAM,aAAa,QAAQ,SAAS,qBAAqB,MAAM;AACxD,WAAA,CAAC,WAAW,OAAO,CAAC,cAAc,UAAU,WAAW,QAAQ,CAAC,GAAG,QAAQ;AAAA,EAAA;AAEhF,MAAA;AACE,QAAA,WAA2B,QAAQ,EAAE,iBAAiB;AAAA,IAC1D,SAAS,CAAC,GAAG,YAAY,EAAE,QAAQ;AAAA,IACnC,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA,UAAU,MAAM;AACV,UAAA;AAAS,gBAAQ,MAAM;AAAA,WACtB;AACH,iBAAS,MAAM,MAAM;AACrB,iBAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,EAAA,CACD;AACK,QAAA,SAAS,WAAW,QAAQ,MAAM;AACxC,WAAS,MAAM,0EAA0E;AACzF,WAAS,UAAU,MAAM;AACzB,WAAS,OAAO;AAEZ,MAAA;AACF,qBAAiB,WAAW,UAAU;AAC9B,YAAA,OAAO,QAAQ;AACrB,UAAI,CAAC,MAAM;AACT,iBAAS,OAAO;AAChB;AAAA,MACF;AACI,UAAA,KAAK,WAAW,GAAG,GAAG;AACxB,cAAM,aAAa,MAAM,cAAc,MAAM,SAAS,OAAO;AACzD,YAAA;AAAY;AAChB,iBAAS,OAAO;AAChB;AAAA,MACF;AAEI,UAAA;AACA,UAAA;AACF,iBAAS,eAAe,IAAI;AAAA,eACrB,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACvC,iBAAS,MAAM,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAC5D,iBAAS,OAAO;AAChB;AAAA,MACF;AACI,UAAA;AACA,UAAA;AACF,YAAI,OAAO,UAAU;AAAa,oBAAA,QAAQ,SAAS,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,MAAA,QACrE;AACI,kBAAA;AAAA,MACZ;AACM,YAAA,QAAQ,IAAI,MAAM,OAAO;AAC/B,gBAAU,IAAI;AACV,UAAA;AACF,cAAM,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,eACrC,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACvC,iBAAS,MAAM,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAAA,MAAA,UAC5D;AACU,kBAAA;AAAA,MACZ;AACA,eAAS,OAAO;AAAA,IAClB;AAAA,EAAA,UACA;AACA,aAAS,MAAM;AAAA,EACjB;AACF;AAEA,eAAe,cACb,MACA,SACA,SACkB;AAClB,QAAM,UAAU,KAAK,MAAM,OAAO,CAAC,EAAE,CAAC;AACtC,UAAQ,SAAS;AAAA,IACf,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd;AAAA,UACE;AAAA,UACA;AAAA,UACA,YAAY,QAAQ,SAAS,QAAU,EAAA,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,UAC9E;AAAA,QAAA,EACA,KAAK,IAAI;AAAA,MAAA;AAEb;AAAA,IACF,KAAK;AACH,YAAM,QAAQ,EAAE,OAAO,GAAG,KAAK,UAAU,oBAAoB,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AAC1F;AAAA,IACF,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd,GAAG,KAAK,UAAU,QAAQ,QAAQ,eAAe,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA;AAAA,MAAA;AAErE;AAAA,IACF,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd,GAAG,QAAQ,QAAA,EAAU,IAAI,CAAC,OAAO,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MAAA;AAEjF;AAAA,IACF,KAAK;AACC,UAAA;AACI,cAAA,QAAQ,QAAQ;AAChB,cAAA,QAAU,EAAA,OAAO,uBAAuB;AAAA,eACvC,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACjC,cAAA,QAAA,EAAU,OAAO,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAAA,MACtE;AACA;AAAA,IACF;AACE,YAAM,QAAQ,EAAE,OAAO,yBAAyB,OAAO;AAAA,CAAI;AAAA,EAC/D;AACO,SAAA;AACT;AAEA,SAAS,WAAW,QAAgC;AAC5C,QAAA,UAAU,OAAO,eAAe;AAChC,QAAA,OAAO,OAAO,SAAS,OAAO,WAAW,IAAI,IAAI,OAAO,QAAQ,EAAE,OAAO;AACzE,QAAA,WAAW,OAAO,YAAY;AACpC,SAAO,WAAW,OAAO,IAAI,IAAI,IAAI,QAAQ;AAC/C;ACnJA,MAAMW,gBAAc,EAAE,MAAM,UAAmB,YAAY,IAAI,sBAAsB;AACrF,MAAMC,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAErE,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,0CAA0C;AAAA,QACrD,SAAS,CAAC,QACR,QAAQ,QAAQ;AAAA,UACd,WAAW,IAAI,UAAU;AAAA,UACzB,OAAO,IAAI,UAAU;AAAA,UACrB,iBAAiB,IAAI,UAAU,iBAAiB;AAAA,UAChD,gBAAgB,IAAI,UAAU;AAAA,UAC9B,MAAM,IAAI,WAAW;AAAA,QAAA,CACtB;AAAA,MACL;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,kDAAkD;AAAA,QAC7D,SAAS,CAAC,QAAQ;AACZ,cAAA,CAAC,IAAI,SAAS;AAChB,kBAAM,IAAI,UAAU,kBAAkB,wCAAwC,CAAC;AAAA,UACjF;AACA,iBAAO,QAAQ,QAAQ,IAAI,QAAQ,OAAQ,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;ACtCA,MAAMD,gBAAc;AAAA,EAClB,MAAM;AAAA,EACN,YAAY,CAAC;AAAA,EACb,sBAAsB;AACxB;AACA,MAAMC,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAErE,SAAS,kBAAkB,UAA4C;AACrE,SAAA,CAAC,oBAAoB,QAAQ,GAAG,sBAAsB,uBAAuB,QAAQ,CAAC;AAC/F;AAEA,SAAS,oBAAoB,UAA0C;AAC9D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,sBAAsB;AAAA,QACjC,SAAS,MACP,QAAQ,QAAQ;AAAA,UACd,SAAS,SAAS,QAAU,EAAA,IAAI,CAAC,YAAY;AAAA,YAC3C,MAAM,OAAO;AAAA,YACb,SAAS,OAAO;AAAA,YAChB,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa;AAAA,cAC1C,MAAM,QAAQ;AAAA,cACd,SAAS,QAAQ;AAAA,YAAA,EACjB;AAAA,UAAA,EACF;AAAA,QAAA,CACH;AAAA,MACL;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,iBAAiB,aAAa,cAAc;AAAA,UACpD,EAAE,MAAM,eAAe,aAAa,YAAY;AAAA,QAClD;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,eAAe,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC9C,aAAa,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC9C;AAAA,UACA,UAAU,CAAC,iBAAiB,aAAa;AAAA,UACzC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,wCAAwC;AAAA,QACnD,SAAS,CAAC,MAAM,UACd,QAAQ;AAAA,UACN,SAAS,SAAS,OAAO,MAAM,aAAa,GAAG,OAAO,MAAM,WAAW,CAAC;AAAA,QAC1E;AAAA,MACJ;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,qBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,qBAAqB;AAAA,QAChC,SAAS,OAAO,SAAS;AAAA,UACvB,QAAQ,MAAM,IAAI,YAAY,WAAW;AAAA,UACzC,UAAU,MAAM,IAAI,YAAY,aAAa;AAAA,QAAA;AAAA,MAEjD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB,UAAU,OAAO;AAAA,QAChF,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACpC,cAAc,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC/C;AAAA,UACA,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,cAAcC,iBAAe,MAAM,YAAY;AAC/C,gBAAA,QAAQ,cACV,MAAM,IAAI,YAAY,YAAY,WAAW,IAC7C,MAAM,IAAI,YAAY,WAAW;AACrC,cAAI,CAAC;AAAO,kBAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AACnF,gBAAA,MAAMA,iBAAe,MAAM,GAAG;AACpC,cAAI,CAAC;AAAK,mBAAO,EAAE,MAAM;AACzB,cAAI,CAAC,OAAO,OAAO,OAAO,GAAG,GAAG;AAC9B,kBAAM,IAAI,WAAW,wBAAwB,gCAAgC,GAAG,EAAE;AAAA,UACpF;AACA,iBAAO,EAAE,KAAK,OAAQ,MAA6C,GAAG,EAAE;AAAA,QAC1E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,QAC/D,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,uBAAuB,MAAM,UAAU,UAAU,KAAK;AAAA,UACpF;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACpC,OAAO,EAAE,MAAM,SAAS;AAAA,YACxB,cAAc,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC/C;AAAA,UACA,UAAU,CAAC,OAAO,OAAO;AAAA,UACzB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcD;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,MAAM,OAAO,MAAM,GAAG;AACtB,gBAAA,WAAW,OAAO,MAAM,KAAK;AAC7B,gBAAA,cAAcC,iBAAe,MAAM,YAAY;AACrD,cAAI,aAAa;AACf,gCAAoB,WAAW;AACzB,kBAAA,UAAU,MAAM,IAAI,YAAY,YAAY,WAAW,KAAK,EAAE,gBAAgB;AACpE,4BAAA,SAAS,KAAK,QAAQ;AACtC,kBAAM,IAAI,YAAY,aAAa,aAAa,OAAO;AAChD,mBAAA;AAAA,cACL,SAAS;AAAA,cACT;AAAA,cACA,OAAQ,QAA+C,GAAG;AAAA,YAAA;AAAA,UAE9D;AACA,gBAAM,SAAS,MAAM,IAAI,YAAY,WAAW;AACjC,yBAAA,QAAQ,KAAK,QAAQ;AAC9B,gBAAA,IAAI,YAAY,YAAY,MAAM;AACxC,iBAAO,EAAE,SAAS,MAAM,KAAK,OAAQ,OAA8C,GAAG;QACxF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,gBAAgB,aAAa,gBAAgB;AAAA,QACnE,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UAC7D,UAAU,CAAC,cAAc;AAAA,UACzB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcD;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,+BAA+B;AAAA,QAC1C,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,cAAc,OAAO,MAAM,YAAY;AAC7C,cAAI,CAAC,MAAM,IAAI,YAAY,YAAY,WAAW,GAAG;AACnD,kBAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AAAA,UAC/E;AACA,gBAAM,SAAS,MAAM,IAAI,YAAY,WAAW;AAChD,iBAAO,kBAAkB;AACnB,gBAAA,IAAI,YAAY,YAAY,MAAM;AACjC,iBAAA,EAAE,iBAAiB;QAC5B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY;AAAA,UAC7C,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,uDAAuD;AAAA,QAClE,SAAS,OAAO,KAAK,WAAW;AAAA,UAC9B,OAAO;AAAA,UACP,gBAAgB,MAAM,IAAI,YAAY,aAAgB,GAAA;AAAA,UACtD,GAAI,MAAM,YAAY,EAAE,WAAW,oBAAoB,IAAI,MAAM,EAAE,IAAI,CAAC;AAAA,QAAA;AAAA,MAE5E;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,uBAAuB,UAA0C;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,UAAU;AAAA,YACV,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,OAAO,MAAM,IAAI;AAAA,UACvE,UAAU,CAAC,OAAO;AAAA,UAClB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,GAAG,QAAQ,EAAE,MAAM,WAAW;AAAA,UACpE,UAAU,CAAC,SAAS,QAAQ;AAAA,UAC5B,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,wDAAwD;AAAA,QACnE,SAAS,CAAC,MAAM,UAAU;AAClB,gBAAA,QAAQ,OAAO,MAAM,KAAK;AACzB,iBAAA,QAAQ,QAAQ,EAAE,OAAO,QAAQ,iBAAiB,UAAU,KAAK,EAAA,CAAG;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,QAAoB,KAAa,OAAqB;AAC5E,MAAI,QAAQ,mBAAmB;AAC7B,wBAAoB,KAAK;AACzB,WAAO,kBAAkB;AAAA,EAAA,WAChB,QAAQ,UAAU;AACpB,WAAA,SAAS,YAAY,KAAK;AAAA,EAAA,OAC5B;AACC,UAAA,iBAAiB,yCAAyC,GAAG,EAAE;AAAA,EACvE;AACF;AAEA,SAAS,gBAAgB,SAAwB,KAAa,OAAqB;AACjF,MAAI,QAAQ,UAAU,QAAQ,cAAc,QAAQ;AAAY,YAAQ,GAAG,IAAI;AAAA,WACtE,QAAQ,oBAAoB;AAC/B,QAAA,UAAU,aAAa,UAAU,YAAY;AAC/C,YAAM,iBAAiB,8CAA8C;AAAA,IACvE;AACA,YAAQ,mBAAmB;AAAA,EAAA,WAClB,QAAQ;AAAkB,YAAA,SAAS,YAAY,KAAK;AAAA;AACpD,UAAA,iBAAiB,0CAA0C,GAAG,EAAE;AAC7E;AAEA,SAAS,YAAY,OAA4D;AAC3E,MAAA,CAAC,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK,EAAE,SAAS,KAAK,GAAG;AACxD,UAAA,iBAAiB,0BAA0B,KAAK,EAAE;AAAA,EAC1D;AACO,SAAA;AACT;AAEA,SAASC,iBAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,QAAQ,QAAQ;AACtD;AAEA,SAAS,iBAAiB,UAA2B,OAAuB;AACpE,QAAA,UAAU,SAAS,QAAA,EAAU,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,GAAG;AACxE,QAAM,WAAW,SAAS,SAAS,EAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI,EAAE,EAAE;AAAA,IACzF;AAAA,EAAA;AAEF,MAAI,UAAU,QAAQ;AACb,WAAA;AAAA,qDAA8E,OAAO;AAAA,IAAQ,QAAQ;AAAA;AAAA,EAC9G;AACA,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,wBAA2C,OAAO;AAAA,IAA8B,QAAQ;AAAA;AAAA,EACjG;AACO,SAAA;AAAA,UAAkC,eAAe;AAAA,gCAAkD,OAAO,SAAS,2BAA2B;AAAA;AAAA;AAAA;AAAA,IAA2D,QAAQ;AAAA;AAC1N;ACnVO,SAASC,aAAW,KAIzB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,eAAsB,YACpB,KACA,SACA,QACA,QACY;AACR,MAAA;AACK,WAAA,MAAM,IAAI,QAAQ,KAAQ,SAAS,QAAQ,QAAQA,aAAW,GAAG,CAAC;AAAA,WAClE,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC/D,UAAA,SAAS,QAAQ,MAAM,+CAA+C;AACxE,QAAA;AAAQ,YAAM,IAAI,UAAU,OAAO,CAAC,GAAG,OAAO;AAC5C,UAAA;AAAA,EACR;AACF;AAEgB,SAAAC,eAAa,OAAgB,OAAwC;AAC/E,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,aAAa;AAAA,EAC7F;AACO,SAAA;AACT;AAEgB,SAAAC,eAAa,OAAgB,OAAuB;AAClE,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,qBAAqB,aAAa;AAAA,EAC5F;AACO,SAAA;AACT;AAEgB,SAAA,YAAY,OAAgC,KAAiC;AACrF,QAAA,QAAQ,MAAM,GAAG;AAChB,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEgB,SAAA,oBAAoB,OAAgC,KAAqB;AACjF,QAAA,QAAQ,YAAY,OAAO,GAAG;AACpC,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,cAAc;AAClE,SAAA;AACT;AAEgB,SAAA,eAAe,OAAgB,KAAiC;AAC9E,MAAI,UAAU;AAAkB,WAAA;AAChC,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS;AAAU,WAAA;AACnF,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,wCAAwC;AAAA,EACzF;AACI,MAAA,QAAQ,KAAK,KAAK,GAAG;AACjBC,UAAAA,gBAAe,OAAO,KAAK;AAC7B,QAAA,OAAO,cAAcA,aAAY;AAAUA,aAAAA;AAAAA,EACjD;AACM,QAAA,eAAe,KAAK,MAAM,KAAK;AACrC,MAAI,CAAC,OAAO,SAAS,YAAY,GAAG;AAClC,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,wCAAwC;AAAA,EACzF;AACO,SAAA;AACT;AAEO,SAAS,cAAc,OAA0B;AACtD,QAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5F,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;AAC9E;ACxEA,MAAMC,kBAAgB;AACtB,MAAMP,gBAA0B,EAAE,MAAM,UAAU,YAAY,IAAI,sBAAsB;AACxF,MAAM,eAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,SAAS;AAAA,IAC1B,eAAe,EAAE,MAAM,SAAS;AAAA,IAChC,iBAAiB,EAAE,MAAM,SAAS;AAAA,IAClC,QAAQ,EAAE,MAAM,SAAS;AAAA,EAC3B;AAAA,EACA,sBAAsB;AACxB;AAEO,SAAS,qBAAoC;AAC3C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAaA;AAAAA,QACb,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,SAAS,aAAa;AAAA,UACpC,UAAU,CAAC,SAAS;AAAA,UACpB,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,4CAA4C;AAAA,QACvD,SAAS,OAAO,QAAQ;AACtB,gBAAM,CAAC,QAAQQ,QAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,YAC1C,YAAY,KAAKD,iBAAe,iBAAiB,CAAA,CAAE;AAAA,YACnD,YAAY,GAAG;AAAA,UAAA,CAChB;AACD,iBAAO,EAAE,GAAGH,eAAa,QAAQ,eAAe,GAAG,SAAAI,SAAQ;AAAA,QAC7D;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAaR;AAAAA,QACb,cAAc;AAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,qBAAqB;AAAA,QAChC,SAAS,OAAO,QAAQ,MAAM,YAAY,GAAG;AAAA,MAC/C;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,YAAY,KAAuD;AACzE,SAAAI;AAAAA,IACL,MAAM,YAAY,KAAKG,iBAAe,2BAA2B,CAAA,CAAE;AAAA,IACnE;AAAA,EAAA;AAEJ;ACjEA,MAAM,eAAe;AACrB,MAAMN,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,MAAM;AAC7E,MAAM,YAAwB;AAAA,EAC5B,MAAM;AAAA,EACN,YAAY,EAAE,KAAK,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,EACpD,UAAU,CAAC,KAAK;AAAA,EAChB,sBAAsB;AACxB;AAEO,SAAS,2BAA0C;AACjD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,QAC/D,aAAa;AAAA,QACb,cAAc;AAAA,UACZ,GAAGA;AAAAA,UACH,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,SAAS;AAAA,YACtB,OAAO,EAAE,MAAM,SAAS;AAAA,YACxB,SAAS,EAAE,MAAM,UAAU;AAAA,YAC3B,MAAM,EAAE,MAAM,SAAS;AAAA,UACzB;AAAA,UACA,UAAU,CAAC,OAAO,SAAS,WAAW,MAAM;AAAA,QAC9C;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,MAAM,OAAO,MAAM,GAAG;AAC5B,gBAAM,SAAS,MAAM,iBAA0B,KAAK,kBAAkB,EAAE,KAAK;AAC7E,cAAI,WAAW,MAAM;AACnB,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,gCAAgC,GAAG;AAAA,YAAA;AAAA,UAEvC;AACI,cAAA,CAAC,cAAc,MAAM;AAAGQ,8BAAgB,gBAAgB;AACrD,iBAAA,EAAE,KAAK,OAAO,OAAO,OAAO,SAAS,OAAO,SAAS,MAAM,OAAO,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,OAAO,aAAa,qCAAqC,UAAU,MAAM;AAAA,QACnF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW;AAAA,UACtC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,GAAGR;AAAAA,UACH,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,SAAS;AAAA,YACtB,OAAO,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,WAAW;AAAA,UACpD;AAAA,UACA,UAAU,CAAC,OAAO,OAAO;AAAA,QAC3B;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AAC7B,gBAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AACxD,gBAAM,SAAS,MAAM,iBAA0B,KAAK,mBAAmB,EAAE,KAAK;AAC9E,cAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAC/EQ,8BAAgB,iBAAiB;AAAA,UACnC;AACO,iBAAA,EAAE,KAAK,OAAO;QACvB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,gBAAgB;AAAA,MAAA,CACjB;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,kBAAkB,MAAM,UAAU,UAAU,KAAK;AAAA,IACjF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC;AAAA,MACA,UAAU,CAAC,OAAO,OAAO;AAAA,MACzB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGR;AAAAA,MACH,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY;AAAA,MACpE,UAAU,CAAC,OAAO,SAAS;AAAA,IAC7B;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,mEAAmE;AAAA,IAC9E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AACtB,YAAA,iBAAiB,KAAK,kBAAkB,EAAE,KAAK,OAAO,OAAO,MAAM,KAAK,EAAA,CAAG;AAC1E,aAAA,EAAE,KAAK,SAAS;IACzB;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC;AAAA,MACA,UAAU,CAAC,OAAO,MAAM;AAAA,MACxB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY;AAAA,MACpE,UAAU,CAAC,OAAO,SAAS;AAAA,IAC7B;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,6EAA6E;AAAA,IACxF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AAC5B,YAAM,QAAQ,MAAM,cAAc,OAAO,MAAM,IAAI,CAAC;AACpD,UAAI,CAAC;AAAa,cAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAC5F,YAAM,iBAAiB,KAAK,kBAAkB,EAAE,KAAK,OAAO;AACrD,aAAA,EAAE,KAAK,SAAS;IACzB;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAgB,SAMH;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,UAAU,UAAU,KAAK;AAAA,IAClF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC;AAAA,MACA,UAAU,CAAC,OAAO,OAAO;AAAA,MACzB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,SAAS;AAAA,QACtB,CAAC,QAAQ,cAAc,GAAG,EAAE,MAAM,UAAU;AAAA,MAC9C;AAAA,MACA,UAAU,CAAC,OAAO,QAAQ,cAAc;AAAA,IAC1C;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,yBAAyB,QAAQ,IAAI,qCAAqC;AAAA,IACrF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AACtB,YAAA,iBAAiB,KAAK,QAAQ,QAAQ;AAAA,QAC1C;AAAA,QACA,CAAC,QAAQ,aAAa,GAAG,OAAO,MAAM,KAAK;AAAA,MAAA,CAC5C;AACD,aAAO,EAAE,KAAK,CAAC,QAAQ,cAAc,GAAG,KAAK;AAAA,IAC/C;AAAA,EAAA;AAEJ;AAEA,eAAe,iBACb,KACA,QACA,QACY;AACZ,SAAO,MAAM,IAAI,QAAQ,KAAQ,cAAc,QAAQ,QAAQ;AAAA,IAC7D,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA,CACb;AACH;AAEA,eAAe,cAAc,MAA+B;AACtD,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,WACjC,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8BAA8B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAAA;AAAA,EAExF;AACF;AAEA,SAAS,cAAc,OAA6D;AAClF,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAU,WAAA;AACxE,QAAMb,UAAS;AACf,SAAO,OAAOA,QAAO,UAAU,YAAY,OAAO,cAAcA,QAAO,OAAO,KAC5E,OAAOA,QAAO,OAAO,KAAK;AAC9B;AAEA,SAASqB,kBAAgB,QAAuB;AAC9C,QAAM,IAAI;AAAA,IACR;AAAA,IACA,kDAAkD,MAAM;AAAA,IACxD;AAAA,EAAA;AAEJ;AC/PA,MAAMhB,YAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAMiB,aAAW,CAAC,MAAc,OAAe,UAAU,KAAK,SAAS,MAAM,EAAE;AAC/E,MAAMd,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,aAAa;AACnB,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,qBAAqB;AAC3B,MAAM,uBAAuB;AAC7B,MAAM,0BAA0B;AAChC,MAAM,wBAAwB,KAAK,OAAO;AACnC,MAAM,mBAAmB;AAEhC,MAAM,YAAY,IAAI,YAAY,GAAG;AACrC,SAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACrD,MAAI,QAAQ;AACH,WAAA,MAAM,GAAG,MAAM,GAAG;AAAO,YAAS,UAAU,KAAM,QAAQ,IAAI,aAAa;AAC1E,YAAA,KAAK,IAAI,UAAU;AAC/B;AA4CA,eAAsB,WAAW,MAAmC;AAC5D,QAAA,OAAO,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AACtD,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,MAAM;AACV,MAAI,OAAO;AACP,MAAA;AACF,UAAM,SAAS,IAAI,WAAW,MAAM,IAAI;AACxC,WAAO,MAAM;AACX,YAAM,OAAO,MAAM,KAAK,KAAK,MAAM;AACnC,UAAI,SAAS;AAAM;AACnB,YAAM,QAAQ,OAAO,SAAS,GAAG,IAAI;AACrC,UAAI,OAAO,KAAK;AACV,YAAA,YAAY,KAAK,KAAK;AACpB,cAAA;AACJ,UAAA,CAAC,OAAO,cAAc,IAAI;AAAS,cAAA,IAAI,WAAW,kBAAkB,mBAAmB;AAAA,IAC7F;AAAA,EAAA,UACA;AACA,UAAM,KAAK;EACb;AACO,SAAA,EAAE,MAAM,QAAQ,IAAI,aAAa,QAAQ,MAAM,gBAAgB;AACxE;AAEO,SAAS,YAAY,OAA2B;AACrD,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,OAAO,KAAK;AAChB,SAAO,IAAI;AACb;AAEsB,eAAA,yBACpB,WACA,aACe;AACf,QAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,SAAS;AACzC,QAAA,SAAS,MAAM,kBAAkB,IAAI;AAC3C,QAAM,UAAU,GAAG,WAAW,QAAQ,OAAO,WAAY,CAAA;AACzD,QAAM,MAAM,MAAM,UAAU,KAAK,SAAS,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,IAAO,CAAA;AACnF,MAAA;AACF,eAAW,UAAU,QAAQ;AACrB,YAAA,SAAS,UAAU,MAAM;AACzB,YAAA,SAAS,KAAK,MAAM;AACtB,UAAA,OAAO,SAAS,QAAQ;AACpB,cAAA,iBAAiB,OAAO,cAAc,GAAG;AAC/C,cAAM,WAAW,aAAa,OAAO,OAAO,cAAc;AACtD,YAAA;AAAS,gBAAM,SAAS,KAAK,IAAI,WAAW,OAAO,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,UAAM,SAAS,KAAK,IAAI,WAAW,aAAa,CAAC,CAAC;AAClD,UAAM,IAAI;EAAK,UACf;AACA,UAAM,IAAI;EACZ;AAEI,MAAA;AACI,UAAA,QAAQ,MAAM,kBAAkB,IAAI;AAC1C,QAAI,KAAK,UAAU,OAAO,IAAI,cAAc,CAAC,MAAM,KAAK,UAAU,MAAM,IAAI,cAAc,CAAC,GAAG;AACtF,YAAA,IAAI,UAAU,kBAAkB,iDAAiD;AAAA,IACzF;AACM,UAAA,SAAS,SAAS,WAAW;AAAA,EAAA,UACnC;AACA,UAAM,eAAe,OAAO;AAAA,EAC9B;AACF;AAEsB,eAAA,SAAS,QAAgB,aAAoC;AACjF,QAAM,QAAQ,EAAE,SAAS,QAAQ,WAAW;AAC9C;AAQsB,eAAA,UAAU,OAAmB,OAAwC;AACzF,QAAM,MAAM,MAAM,YAAY,OAAO,KAAK;AAC1C,QAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM;AACxD,QAAMe,QAAO,CAACC,SAAgB,WAC5B,QAAQ,OAAO,IAAI,SAASA,SAAQA,UAAS,MAAM,CAAC,EAAE,QAAQ,UAAU,EAAE;AAC5E,QAAM,QAAwB,CAAA;AACxB,QAAA,2BAAW;AACjB,MAAI,SAAS;AACb,SACE,SAAS,cAAc,IAAI,UAAU,IAAI,SAAS,QAAQ,SAAS,UAAU,EAAE,KAAK,OAAO,GAC3F;AACI,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACI,YAAA,SAASD,MAAK,SAAS,KAAK,CAAC,MAAM,UAAUA,MAAK,SAAS,KAAK,GAAG,IAAI;AACvE,YAAA,SAAS,GAAG,MAAM,IAAIA,MAAK,QAAQ,GAAG,CAAC,KAAKA,MAAK,QAAQ,GAAG;AAC3D,aAAA,OAAO,SAASA,MAAK,SAAS,KAAK,EAAE,EAAE,KAAA,KAAU,KAAK,CAAC;AACvD,aAAA,OAAO,SAASA,MAAK,SAAS,KAAK,CAAC,EAAE,KAAA,KAAU,KAAK,CAAC;AAAA,IAAA,QACvD;AACA,YAAA,WAAW,WAAW,+BAA+B;AAAA,IAC7D;AACA,UAAM,OAAO,OAAO,aAAa,IAAI,SAAS,GAAG,KAAK,EAAI;AACpD,UAAA,OAAO,IAAI,QAAQ,cAAc,EAAE,EAAE,QAAQ,OAAO,EAAE;AAC5D,UAAM,QAAQ,SAAS;AACnB,QAAA,CAAC,OAAO,cAAc,IAAI,KAAK,OAAO,KAAK,QAAQ,OAAO,IAAI,QAAQ;AACxE,YAAM,WAAW,WAAW,2BAA2B,GAAG,EAAE;AAAA,IAC9D;AACA,aAAS,QAAQ,KAAK,KAAK,OAAO,UAAU,IAAI;AAChD,QAAI,SAAS,QAAQ,SAAS,MAAM,SAAS;AAAM;AAEjD,QAAA,CAAC,QAAQ,KAAK,WAAW,GAAG,KAAK,aAAa,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,KAC9E,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,YAAY,OAAO,YAAY,IAAI,GACjF;AACA,YAAM,WAAW,WAAW,0BAA0B,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,IAC7E;AACA,QAAI,SAAS;AAAK;AAClB,QAAI,SAAS,KAAK;AAChB,YAAM,WAAW,WAAW,iDAAiD,IAAI,EAAE;AAAA,IACrF;AACI,QAAA,KAAK,IAAI,IAAI;AAAG,YAAM,WAAW,WAAW,wBAAwB,IAAI,EAAE;AAC9E,SAAK,IAAI,IAAI;AACb,UAAM,KAAK,EAAE,MAAM,aAAa,OAAO,QAAW,GAAG,OAAO,IAAI,MAAM,OAAO,QAAQ,IAAI,GAAG;AAAA,EAC9F;AACO,SAAA;AACT;AAEA,eAAe,YAAY,OAAmB,OAAoC;AAC1E,QAAA,SAAS,IAAI,eAA2B;AAAA,IAC5C,MAAM,YAAY;AAChB,iBAAW,QAAQ,KAAK;AACxB,iBAAW,MAAM;AAAA,IACnB;AAAA,EACD,CAAA,EAAE;AAAA,IACD,IAAI,oBAAoB,MAAM;AAAA,EAAA;AAEhC,QAAM,SAAuB,CAAA;AAC7B,MAAI,OAAO;AACP,MAAA;AACF,qBAAiB,SAAS,QAAQ;AAChC,cAAQ,MAAM;AACd,UAAI,OAAO;AAAa,cAAA,WAAW,UAAU,uCAAuC;AACpF,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,WACO,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AAChC,UAAA,WAAW,eAAe,oCAAoC;AAAA,EACtE;AACM,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,MAAI,WAAW;AACf,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,QAAQ;AAC1B,gBAAY,MAAM;AAAA,EACpB;AACO,SAAA;AACT;AAEsB,eAAA,eACpB,aACA,SACe;AACX,MAAA,QAAQ,SAAS,kBAAkB;AAC/B,UAAA,IAAI,WAAW,oBAAoB,gCAAgC;AAAA,EAC3E;AACM,QAAA,4BAAY;AAClB,QAAM,WAAW,CAAA;AAGjB,aAAW,UAAU,SAAS;AAC5B,yBAAqB,OAAO,IAAI;AAC5B,QAAA,MAAM,IAAI,OAAO,IAAI;AAAG,YAAM,WAAW,aAAa,oBAAoB,OAAO,IAAI,EAAE;AACrF,UAAA,IAAI,OAAO,IAAI;AACrB,QAAK,OAAO,UAAU,YAAgB,OAAO,SAAS,SAAY;AAChE,YAAM,IAAI,MAAM,cAAc,OAAO,IAAI,gCAAgC;AAAA,IAC3E;AACM,UAAA,SAAS,OAAO,QAClB;AAAA,MACA,MAAM,OAAO,MAAM;AAAA,MACnB,QAAQ,YAAY,OAAO,KAAK;AAAA,MAChC,OAAO,MAAM,OAAO,KAAK;AAAA,IAEzB,IAAA,MAAM,WAAW,OAAO,IAAK;AACjC,aAAS,KAAK;AAAA,MACZ,GAAG;AAAA,MACH,WAAW,IAAI,YAAA,EAAc,OAAO,OAAO,IAAI;AAAA,MAC/C;AAAA,MACA,QAAQ;AAAA,MACR,OAAO,OAAO,OAAO;AAAA,IAAA,CACtB;AAAA,EACH;AAEM,QAAA,QAAA,EAAU,MAAMlB,UAAQ,WAAW,GAAG,EAAE,WAAW,KAAA,CAAM;AAC/D,QAAM,SAAS,MAAM,UAAU,KAAK,aAAa,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,IAAO,CAAA;AAC9F,MAAI,SAAS;AACb,QAAM,iBAA+B,CAAA;AACjC,MAAA;AACF,eAAW,UAAU,UAAU;AAC7B,aAAO,SAAS;AAChB,aAAO,UAAU,SAAS;AAC1B,YAAM,aAAa,OAAO,QAAQ,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,IAAI,CAAC,IAAI;AACnF,YAAA,QAAQ,IAAI,WAAW,KAAK,OAAO,UAAU,SAAS,WAAW,MAAM;AAC7E,YAAMoB,QAAO,IAAI,SAAS,MAAM,MAAM;AACtCA,YAAK,UAAU,GAAG,qBAAqB,IAAI;AAC3CA,YAAK,UAAU,GAAG,OAAO,QAAQ,KAAK,IAAI,IAAI;AAC9CA,YAAK,UAAU,GAAG,MAAQ,IAAI;AAC9BA,YAAK,UAAU,GAAG,GAAG,IAAI;AACzBA,YAAK,UAAU,IAAI,OAAO,OAAO,OAAO,IAAI;AAC5CA,YAAK,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AACvEA,YAAK,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AACvEA,YAAK,UAAU,IAAI,OAAO,UAAU,QAAQ,IAAI;AAChDA,YAAK,UAAU,IAAI,WAAW,QAAQ,IAAI;AACpC,YAAA,IAAI,OAAO,WAAW,EAAE;AAC9B,YAAM,IAAI,YAAY,KAAK,OAAO,UAAU,MAAM;AAC5C,YAAA,SAAS,QAAQ,KAAK;AAC5B,gBAAU,MAAM;AAChB,UAAI,OAAO,OAAO;AACV,cAAA,SAAS,QAAQ,OAAO,KAAK;AAAA,MAAA,OAC9B;AACC,cAAA,iBAAiB,OAAO,MAAO,MAAM;AAAA,MAC7C;AACA,gBAAU,OAAO,OAAO;AAExB,YAAM,eAAe,OAAO,QACxB,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM,CAAC,IAClE;AACE,YAAA,UAAU,IAAI,WAAW,KAAK,OAAO,UAAU,SAAS,aAAa,MAAM;AACjF,YAAM,cAAc,IAAI,SAAS,QAAQ,MAAM;AACnC,kBAAA,UAAU,GAAG,uBAAuB,IAAI;AACpD,kBAAY,UAAU,GAAI,KAAK,IAAK,IAAI,IAAI;AAC5C,kBAAY,UAAU,GAAG,OAAO,QAAQ,KAAK,IAAI,IAAI;AACzC,kBAAA,UAAU,GAAG,MAAQ,IAAI;AACzB,kBAAA,UAAU,IAAI,GAAG,IAAI;AACjC,kBAAY,UAAU,IAAI,OAAO,OAAO,OAAO,IAAI;AACvC,kBAAA,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AAClE,kBAAA,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AAC9E,kBAAY,UAAU,IAAI,OAAO,UAAU,QAAQ,IAAI;AACvD,kBAAY,UAAU,IAAI,aAAa,QAAQ,IAAI;AACnD,kBAAY,UAAU,IAAI,SAAY,IAAI,IAAI;AAC9C,kBAAY,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,QAAQ,IAAI;AACjE,cAAA,IAAI,OAAO,WAAW,EAAE;AAChC,cAAQ,IAAI,cAAc,KAAK,OAAO,UAAU,MAAM;AACtD,qBAAe,KAAK,OAAO;AAAA,IAC7B;AAEA,UAAM,gBAAgB;AACtB,eAAW,UAAU,gBAAgB;AAC7B,YAAA,SAAS,QAAQ,MAAM;AAC7B,gBAAU,OAAO;AAAA,IACnB;AACA,UAAM,cAAc,SAAS;AACvB,UAAA,aAAa,SAAS,KAAK,CAAC,WAAW,OAAO,KAAK,KAAK,gBAAgB,cAC5E,cAAc;AAChB,QAAI,YAAY;AACd,YAAM,cAAc;AACd,YAAA,SAAS,IAAI,WAAW,EAAE;AAChC,YAAM,SAAS,IAAI,SAAS,OAAO,MAAM;AAClC,aAAA,UAAU,GAAG,sBAAsB,IAAI;AACpC,gBAAA,QAAQ,GAAG,EAAE;AACvB,aAAO,UAAU,IAAK,KAAK,IAAK,IAAI,IAAI;AACjC,aAAA,UAAU,IAAI,IAAI,IAAI;AACnB,gBAAA,QAAQ,IAAI,SAAS,MAAM;AAC3B,gBAAA,QAAQ,IAAI,SAAS,MAAM;AAC3B,gBAAA,QAAQ,IAAI,WAAW;AACvB,gBAAA,QAAQ,IAAI,aAAa;AAC7B,YAAA,SAAS,QAAQ,MAAM;AAC7B,gBAAU,OAAO;AACX,YAAA,UAAU,IAAI,WAAW,EAAE;AACjC,YAAM,cAAc,IAAI,SAAS,QAAQ,MAAM;AACnC,kBAAA,UAAU,GAAG,yBAAyB,IAAI;AAC5C,gBAAA,aAAa,GAAG,WAAW;AACzB,kBAAA,UAAU,IAAI,GAAG,IAAI;AAC3B,YAAA,SAAS,QAAQ,OAAO;AAC9B,gBAAU,QAAQ;AAAA,IACpB;AACM,UAAA,OAAO,IAAI,WAAW,EAAE;AAC9B,UAAM,OAAO,IAAI,SAAS,KAAK,MAAM;AAChC,SAAA,UAAU,GAAG,oBAAoB,IAAI;AAC1C,SAAK,UAAU,GAAG,aAAa,QAAS,SAAS,QAAQ,IAAI;AAC7D,SAAK,UAAU,IAAI,aAAa,QAAS,SAAS,QAAQ,IAAI;AAC9D,SAAK,UAAU,IAAI,aAAa,aAAa,aAAa,IAAI;AAC9D,SAAK,UAAU,IAAI,aAAa,aAAa,eAAe,IAAI;AAC1D,UAAA,SAAS,QAAQ,IAAI;AAC3B,UAAM,OAAO;EAAK,UAClB;AACA,UAAM,OAAO;EACf;AACF;AAEA,eAAsB,QAAQ,MAAgC;AAC5D,QAAMC,QAAO,MAAM,QAAQ,EAAE,KAAK,IAAI;AACtC,MAAI,CAACA,MAAK,UAAUA,MAAK,OAAO;AAAU,UAAA,WAAW,aAAa,wBAAwB;AACpF,QAAA,OAAO,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AAClD,MAAA;AACF,UAAM,QAAQ,MAAM,OAAO,MAAM,GAAG,CAAC;AACrC,QACE,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU,EAAE,UAAU,GAAG,IAAI,MAC9E,qBACF;AACM,YAAA,WAAW,aAAa,qBAAqB;AAAA,IACrD;AACA,UAAM,aAAa,KAAK,IAAIA,MAAK,MAAM,KAAK,KAAK;AACjD,UAAM,OAAO,MAAM,OAAO,MAAMA,MAAK,OAAO,YAAY,UAAU;AAC5D,UAAA,eAAe,kBAAkB,MAAM,kBAAkB;AAC/D,QAAI,eAAe,KAAK,eAAe,KAAK,KAAK,QAAQ;AACjD,YAAA,WAAW,aAAa,gDAAgD;AAAA,IAChF;AACA,UAAM,OAAO,IAAI;AAAA,MACf,KAAK;AAAA,MACL,KAAK,aAAa;AAAA,MAClB,KAAK,SAAS;AAAA,IAAA;AAEhB,UAAM,gBAAgB,KAAK,UAAU,IAAI,IAAI;AAC7C,QAAI,eAAe,KAAK,kBAAkB,KAAK,QAAQ;AAC/C,YAAA,WAAW,aAAa,8CAA8C;AAAA,IAC9E;AACI,QAAA,KAAK,UAAU,GAAG,IAAI,MAAM,KAAK,KAAK,UAAU,GAAG,IAAI,MAAM,GAAG;AAC5D,YAAA,WAAW,aAAa,wCAAwC;AAAA,IACxE;AACA,QAAI,QAAQ,KAAK,UAAU,IAAI,IAAI;AACnC,QAAI,KAAK,UAAU,GAAG,IAAI,MAAM,OAAO;AAC/B,YAAA,WAAW,aAAa,2BAA2B;AAAA,IAC3D;AACA,QAAI,cAAc,KAAK,UAAU,IAAI,IAAI;AACzC,QAAI,gBAAgB,KAAK,UAAU,IAAI,IAAI;AAC3C,QAAI,UAAU,SAAU,gBAAgB,cAAc,kBAAkB,YAAY;AAC5E,YAAA,eAAeA,MAAK,OAAO,aAAa;AAC9C,UAAI,eAAe;AAAU,cAAA,WAAW,aAAa,0BAA0B;AAC/E,YAAM,eAAe,MAAM,OAAO,MAAM,eAAe,IAAI,EAAE;AAC7D,YAAM,UAAU,IAAI,SAAS,aAAa,QAAQ,aAAa,YAAY,EAAE;AAC7E,UAAI,QAAQ,UAAU,GAAG,IAAI,MAAM,yBAAyB;AACpD,cAAA,WAAW,aAAa,kCAAkC;AAAA,MAClE;AACI,UAAA,QAAQ,UAAU,GAAG,IAAI,MAAM,KAAK,QAAQ,UAAU,IAAI,IAAI,MAAM,GAAG;AACnE,cAAA,WAAW,aAAa,0CAA0C;AAAA,MAC1E;AACM,YAAA,eAAe,OAAO,SAAS,CAAC;AACtC,YAAM,cAAc,MAAM,OAAO,MAAM,cAAc,EAAE;AACvD,YAAM,SAAS,IAAI,SAAS,YAAY,QAAQ,YAAY,YAAY,EAAE;AAC1E,UAAI,OAAO,UAAU,GAAG,IAAI,MAAM,sBAAsB;AAChD,cAAA,WAAW,aAAa,qCAAqC;AAAA,MACrE;AACI,UAAA,OAAO,UAAU,IAAI,IAAI,MAAM,KAAK,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAClE,cAAA,WAAW,aAAa,0CAA0C;AAAA,MAC1E;AACA,UAAI,OAAO,QAAQ,EAAE,MAAM,OAAO,QAAQ,EAAE,GAAG;AACvC,cAAA,WAAW,aAAa,6BAA6B;AAAA,MAC7D;AACQ,cAAA,OAAO,QAAQ,EAAE;AACX,oBAAA,OAAO,QAAQ,EAAE;AACf,sBAAA,OAAO,QAAQ,EAAE;AAAA,IACnC;AACA,QAAI,QAAQ;AAAwB,YAAA,WAAW,aAAa,2BAA2B;AACvF,QAAI,cAAc,uBAAuB;AACjC,YAAA,WAAW,aAAa,+CAA+C;AAAA,IAC/E;AACI,QAAA,gBAAgB,cAAcA,MAAK,MAAM;AACrC,YAAA,WAAW,aAAa,wCAAwC;AAAA,IACxE;AACA,UAAM,UAAU,MAAM,OAAO,MAAM,eAAe,WAAW;AAC7D,UAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM;AACxD,UAAM,UAAsB,CAAA;AACtB,UAAA,6BAAa;AACb,UAAA,gCAAgB;AAChB,UAAA,kCAAkB;AACxB,QAAI,WAAW;AACf,aAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACtC,UAAA,WAAW,KAAK,QAAQ,UAAU,IAAI,SAAS,QAAQ,MAAM,uBAAuB;AACtF,cAAM,WAAW,aAAa,4BAA4B,KAAK,eAAe;AAAA,MAChF;AACA,YAAM,QAAQ,IAAI,SAAS,WAAW,CAAC;AACvC,YAAM,cAAc,IAAI,SAAS,WAAW,EAAE;AAC9C,YAAM,MAAM,IAAI,SAAS,WAAW,EAAE;AACtC,UAAI,iBAAiB,IAAI,SAAS,WAAW,EAAE;AAC/C,UAAI,OAAO,IAAI,SAAS,WAAW,EAAE;AACrC,YAAM,aAAa,IAAI,SAAS,WAAW,EAAE;AAC7C,YAAM,cAAc,IAAI,SAAS,WAAW,EAAE;AAC9C,YAAMC,iBAAgB,IAAI,SAAS,WAAW,EAAE;AAChD,YAAM,qBAAqB,IAAI,SAAS,WAAW,EAAE;AACrD,UAAI,cAAc,IAAI,SAAS,WAAW,EAAE;AAC5C,YAAM,MAAM,WAAW,KAAK,aAAa,cAAcA;AACvD,UAAI,MAAM,QAAQ;AAAc,cAAA,WAAW,aAAa,gCAAgC;AACpF,UAAA;AACA,UAAA;AACK,eAAA,QAAQ,OAAO,QAAQ,SAAS,WAAW,IAAI,WAAW,KAAK,UAAU,CAAC;AAAA,MAAA,QAC3E;AACN,cAAM,WAAW,aAAa,UAAU,KAAK,oBAAoB;AAAA,MACnE;AACA,2BAAqB,IAAI;AACrB,UAAA,OAAO,IAAI,IAAI;AAAG,cAAM,WAAW,aAAa,oBAAoB,IAAI,EAAE;AAC9E,UAAI,QAAQ;AAAQ,cAAM,WAAW,aAAa,mCAAmC,IAAI,EAAE;AAC3F,UAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,WAAW,GAAG;AACjC,cAAM,WAAW,aAAa,sCAAsC,IAAI,EAAE;AAAA,MAC5E;AACA,YAAM,QAAQ,QAAQ;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK,aAAa;AAAA,MAAA;AAE/B,UAAI,SAAS,cAAc,mBAAmB,cAAc,gBAAgB,YAAY;AAChF,cAAA,SAAS,gBAAgB,KAAK;AACpC,YAAI,aAAa;AACjB,YAAI,SAAS;AAAmB,iBAAA,cAAc,QAAQ,cAAc,IAAI;AACxE,YAAI,mBAAmB,YAAY;AAChB,2BAAA,cAAc,QAAQ,cAAc,IAAI;AAAA,QAC3D;AACA,YAAI,gBAAgB;AAA0B,wBAAA,cAAc,QAAQ,cAAc,IAAI;AAAA,MACxF;AACM,YAAA,OAAQ,uBAAuB,KAAM;AACtC,WAAA,OAAO,WAAY,OAAQ;AAC9B,cAAM,WAAW,aAAa,iCAAiC,IAAI,EAAE;AAAA,MACvE;AACM,YAAA,cAAc,KAAK,SAAS,GAAG;AACrC,YAAM,aAAa,KAAK,QAAQ,OAAO,EAAE;AACrC,UAAA;AAAa,oBAAY,IAAI,UAAU;AAAA;AACtC,kBAAU,IAAI,IAAI;AACvB,YAAM,QAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MAAA;AAEF,cAAQ,KAAK,KAAK;AACX,aAAA,IAAI,MAAM,KAAK;AACX,iBAAA;AAAA,IACb;AACI,QAAA,aAAa,QAAQ,QAAQ;AACzB,YAAA,WAAW,aAAa,iCAAiC;AAAA,IACjE;AACA,eAAW,YAAY,WAAW;AAC1B,YAAA,QAAQ,SAAS,MAAM,GAAG;AAChC,UAAI,SAAS;AACb,iBAAW,QAAQ,MAAM,MAAM,GAAG,EAAE,GAAG;AACrC,iBAAS,SAAS,GAAG,MAAM,IAAI,IAAI,KAAK;AACxC,oBAAY,IAAI,MAAM;AAAA,MACxB;AAAA,IACF;AACM,UAAA,WAAW,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS,YAAY,IAAI,IAAI,CAAC;AAChE,QAAA;AAAU,YAAM,WAAW,aAAa,oCAAoC,QAAQ,EAAE;AAE1F,UAAM,YAA6C,CAAA;AACnD,eAAW,SAAS,SAAS;AAC3B,YAAM,QAAQ,MAAM,OAAO,MAAM,MAAM,aAAa,EAAE;AACtD,UAAI,IAAI,OAAO,CAAC,MAAM,qBAAqB;AACzC,cAAM,WAAW,aAAa,+BAA+B,MAAM,IAAI,EAAE;AAAA,MAC3E;AACM,YAAA,aAAa,IAAI,OAAO,CAAC;AACzB,YAAA,mBAAmB,IAAI,OAAO,CAAC;AAC/B,YAAA,kBAAkB,IAAI,OAAO,EAAE;AAC/B,YAAA,mBAAmB,IAAI,OAAO,EAAE;AACtC,UAAI,eAAe,MAAM,SAAS,qBAAqB,MAAM,aAAa;AACxE,cAAM,WAAW,aAAa,8BAA8B,MAAM,IAAI,EAAE;AAAA,MAC1E;AACA,YAAM,YAAY,MAAM,OAAO,MAAM,MAAM,cAAc,IAAI,eAAe;AACxE,UAAA;AACA,UAAA;AACiB,2BAAA,QAAQ,OAAO,SAAS;AAAA,MAAA,QACrC;AACN,cAAM,WAAW,aAAa,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC9E;AACI,UAAA,qBAAqB,MAAM,MAAM;AACnC,cAAM,WAAW,aAAa,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC9E;AACA,YAAM,aAAa,MAAM,cAAc,KAAK,kBAAkB;AACxD,YAAA,MAAM,MAAM,aAAa,MAAM;AACrC,UAAI,MAAM,eAAe;AACvB,cAAM,WAAW,aAAa,gCAAgC,MAAM,IAAI,EAAE;AAAA,MAC5E;AACA,gBAAU,KAAK,CAAC,MAAM,aAAa,KAAK,MAAM,IAAI,CAAC;AAAA,IACrD;AACU,cAAA,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;AAClD,aAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACjD,UAAA,UAAU,KAAK,EAAE,CAAC,IAAI,UAAU,QAAQ,CAAC,EAAE,CAAC,GAAG;AAC3C,cAAA,WAAW,aAAa,4BAA4B,UAAU,KAAK,EAAE,CAAC,CAAC,EAAE;AAAA,MACjF;AAAA,IACF;AACO,WAAA,EAAE,MAAMnB,UAAQ,IAAI,GAAG,MAAMkB,MAAK,MAAM,SAAS;EAAO,UAC/D;AACA,UAAM,KAAK;EACb;AACF;AAEsB,eAAA,aACpB,SACA,OACA,OACqB;AACrB,MAAI,MAAM,OAAO;AAAO,UAAM,WAAW,UAAU,6BAA6B,MAAM,IAAI,EAAE;AAC5F,QAAM,SAAuB,CAAA;AAC7B,MAAI,OAAO;AACL,QAAA,eAAe,wBAAwB,KAAK;AAC9C,MAAA;AACF,qBAAiB,SAAS,eAAe,QAAQ,MAAM,KAAK,GAAG;AAC7D,cAAQ,MAAM;AACd,UAAI,OAAO,SAAS,OAAO,MAAM,MAAM;AACrC,cAAM,WAAW,UAAU,2CAA2C,MAAM,IAAI,EAAE;AAAA,MACpF;AACA,mBAAa,OAAO,KAAK;AAClB,aAAA,KAAK,MAAM,MAAO,CAAA;AAAA,IAC3B;AAAA,WACO,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,WAAW,eAAe,wBAAwB,MAAM,IAAI,EAAE;AAAA,EACtE;AACA,eAAa,OAAO,IAAI;AAClB,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACO,SAAA;AACT;AAEsB,eAAA,eACpB,SACA,OACA,gBACqB;AACf,QAAA,eAAe,wBAAwB,KAAK;AAC9C,MAAA;AACF,qBAAiB,SAAS,eAAe,QAAQ,MAAM,KAAK;AAAG,mBAAa,OAAO,KAAK;AAAA,WACjF,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,WAAW,eAAe,wBAAwB,MAAM,IAAI,EAAE;AAAA,EACtE;AACM,QAAA,SAAS,aAAa;AAC5B,MAAI,kBAAkB,OAAO,WAAW,eAAe,eAAe;AACpE,UAAM,WAAW,WAAW,4BAA4B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,EAClF;AACO,SAAA;AACT;AAEA,SAAS,wBAAwB,OAG/B;AACA,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,MAAM;AACV,MAAI,OAAO;AACJ,SAAA;AAAA,IACL,OAAO,OAAO;AACZ,cAAQ,MAAM;AACV,UAAA,OAAO,MAAM,MAAM;AACrB,cAAM,WAAW,UAAU,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC3E;AACA,UAAI,OAAO,KAAK;AACV,YAAA,YAAY,KAAK,KAAK;AAAA,IAC9B;AAAA,IACA,OAAO,aAAa,MAAM;AACxB,UAAI,eAAe,MAAM,QAAQ,SAAS,MAAM,MAAM;AACpD,cAAM,WAAW,WAAW,wBAAwB,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,MAC9E;AACM,YAAA,aAAa,MAAM,gBAAgB;AACrC,UAAA,cAAc,MAAM,OAAO;AAC7B,cAAM,WAAW,WAAW,uBAAuB,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,MAC7E;AACA,aAAO,EAAE,MAAM,QAAQ,IAAI,aAAa,OAAO;IACjD;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,MAAc,OAA6C;AAC7E,MAAA;AACJ,MAAI,YAAY,MAAM;AAChB,QAAA,aAAa,IAAI,eAA2B;AAAA,IAChD,MAAM,QAAQ;AACL,aAAA,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,MAAM;AAC1C,YAAA,KAAK,KAAK,MAAM,UAAU;AAAA,IAClC;AAAA,IACA,MAAM,KAAK,YAAY;AACjB,UAAA,CAAC,QAAQ,cAAc,GAAG;AAC5B,aAAK,MAAM;AACX,mBAAW,MAAM;AACjB;AAAA,MACF;AACM,YAAA,SAAS,IAAI,WAAW,KAAK,IAAI,MAAM,MAAM,SAAS,CAAC;AAC7D,YAAM,OAAO,MAAM,KAAK,KAAK,MAAM;AACnC,UAAI,SAAS,MAAM;AACjB,aAAK,KAAK;AACV,mBAAW,MAAM,WAAW,aAAa,oBAAoB,MAAM,IAAI,EAAE,CAAC;AAC1E;AAAA,MACF;AACa,mBAAA;AACb,iBAAW,QAAQ,OAAO,SAAS,GAAG,IAAI,CAAC;AAAA,IAC7C;AAAA,IACA,SAAS;AACP,WAAK,MAAM;IACb;AAAA,EAAA,CACD;AACD,MAAI,MAAM,gBAAgB;AAAU,WAAA;AACpC,SAAO,WAAW;AAAA,IAChB,IAAI,oBAAoB,aAAa;AAAA,EAAA;AAKzC;AAEA,eAAe,kBAAkB,MAAoC;AACnE,QAAM,SAAsB,CAAA;AACtB,QAAA,wCAAwB;AACf,iBAAA,KAAK,mBAA2B,eAAsC;AACnF,UAAME,iBAAgB,MAAM,QAAQ,EAAE,SAAS,iBAAiB;AACnD,iBAAA,MAAMA,gBAAe,iBAAiB,GAAG;AAClD,QAAA,kBAAkB,IAAIA,cAAa,GAAG;AACxC,YAAM,IAAI,WAAW,kBAAkB,4BAA4B,aAAa,EAAE;AAAA,IACpF;AACA,sBAAkB,IAAIA,cAAa;AAC/B,QAAA;AACF,YAAM,WAAW,CAAA;AACjB,iBAAW,SAAS,MAAM,QAAQ,EAAE,QAAQA,cAAa;AAAG,iBAAS,KAAK,KAAK;AAC/E,eAAS,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,MAAM,OAAO,KAAK,KAAK,OAAO,MAAM,OAAO,IAAI,CAAC;AAC3F,iBAAW,SAAS,UAAU;AAC5B,YAAI,MAAM,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,SAAS,GAAG,KAAK,MAAM,KAAK,SAAS,IAAI,GAAG;AAChF,gBAAA,IAAI,WAAW,kBAAkB,qCAAqC;AAAA,QAC9E;AACM,cAAA,cAAc,gBAAgB,GAAG,aAAa,IAAI,MAAM,IAAI,KAAK,MAAM;AAC7E,cAAM,aAAapB,UAAQoB,gBAAe,MAAM,IAAI;AACpD,cAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,UAAU;AACvC,cAAA,WAAW,KAAK,YAAY,MAAM,UAAU,SAAS,UAAU,IAAI;AAC5D,qBAAA,MAAM,UAAU,WAAW;AAClC,cAAA,SAAS,KAAK,YAAY,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjE,YAAI,OAAO,aAAa;AACtB,iBAAO,KAAK;AAAA,YACV,aAAa,GAAG,WAAW;AAAA,YAC3B,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,UAAU,aAAa,MAAM,UAAU,MAAM;AAAA,UAAA,CAC9C;AACK,gBAAA,KAAK,UAAU,WAAW;AAAA,QAAA,WACvB,OAAO,QAAQ;AACxB,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM,OAAO;AAAA,YACb,cAAc,OAAO,QAAQ,KAAK,QAAW;AAAA,YAC7C,UAAU,aAAa,MAAM,UAAU,MAAM;AAAA,YAC7C,gBAAgB,MAAM,WAAW,QAAQ,GAAG;AAAA,UAAA,CAC7C;AAAA,QAAA,OACI;AACL,gBAAM,IAAI,WAAW,kBAAkB,6BAA6B,WAAW,EAAE;AAAA,QACnF;AAAA,MACF;AAAA,IAAA,UACA;AACA,wBAAkB,OAAOA,cAAa;AAAA,IACxC;AAAA,EACF;AACM,QAAA,KAAK,MAAM,EAAE;AACZ,SAAA;AACT;AAEA,SAAS,aAAa,MAAoB,UAAkB,QAA8B;AACxF,SAAO,KAAK,UAAU;AAAA,IACpB;AAAA,IACA,WAAW,KAAK,OAAO,QAAa,KAAA;AAAA,IACpC,OAAO,OAAO,OAAO,QAAa,KAAA;AAAA,IAClC,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,MAAM,OAAO;AAAA,EAAA,CACd;AACH;AAEA,SAAS,eAAe,QAA4B;AAC3C,SAAA;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,iBAAiB;AAAA,EAAA;AAE5B;AAEA,SAAS,aAAa,MAAc,WAAmB,OAAqB;AACpE,QAAA,OAAON,WAAS,MAAM,SAAS;AACrC,MACE,SAAS,QAAQ,KAAK,WAAW,KAAK,QAAA,EAAU,KAAK,GAAG,EAAE,KAC1Dd,UAAQ,SAAS,MAAMA,UAAQ,IAAI,KAAK,UAAU,KAClD;AACA,UAAM,IAAI,WAAW,kBAAkB,gCAAgC,KAAK,EAAE;AAAA,EAChF;AACF;AAEA,SAAS,UAAU,QAA+B;AAC1C,QAAA,SAAS,IAAI,WAAW,UAAU;AACxC,QAAM,EAAE,MAAM,OAAA,IAAW,eAAe,OAAO,WAAW;AAC9C,cAAA,QAAQ,GAAG,KAAK,IAAI;AAChC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,SAAS,cAAc,MAAQ,OAAO,aAAa,MAAQ;AAAA,EAAA;AAEzD,aAAA,QAAQ,KAAK,GAAG,CAAC;AACjB,aAAA,QAAQ,KAAK,GAAG,CAAC;AAC5B,aAAW,QAAQ,KAAK,IAAI,OAAO,IAAI;AAC5B,aAAA,QAAQ,KAAK,IAAI,CAAC;AACtB,SAAA,KAAK,IAAM,KAAK,GAAG;AAC1B,SAAO,GAAG,IAAI,OAAO,SAAS,cAAc,KAAO;AACvC,cAAA,QAAQ,KAAK,GAAG,SAAS;AACzB,cAAA,QAAQ,KAAK,GAAG,IAAI;AACpB,cAAA,QAAQ,KAAK,KAAK,MAAM;AACpC,MAAI,WAAW;AACf,aAAW,QAAQ;AAAoB,gBAAA;AACvC,gBAAc,QAAQ,QAAQ;AACvB,SAAA;AACT;AAEA,SAAS,eAAe,MAAgD;AAChE,QAAA,UAAU,IAAI;AACpB,MAAI,QAAQ,OAAO,IAAI,EAAE,UAAU;AAAK,WAAO,EAAE,MAAM,MAAM,QAAQ,GAAG;AAClE,QAAA,YAAY,KAAK,SAAS,GAAG;AACnC,QAAM,OAAO,YAAY,KAAK,MAAM,GAAG,EAAE,IAAI;AACvC,QAAA,QAAQ,KAAK,MAAM,GAAG;AAC5B,WAAS,QAAQ,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS;AACrD,UAAM,SAAS,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG;AAC7C,UAAM,OAAO,GAAG,MAAM,MAAM,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,YAAY,MAAM,EAAE;AAC/D,QAAA,QAAQ,OAAO,MAAM,EAAE,UAAU,OAAO,QAAQ,OAAO,IAAI,EAAE,UAAU,KAAK;AACvE,aAAA,EAAE,MAAM;IACjB;AAAA,EACF;AACA,QAAM,IAAI,WAAW,kBAAkB,+CAA+C,IAAI,EAAE;AAC9F;AAEA,SAAS,YAAY,QAAoB,QAAgB,QAAgB,OAAqB;AAC5F,QAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK;AAC5C,MAAI,MAAM,SAAS;AAAc,UAAA,IAAI,WAAW,kBAAkB,uBAAuB;AAClF,SAAA,IAAI,OAAO,MAAM;AAC1B;AAEA,SAAS,WAAW,QAAoB,QAAgB,QAAgB,OAAqB;AACrF,QAAAe,QAAO,MAAM,SAAS,CAAC,EAAE,SAAS,SAAS,GAAG,GAAG;AACvD,MAAIA,MAAK,UAAU;AAAc,UAAA,IAAI,WAAW,kBAAkB,qBAAqB;AACvF,cAAY,QAAQ,QAAQ,QAAQ,GAAGA,KAAI,IAAI;AACjD;AAEA,SAAS,cAAc,QAAoB,OAAqB;AAC9D,QAAMA,QAAO,MAAM,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC9C,cAAY,QAAQ,KAAK,GAAG,GAAGA,KAAI,KAAK;AAC1C;AAEA,SAAS,qBAAqB,MAAoB;AAChD,MAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,GAAG,GAAG;AAC/E,UAAM,WAAW,aAAa,sBAAsB,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,EAC5E;AACI,MAAA,aAAa,KAAK,IAAI;AAAG,UAAM,WAAW,aAAa,wBAAwB,IAAI,EAAE;AACnF,QAAA,YAAY,KAAK,SAAS,GAAG;AAC7B,QAAA,WAAW,KAAK,MAAM,GAAG;AAC/B,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AAC9C,UAAA,UAAU,SAAS,KAAK;AAE5B,QAAA,YAAY,OAAO,YAAY,QAC9B,CAAC,WAAW,EAAE,aAAa,UAAU,SAAS,SAAS,IACxD;AACA,YAAM,WAAW,aAAa,sBAAsB,IAAI,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,SAAS,WAAW,OAAe,SAAiB,OAA2B;AAC7E,SAAO,IAAI,UAAU,mBAAmB,SAAS,GAAG,OAAO;AAAA,IACzD;AAAA,IACA,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAC;AAAA,EAAA,CAC1B;AACH;AAEA,SAAS,MAAM,OAA2B;AACxC,UAAQ,YAAY,YAAY,KAAK,IAAI,gBAAgB;AAC3D;AAEA,SAAS,YAAY,KAAa,OAA2B;AAC3D,MAAI,QAAQ;AACZ,aAAW,QAAQ;AAAO,YAAQ,WAAW,QAAQ,QAAQ,GAAI,IAAK,UAAU;AAChF,SAAO,UAAU;AACnB;AAEA,eAAe,SAAS,MAAgB,OAAkC;AACxE,MAAI,SAAS;AACb,SAAO,SAAS,MAAM;AAAQ,cAAU,MAAM,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AACjF;AAEA,eAAe,iBAAiB,MAAc,QAAiC;AACvE,QAAA,QAAQ,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AACnD,MAAA;AACF,UAAM,SAAS,IAAI,WAAW,MAAM,IAAI;AACxC,WAAO,MAAM;AACX,YAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACpC,UAAI,SAAS;AAAM;AACnB,YAAM,SAAS,QAAQ,OAAO,SAAS,GAAG,IAAI,CAAC;AAAA,IACjD;AAAA,EAAA,UACA;AACA,UAAM,MAAM;EACd;AACF;AAEA,eAAe,OAAO,MAAgB,QAAgB,QAAqC;AACzF,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,KAAK,SAAS,GAAG;AACxF,UAAA,WAAW,aAAa,uBAAuB;AAAA,EACvD;AACM,QAAA,KAAK,KAAK,MAAM;AAChB,QAAA,SAAS,IAAI,WAAW,MAAM;AACpC,MAAI,WAAW;AACf,SAAO,WAAW,QAAQ;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,QAAQ,CAAC;AACtD,QAAI,SAAS;AAAY,YAAA,WAAW,aAAa,uBAAuB;AAC5D,gBAAA;AAAA,EACd;AACO,SAAA;AACT;AAEA,SAAS,kBAAkB,OAAmB,WAA2B;AACvE,WAAS,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,QAAA,IAAI,OAAO,KAAK,MAAM;AAAkB,aAAA;AAAA,EAC9C;AACO,SAAA;AACT;AAEA,SAAS,gBAAgB,OAA6B;AACpD,MAAI,WAAW;AACR,SAAA,WAAW,KAAK,MAAM,QAAQ;AAC7B,UAAA,KAAK,IAAI,OAAO,QAAQ;AAC9B,UAAM,SAAS,IAAI,OAAO,WAAW,CAAC;AAChC,UAAA,MAAM,WAAW,IAAI;AAC3B,QAAI,MAAM,MAAM;AAAc,YAAA,WAAW,aAAa,8BAA8B;AACpF,QAAI,OAAO,GAAQ;AACjB,UAAI,SAAS,MAAM;AAAS,cAAA,WAAW,aAAa,gCAAgC;AAC9E,YAAA,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,WAAW,GAAG,MAAM;AAC/E,YAAM,SAAmB,CAAA;AACzB,eAAS,SAAS,GAAG,SAAS,QAAQ,UAAU;AAAG,eAAO,KAAK,OAAO,MAAM,MAAM,CAAC;AAC5E,aAAA;AAAA,IACT;AACW,eAAA;AAAA,EACb;AACM,QAAA,WAAW,aAAa,8BAA8B;AAC9D;AAEA,SAAS,cAAc,QAAkB,OAAe,MAAsB;AACtE,QAAA,QAAQ,OAAO,KAAK;AAC1B,MAAI,UAAU;AAAW,UAAM,WAAW,aAAa,gCAAgC,IAAI,EAAE;AACtF,SAAA;AACT;AAEA,SAAS,WAAW,QAA8B;AAChD,QAAM,SAAS,IAAI,WAAW,IAAI,OAAO,SAAS,CAAC;AACnD,QAAM,OAAO,IAAI,SAAS,OAAO,MAAM;AAClC,OAAA,UAAU,GAAG,GAAQ,IAAI;AAC9B,OAAK,UAAU,GAAG,OAAO,SAAS,GAAG,IAAI;AAClC,SAAA,QAAQ,CAAC,OAAO,UAAU,UAAU,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC/D,SAAA;AACT;AAEA,SAAS,UAAU,MAAgB,QAAgB,OAAqB;AACtE,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAS,UAAA,IAAI,MAAM,wBAAwB;AACvF,OAAK,aAAa,QAAQ,OAAO,KAAK,GAAG,IAAI;AAC/C;AAEA,SAAS,OAAO,MAAgB,QAAwB;AACtD,QAAM,QAAQ,KAAK,aAAa,QAAQ,IAAI;AAC5C,MAAI,QAAQ,OAAO,OAAO,gBAAgB,GAAG;AACrC,UAAA,WAAW,UAAU,0BAA0B;AAAA,EACvD;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,IAAI,OAAmB,QAAwB;AAC/C,SAAA,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI;AACnF;AAEA,SAAS,IAAI,OAAmB,QAAwB;AAC/C,SAAA,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI;AACnF;AAEA,eAAe,eAAe,MAA6B;AACrD,MAAA;AACI,UAAA,QAAU,EAAA,OAAO,IAAI;AAAA,WACpB,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,MAAM,QAAQ,IAAI,WAAW;AC56B7B,MAAMM,aAAW,CAAC,SAAiB,UAAU,KAAK,SAAS,IAAI;AAC/D,MAAMtB,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAMC,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEhE,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,eAAe;AACrB,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB,OAAO;AAC1B,MAAA,2BAA2B,IAAI,OAAO;AACtC,MAAA,2BAA2B,KAAK,OAAO;AAEpD,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAMsB,cAAY;AAgEX,SAAS,uBAAuB,MAAoB;AACrD,MAAA,CAAC,gBAAgB,KAAK,IAAI,KAAK,SAAS,OAAO,SAAS,MAAM;AAChE,UAAM,IAAI,WAAW,2BAA2B,4BAA4B,IAAI,EAAE;AAAA,EACpF;AACF;AAEO,SAASC,gBAAc,OAAuB;AACnD,UAAQ,MAAM,KAAO,EAAA,YAAe,GAAA;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA,MAAM,OAAO;EACxB;AACF;AAEO,SAAS,YAAY,OAAuB;AACjD,UAAQ,MAAM,KAAO,EAAA,YAAe,GAAA;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA,MAAM,OAAO;EACxB;AACF;AAEO,SAAS,gBAAgB,KAAiD;AAC/E,QAAM,YAAoD;AAAA,IACxD,oBAAoB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAClD,sBAAsB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IACrD,iBAAiB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAC/C,mBAAmB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IAClD,eAAe,EAAE,IAAI,WAAW,MAAM,SAAS;AAAA,IAC/C,iBAAiB,EAAE,IAAI,WAAW,MAAM,UAAU;AAAA,IAClD,iBAAiB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAC/C,mBAAmB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IAClD,KAAK,CAAC;AAAA,IACN,OAAO,CAAC;AAAA,IACR,cAAc,CAAC;AAAA,IACf,aAAa,CAAC;AAAA,IACd,QAAQ,CAAC;AAAA,EAAA;AAEX,SAAO,UAAU,GAAG;AACtB;AAEgB,SAAA,kBACd,OACA,OACoC;AACpC,MAAI,UAAU;AAAkB,WAAA;AAC1B,QAAA,WAAWf,eAAa,OAAO,KAAK;AAC1C,gBAAc,UAAU,CAAC,MAAM,QAAQ,oBAAoB,GAAG,KAAK;AACnE,QAAM,SAAiC,CAAA;AACvC,aAAW,OAAO,CAAC,MAAM,QAAQ,oBAAoB,GAAG;AAClD,QAAA,SAAS,GAAG,MAAM,QAAW;AACxB,aAAA,GAAG,IAAI,qBAAqB,SAAS,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,IACrE;AAAA,EACF;AACA,MAAI,OAAO;AAAW,WAAA,KAAK,YAAY,OAAO,EAAE;AAChD,MAAI,OAAO;AAAa,WAAA,OAAOe,gBAAc,OAAO,IAAI;AACjD,SAAA;AACT;AAEgB,SAAA,yBACd,KACA,UACA,OACM;AACA,QAAA,UAAU,gBAAgB,GAAG;AAC/B,MAAA,CAAC,WAAW,CAAC;AAAU;AAC3B,aAAW,SAAS,CAAC,MAAM,MAAM,GAAG;AAC9B,QAAA,QAAQ,KAAK,MAAM,UAAa,SAAS,KAAK,MAAM,QAAQ,KAAK,GAAG;AACtE,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,KAAK,IAAI,KAAK,6CAA6C,GAAG;AAAA,MAAA;AAAA,IAErE;AAAA,EACF;AACF;AAEO,SAAS,mBACd,QACQ;AACR,SAAO,aAAa,MAAM;AAC5B;AAEO,SAAS,aAAa,QAAwB;AAC7C,QAAA,MAAM,SAAS,QAAQ,KAAK;AAClC,MACE,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,GAC3F;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,SAAS,IAAI,GAAG,MAAM,GAAG;AAC3B,MAAA,OAAO,KAAK,CAAC,UAAU,CAAC,eAAe,KAAK,KAAK,CAAC,GAAG;AACjD,UAAA,IAAI,WAAW,kBAAkB,qDAAqD;AAAA,EAC9F;AACI,MAAA,IAAI,WAAW,OAAO;AACxB,QAAI,OAAO,UAAU,KAAK,OAAO,GAAG,EAAE,MAAM,OAAO;AACjD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,WAAO,IAAI;AAAA,EACb;AACA,SAAO,GAAG,IAAI,EAAE,IAAI,IAAI,MAAM;AAChC;AAEO,SAAS,kBACd,aACA,SACA,QACA,OACA,SACA,WACsD;AAChD,QAAA,UAAU,IAAI,QAAQ;AAAA,IAC1B,QAAQ;AAAA,IACR,IAAI,WAAW,QAAQ,MAAM;AAAA,IAC7B,SAAS;AACX,QAAM,QAAiC;AAAA,IACrC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EAAA;AAEI,QAAA,WAAW,IAAI,uBAAuB,IAAI,cAAc,KAAK,EAAE,CAAC,EAAE;AACjE,SAAA,EAAE,OAAO;AAClB;AAEgB,SAAA,oBAAoB,OAAgB,OAA0B;AACxE,MAAA,CAAC,MAAM,QAAQ,KAAK;AAAG,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAC9E,SAAO,MAAM,IAAI,CAAC,KAAK,UAAU;AAC/B,UAAM,OAAOf,eAAa,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG;AACjC,sBAAA,MAAM,CAAC,cAAc,YAAY,WAAW,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG;AAC1F,yBAAqB,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK,cAAc;AACjE,QAAA,OAAO,KAAK,aAAa,WAAW;AACtC,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,4BAA4B;AAAA,IACvE;AACA,QACE,KAAK,YAAY,WAChB,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,QAAQ,IACzF;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,kCAAkC;AAAA,IAC7E;AAEE,QAAA,KAAK,QAAQ,QAAQ,KAAK,QAAQ,WACjC,OAAO,KAAK,QAAQ,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG,KAAK,KAAK,MAAM,KACzE,KAAK,MAAM,aACb;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,gCAAgC;AAAA,IAC3E;AACO,WAAA;AAAA,EAAA,CACR;AACH;AAEgB,SAAA,0BACd,OACA,OACyB;AACnB,QAAA,SAASA,eAAa,OAAO,KAAK;AACxC,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACI,QAAA,OAAO,KAAK,MAAM;AAAWA,qBAAa,OAAO,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE;AAAA,EAClF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO;AAAA,IAC1BA,eAAa,OAAO,qBAAqB,CAAA,GAAI,GAAG,KAAK,oBAAoB;AAAA,EAAA,GAE3E;AACA,UAAM,WAAWA,eAAa,KAAK,GAAG,KAAK,sBAAsB,IAAI,EAAE;AACvE;AAAA,MACE;AAAA,MACA,CAAC,YAAY,cAAc,YAAY,eAAe,QAAQ;AAAA,MAC9D,GAAG,KAAK,sBAAsB,IAAI;AAAA,IAAA;AAEpC,QAAI,CAAC,CAAC,QAAQ,SAAS,OAAO,KAAK,EAAE,SAAS,OAAO,SAAS,QAAQ,CAAC,GAAG;AACxE,YAAM,QAAQ,UAAU,GAAG,KAAK,sBAAsB,IAAI,sBAAsB;AAAA,IAClF;AACA,eAAW,SAAS,YAAY,GAAG,KAAK,sBAAsB,IAAI,eAAe,KAAM;AACvF,oBAAgB,SAAS,UAAU,GAAG,KAAK,sBAAsB,IAAI,WAAW;AAChF;AAAA,MACE,SAAS,eAAe,CAAC;AAAA,MACzB,GAAG,KAAK,sBAAsB,IAAI;AAAA,IAAA;AAEpC,QAAI,SAAS,WAAW,UAAa,SAAS,WAAW,MAAM;AACvD,YAAA,SAASA,eAAa,SAAS,QAAQ,GAAG,KAAK,sBAAsB,IAAI,SAAS;AACxF;AAAA,QACE;AAAA,QACA,CAAC,SAAS,SAAS,aAAa;AAAA,QAChC,GAAG,KAAK,sBAAsB,IAAI;AAAA,MAAA;AAE9B,YAAA,QAAQA,eAAa,OAAO,OAAO,GAAG,KAAK,sBAAsB,IAAI,eAAe;AACtF,UAAA,MAAM,SAAS,OAAO;AACN,0BAAA,OAAO,CAAC,MAAM,GAAG,GAAG,KAAK,sBAAsB,IAAI,eAAe;AAAA,MAAA,WAC3E,MAAM,SAAS,QAAQ;AAChC;AAAA,UACE;AAAA,UACA,CAAC,QAAQ,gBAAgB;AAAA,UACzB,GAAG,KAAK,sBAAsB,IAAI;AAAA,QAAA;AAEhC,YAAA,MAAM,mBAAmB,QAAW;AACtC;AAAA,YACE,MAAM;AAAA,YACN,GAAG,KAAK,sBAAsB,IAAI;AAAA,YAClC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA,OACK;AACL,cAAM,QAAQ,UAAU,GAAG,KAAK,sBAAsB,IAAI,+BAA+B;AAAA,MAC3F;AACAF,uBAAe,OAAO,OAAO,GAAG,KAAK,sBAAsB,IAAI,eAAe;AAC9E;AAAA,QACE,OAAO;AAAA,QACP,GAAG,KAAK,sBAAsB,IAAI;AAAA,MAAA;AAAA,IAEtC;AAAA,EACF;AACA,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACA,eACQ,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQE,eAAa,OAAO,KAAK,KAAK,CAAA,GAAI,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,GAC1F;AACA,UAAI,QAAQ;AAAM;AACZ,YAAA,QAAQA,eAAa,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3D;AAAA,QACE;AAAA,QACA,CAAC,oBAAoB,UAAU,QAAQ;AAAA,QACvC,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI;AAAA,MAAA;AAEN,2BAAA,MAAM,kBAAkB,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,mBAAmB;AACpE,2BAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,SAAS;AACnD,wBAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,SAAS;AAAA,IACpE;AAAA,EACF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO;AAAA,IAC1BA,eAAa,OAAO,iBAAiB,CAAA,GAAI,GAAG,KAAK,gBAAgB;AAAA,EAAA,GAEnE;AACA,UAAM,WAAWA,eAAa,KAAK,GAAG,KAAK,kBAAkB,IAAI,EAAE;AACnE;AAAA,MACE;AAAA,MACA,CAAC,WAAW,WAAW,UAAU,YAAY;AAAA,MAC7C,GAAG,KAAK,kBAAkB,IAAI;AAAA,IAAA;AAE5B,QAAA,CAAC,CAAC,UAAU,UAAU,EAAE,SAAS,OAAO,SAAS,OAAO,CAAC,GAAG;AAC9D,YAAM,QAAQ,UAAU,GAAG,KAAK,kBAAkB,IAAI,qBAAqB;AAAA,IAC7E;AACI,QAAA,SAAS,YAAY,QAAW;AAClC;AAAA,QACE,SAAS;AAAA,QACT,GAAG,KAAK,kBAAkB,IAAI;AAAA,QAC9B,OAAO;AAAA,MAAA;AAAA,IAEX;AACA,UAAM,UAAU;AAAA,MACd,SAAS,UAAU,CAAC;AAAA,MACpB,GAAG,KAAK,kBAAkB,IAAI;AAAA,IAAA;AAEhC,eAAW,WAAW,OAAO,KAAK,OAAO,GAAG;AAC1C,UAAI,CAAC,CAAC,UAAU,UAAU,EAAE,SAAS,OAAO,GAAG;AACvC,cAAA,QAAQ,UAAU,GAAG,KAAK,kBAAkB,IAAI,WAAW,OAAO,aAAa;AAAA,MACvF;AAAA,IACF;AACAF,qBAAe,SAAS,YAAY,GAAG,KAAK,kBAAkB,IAAI,aAAa;AAAA,EACjF;AACI,MAAA,OAAO,oBAAoB,QAAW;AACxC,UAAM,SAASE,eAAa,OAAO,iBAAiB,GAAG,KAAK,kBAAkB;AAC9E;AAAA,MACE;AAAA,MACA,CAAC,QAAQ,aAAa,oBAAoB;AAAA,MAC1C,GAAG,KAAK;AAAA,IAAA;AAEV,QACE,OAAO,SAAS,UAChB,CAAC,CAAC,YAAY,YAAY,UAAU,EAAE,SAAS,OAAO,OAAO,IAAI,CAAC,GAClE;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,kCAAkC;AAAA,IACpE;AACI,QAAA,OAAO,cAAc,QAAW;AAClC,iBAAW,OAAO,WAAW,GAAG,KAAK,8BAA8B,OAAO,gBAAgB;AAAA,IAC5F;AACA,QACE,OAAO,uBAAuB,WAC7B,CAAC,MAAM,QAAQ,OAAO,kBAAkB,KACvC,OAAO,mBAAmB,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,IACnE;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,4DAA4D;AAAA,IAC9F;AAAA,EACF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQA,eAAa,OAAO,aAAa,CAAI,GAAA,GAAG,KAAK,YAAY,CAAC,GAC9F;AACA,UAAMb,eAAca,eAAa,KAAK,GAAG,KAAK,cAAc,IAAI,EAAE;AAChD,sBAAAb,cAAa,CAAC,YAAY,aAAa,GAAG,GAAG,KAAK,cAAc,IAAI,EAAE;AACpF,QAAA,OAAOA,aAAY,aAAa,WAAW;AAC7C,YAAM,QAAQ,UAAU,GAAG,KAAK,cAAc,IAAI,2BAA2B;AAAA,IAC/E;AACkB,sBAAAA,aAAY,eAAe,IAAI,GAAG,KAAK,cAAc,IAAI,cAAc;AAAA,EAC3F;AACA,oBAAkB,OAAO,gBAAgB,CAAA,GAAI,GAAG,KAAK,eAAe;AACpEW,mBAAe,OAAO,iBAAiB,GAAG,KAAK,kBAAkB;AACjEA,mBAAe,OAAO,aAAa,GAAG,KAAK,cAAc;AAClD,SAAA;AACT;AAEO,SAAS,eAAe,OAAwC;AACrE,SAAO,IAAI,uBAAuB,UAAU,KAAK,EAAE,CAAC,EAAE;AACxD;AAEsB,eAAA,iBACpB,SACA,QACA,aACwB;AAClB,QAAA,+BAAe;AACrB,aAAW,cAAc,OAAO,OAAO,YAAY,aAAa,GAAG;AAC3D,UAAA,QAAQ,0BAA0B,YAAY,eAAe;AACnE,UAAM,OAAOP,OAAK,SAAS,MAAM,IAAI;AAC/B,UAAA,SAAS,MAAM,WAAW,IAAI;AAC3B,aAAA,IAAI,MAAM,MAAM,MAAM;AAAA,EACjC;AACA,SAAO,oBAAoB,QAAQ,aAAa,UAAU,MAAM,OAAO,IAAI;AAC7E;AAEA,eAAsB,aACpB,SACA,aACA,QACA,aACe;AACf,QAAM,YAAY,MAAM,iBAAiB,SAAS,QAAQ,WAAW;AAC/D,QAAA,UAAU,IAAI;AACpB,QAAM,eAAe,aAAa;AAAA,IAChC,EAAE,MAAM,cAAc,OAAO,QAAQ,OAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI,EAAE;AAAA,IACpF;AAAA,MACE,MAAM;AAAA,MACN,OAAO,QAAQ,OAAO,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,IACnE;AAAA,IACA,GAAG,UAAU,YAAY,IAAI,CAAC,gBAAgB;AAAA,MAC5C,MAAM,WAAW;AAAA,MACjB,MAAMA,OAAK,SAAS,WAAW,YAAY;AAAA,IAAA,EAC3C;AAAA,EAAA,CACH;AACH;AAEA,eAAsB,YAAY,MAA6C;AACvE,QAAA,UAAU,MAAM,QAAQ,IAAI;AAClC,MAAI,gBAAgB;AACT,aAAA,SAAS,QAAQ,SAAS;AACnC,QACE,MAAM,SAAS,gBAAgB,MAAM,SAAS,oBAC9C,MAAM,SAAS,sBACf,MAAM,KAAK,WAAW,UAAU,KAAK,MAAM,KAAK,SAAS,OAAO,GAChE;AACA,YAAM,QAAQ,MAAM,SAAS,gBAAgB,MAAM,SAAS,mBACxD,mBACA;AACJ,UAAI,MAAM,OAAO;AAAO,cAAM,QAAQ,UAAU,iCAAiC,MAAM,IAAI,EAAE;AAC7F,uBAAiB,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,gBAAgB,0BAA0B;AACtC,UAAA,QAAQ,UAAU,4CAA4C;AAAA,EACtE;AACA,MAAI,QAAQ,OAAO,IAAI,WAAW,GAAG;AAC7B,UAAA,QAAQ,UAAU,mCAAmC;AAAA,EAC7D;AACA,QAAM,YAAY,QAAQ,OAAO,IAAI,YAAY;AACjD,QAAM,WAAW,QAAQ,OAAO,IAAI,gBAAgB;AAChD,MAAA,CAAC,aAAa,CAAC;AAAgB,UAAA,QAAQ,UAAU,0BAA0B;AAE/E,QAAM,UAAU,YACZ;AAAA,IACA,MAAM,aAAa,SAAS,WAAW,gBAAgB;AAAA,IACvD;AAAA,EAEA,IAAA;AACE,QAAA,MAAM,WACR,IAAI,YAAY,SAAS,EAAE,OAAO,KAAM,CAAA,EAAE;AAAA,IAC1C,MAAM,aAAa,SAAS,UAAU,gBAAgB;AAAA,EAAA,EACtD,SACA;AACJ,QAAM,SAAS,MAAM,gBAAgB,GAAG,IAAI;AAC5C,MAAI,WAAW,UAAU,eAAe,OAAO,MAAM,eAAe,MAAM,GAAG;AACrE,UAAA,QAAQ,UAAU,+DAA+D;AAAA,EACzF;AACA,QAAM,SAAS,UAAU;AACzB,QAAM,YAAY,QAAQ,OAAO,IAAI,kBAAkB;AACvD,MAAI,CAAC;AAAiB,UAAA,QAAQ,gBAAgB,+BAA+B;AAC7E,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,MAAM,aAAa,SAAS,WAAW,wBAAwB;AAAA,MAC/D;AAAA,IACF;AAAA,EAAA;AAGM,aAAA,SAAS,QAAQ,QAAQ,OAAO,CAAC,cAAc,UAAU,KAAK,WAAW,UAAU,CAAC,GAC1F;AACA,UAAM,QAAQ,2BAA2B,KAAK,MAAM,IAAI;AACxD,QAAI,CAAC,OAAO;AACJ,YAAA;AAAA,QACJ;AAAA,QACA,8BAA8B,MAAM,IAAI;AAAA,QACxC,MAAM;AAAA,MAAA;AAAA,IAEV;AACI,QAAA;AACA,QAAA;AACF,iBAAW,IAAI,MAAM,WAAW,MAAM,CAAC,CAAC;AAAA,IAAA,QAClC;AACN,YAAM,QAAQ,gBAAgB,4BAA4B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IACpF;AACA,UAAM,QAAQ;AAAA,MACZ,MAAM,aAAa,SAAS,OAAO,wBAAwB;AAAA,MAC3D,MAAM;AAAA,IAAA;AAER,UAAM,WAAW,IAAI,uBAAuB,SAAS,SAAS,KAAK,EAAE,CAAC;AACtE,QAAI,CAAC,SAAS,OAAO,QAAQ,GAAG;AAC9B,YAAM,QAAQ,gBAAgB,6BAA6B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IACrF;AAAA,EACF;AACM,QAAA,+BAAe;AACrB,aAAW,SAAS,OAAO,OAAO,YAAY,aAAa,GAAG;AACtD,UAAA,UAAU,0BAA0B,OAAO,eAAe;AAChE,UAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,IAAI;AAC7C,QAAI,CAAC;AAAO,YAAM,QAAQ,iBAAiB,6BAA6B,QAAQ,IAAI,EAAE;AAClF,QAAA,MAAM,SAAS,QAAQ,MAAM;AAC/B,YAAM,QAAQ,iBAAiB,gCAAgC,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAAA,IAC7F;AACA,UAAM,WAAW,YAAY,QAAQ,QAAQ,iBAAiB,QAAQ,MAAM,EAAE;AACrE,aAAA,IAAI,QAAQ,MAAM,MAAM,eAAe,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC3E;AACA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB,QAAQ,QAAQ;AAAA,IAChB,CAAC,WAAW,CAAC,UAAU,eAAe,OAAO,MAAM,eAAe,MAAM;AAAA,EAAA;AAEpE,QAAA,aAAa,MAAM,WAAW,IAAI;AACjC,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,WAAWC,UAAQ,IAAI;AAAA,IACvB,MAAM,WAAW;AAAA,IACjB,aAAa,UAAU,WAAW,MAAM;AAAA,IACxC,OAAO;AAAA,IACP,KAAK;AAAA,MACH,KAAK,OAAO,OAAO,GAAG;AAAA,MACtB,QAAQ,aAAa,OAAO,OAAO,GAAG,CAAC;AAAA,MACvC,GAAI,OAAO,OAAO,SAAS,WAAW,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,MAC/D,UAAU,OAAO,OAAO,QAAQ;AAAA,MAChC,SAAS,OAAO,OAAO,OAAO;AAAA,MAC9B,OAAO,OAAO,OAAO,KAAK;AAAA,MAC1B,mBAAmB,UAAU;AAAA,IAC/B;AAAA,IACA,cAAc,aAAa,WAAW,SAAS,WAAW,WAAW;AAAA,IACrE,iBAAiB,UAAU;AAAA,IAC3B,aAAa,UAAU,YAAY,IAAI,CAAC,gBAAgB;AAAA,MACtD,KAAK,WAAW;AAAA,MAChB,UAAU,WAAW;AAAA,MACrB,UAAU,WAAW;AAAA,MACrB,QAAQ,WAAW;AAAA,MACnB,WAAW,WAAW;AAAA,MACtB,SAAS;AAAA,QACP,MAAM,WAAW;AAAA,QACjB,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,MACrB;AAAA,MACA,GAAI,WAAW,oBAAoB,EAAE,mBAAmB,WAAW,kBAAA,IAAsB,CAAC;AAAA,MAC1F,GAAI,WAAW,sBACX,EAAE,qBAAqB,WAAW,oBAAA,IAClC,CAAC;AAAA,IAAA,EACL;AAAA,IACF,4BAA4B;AAAA,IAC5B,sBAAsB,WAAW,2BAA2B;AAAA,IAC5D,wBAAwB;AAAA,EAAA;AAE5B;AAEO,SAAS,iBAAiB,OAAiD;AAC5E,MAAA;AACF;AAAA,MACE;AAAA,MACA,CAAC,WAAW,cAAc,mBAAmB,eAAe;AAAA,MAC5D;AAAA,IAAA;AAAA,WAEK,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,gBAAgB,MAAM,OAAO;AACtE,UAAA;AAAA,EACR;AACI,MAAA,MAAM,SAAS,MAAM,qBAAqB;AAC5C,UAAM,QAAQ,gBAAgB,yCAAyC,MAAM,SAAS,CAAC,EAAE;AAAA,EAC3F;AACA,QAAM,WAAW,qBAAqB,MAAM,YAAY,8BAA8B;AAClF,MAAA,CAACsB,YAAU,KAAK,QAAQ,KAAK,CAAC,SAAS,WAAW,SAAS,GAAG;AAC1D,UAAA,QAAQ,gBAAgB,yCAAyC;AAAA,EACzE;AACA,QAAM,iBAAiBd,eAAa,MAAM,iBAAiB,mCAAmC;AAC9F,QAAM,eAAeA,eAAa,MAAM,eAAe,iCAAiC;AACjF,SAAA;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,EAAA;AAEnB;AAEA,SAAS,oBACP,QACA,aACA,UACA,SACA,WACA,gBACe;AACf,sBAAoB,MAAM;AACpB,QAAA,QAAQ,eAAe,MAAM;AAC/B,MAAA,YAAY,eAAe,OAAO;AAC9B,UAAA,QAAQ,gBAAgB,oDAAoD;AAAA,EACpF;AACM,QAAA,aAAa,OAAO,OAAO,OAAO;AAClC,QAAA,YAAY,0BAA0B,MAAM;AAClD,QAAM,UAAU,OAAO;AACjB,QAAA,iCAAiB;AACvB,QAAM,cAAqC,CAAA;AACrC,QAAA,0CAA0B;AACrB,aAAA,CAAC,QAAQ,GAAG,KAAK,OAAO,QAAQ,YAAY,aAAa,GAAG;AACrE,UAAM,QAAQ,0BAA0B,KAAK,iBAAiB,MAAM,EAAE;AACtE,QAAI,MAAM,WAAW;AAAQ,YAAM,QAAQ,iBAAiB,wBAAwB,MAAM,EAAE;AAC5F,UAAM,cAAc,YAAY,QAAQ,iBAAiB,MAAM,EAAE;AACjE,UAAM,UAAU,SAAS,IAAI,MAAM,IAAI;AACvC,QAAI,CAAC;AAAS,YAAM,QAAQ,iBAAiB,uBAAuB,MAAM,IAAI,IAAI,MAAM,IAAI;AAC5F,QAAI,QAAQ,SAAS,MAAM,QAAQ,QAAQ,WAAW,aAAa;AACjE,YAAM,QAAQ,WAAW,yCAAyC,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IAC5F;AACA,QAAI,oBAAoB,IAAI,MAAM,YAAY,GAAG;AAC/C,YAAM,QAAQ,iBAAiB,yCAAyC,MAAM,YAAY,EAAE;AAAA,IAC9F;AACoB,wBAAA,IAAI,MAAM,cAAc,KAAK;AAAA,EACnD;AAEM,QAAA,sCAAsB;AAC5B,aACQ,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,OAAO,EAAE;AAAA,IAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAClE,KAAK,cAAc,KAAK;AAAA,EAAA,GAE1B;AACA,qCAAiC,GAAG;AACpC,UAAM,OAAOA,eAAa,SAAS,mBAAmB,GAAG,EAAE;AAC3D;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,mBAAmB,GAAG;AAAA,IAAA;AAEpB,QAAA,KAAK,eAAe,QAAW;AACjC,YAAM,QAAQ,kBAAkB,8CAA8C,GAAG,EAAE;AAAA,IACrF;AACA,UAAM,QAAQ,qBAAqB,KAAK,QAAQ,mBAAmB,GAAG,SAAS;AACzE,UAAA,WAAW,eAAe,OAAO,GAAG;AACtC,QAAA,SAAS,YAAY,YAAY;AACnC,YAAM,QAAQ,aAAa,cAAc,GAAG,yBAAyB,UAAU,EAAE;AAAA,IACnF;AACA,UAAM,aAAa,kBAAkB,SAAS,MAAM,GAAG;AACvD,UAAM,kBAAkB,WAAW,SAAS,IAAI,SAAS,EAAE,IACvD,WAAW,MAAM,GAAG,CAAC,UAAU,SAAS,CAAC,IACzC;AACJ,QACE,eAAe,cACd,CAAC,mBAAmB,gBAAgB,SAAS,GAAG,KAC/C,CAAC,wBAAwB,KAAK,eAAe,IAC/C;AACA,YAAM,QAAQ,aAAa,cAAc,GAAG,mCAAmC;AAAA,IACjF;AACA,UAAM,WAAW,qBAAqB,KAAK,WAAW,mBAAmB,GAAG,YAAY;AACpF,QAAA,CAACc,YAAU,KAAK,QAAQ,KAAK,CAAC,SAAS,WAAW,MAAM,GAAG;AAC7D,YAAM,QAAQ,gBAAgB,cAAc,GAAG,2BAA2B;AAAA,IAC5E;AACM,UAAA,gBAAgB,YAAY,gBAAgB,QAAQ;AAC1D,QAAI,CAAC;AAAe,YAAM,QAAQ,gBAAgB,8BAA8B,GAAG,EAAE;AAC/E,UAAA,WAAW,IAAI,uBAAuB,IAAI,cAAc,aAAa,EAAE,CAAC,EAAE;AAChF,QAAI,aAAa,UAAU;AACzB,YAAM,QAAQ,gBAAgB,mCAAmC,GAAG,EAAE;AAAA,IACxE;AACA,UAAM,WAAW,qBAAqB,cAAc,MAAM,eAAe,GAAG,QAAQ;AACpF,UAAM,cAAc,qBAAqB,cAAc,SAAS,eAAe,GAAG,WAAW;AAC7F,QAAI,aAAa,SAAS,QAAQ,gBAAgB,SAAS,SAAS;AAClE,YAAM,QAAQ,aAAa,+CAA+C,GAAG,EAAE;AAAA,IACjF;AACA,QAAI,cAAc,UAAU,OAAO,SAAS,cAAc,WAAW,OAAO,QAAQ;AAClF,YAAM,QAAQ,aAAa,mDAAmD,GAAG,EAAE;AAAA,IACrF;AACA,UAAM,WAAW,cAAc;AAE7B,QAAA,aAAa,UACb,OAAO,KAAKd,eAAa,UAAU,eAAe,GAAG,QAAQ,CAAC,EAAE,QAChE;AACM,YAAA;AAAA,QACJ;AAAA,QACA,yDAAyD,GAAG;AAAA,MAAA;AAAA,IAEhE;AACM,UAAA,QAAQ,oBAAoB,IAAI,GAAG;AACzC,QAAI,CAAC;AAAO,YAAM,QAAQ,iBAAiB,gCAAgC,GAAG,EAAE;AAChF,QAAI,MAAM,SAAS,GAAG,GAAG,aAAa,MAAM,WAAW,UAAU;AAC/D,YAAM,QAAQ,iBAAiB,cAAc,GAAG,kCAAkC;AAAA,IACpF;AACA,UAAM,WAAW,kBAAkB,cAAc,MAAM,eAAe,GAAG,QAAQ;AACjF,QAAI,aAAa,MAAM;AAAM,YAAM,QAAQ,WAAW,8BAA8B,GAAG,EAAE;AACzF;AAAA,MACE,qBAAqB,cAAc,SAAS,eAAe,GAAG,WAAW;AAAA,MACzE,MAAM;AAAA,MACN,YAAY,MAAM,QAAQ,iBAAiB,MAAM,MAAM,EAAE;AAAA,MACzD;AAAA,IAAA;AAEF,UAAM,WAAW,4BAA4B,KAAK,UAAU,mBAAmB,GAAG,WAAW;AAC7F,6BAAyB,KAAK,QAAQ;AACtC,QAAI,KAAK,aAAa,UAAa,OAAO,KAAK,aAAa,WAAW;AACrE,YAAM,QAAQ,UAAU,6BAA6B,GAAG,EAAE;AAAA,IAC5D;AACA,UAAM,kBAAkB;AAAA,MACtB,KAAK;AAAA,MACL,mBAAmB,GAAG;AAAA,IAAA;AAExB,UAAM,oBAAoB;AAAA,MACxB,KAAK;AAAA,MACL,mBAAmB,GAAG;AAAA,IAAA;AAExB,QAAI,qBAAqB,CAAC,cAAc,KAAK,iBAAiB,GAAG;AAC/D,YAAM,QAAQ,UAAU,gCAAgC,GAAG,EAAE;AAAA,IAC/D;AACA,eAAW,IAAI,QAAQ;AACvB,oBAAgB,IAAI,QAAQ;AAC5B,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,YAAY,gBAAgB,GAAG,KAAK;AAAA,MAC9C,UAAU,KAAK,aAAa,SAAY,OAAO,KAAK;AAAA,MACpD,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,cAAc,MAAM;AAAA,MACpB,cAAc,MAAM;AAAA,MACpB,gBAAgB,MAAM;AAAA,MACtB,GAAI,kBAAkB,EAAE,mBAAmB,oBAAoB,CAAC;AAAA,MAChE,GAAI,oBAAoB,EAAE,qBAAqB,sBAAsB,CAAC;AAAA,IAAA,CACvE;AAAA,EACH;AACA,MAAI,YAAY,WAAW;AAAS,UAAA,QAAQ,UAAU,mCAAmC;AACzF,aAAW,OAAO,OAAO,KAAK,YAAY,eAAe,GAAG;AAC1D,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,QAAQ,gBAAgB,oCAAoC,GAAG,EAAE;AAAA,IACzE;AAAA,EACF;AACI,MAAA,oBAAoB,SAAS,YAAY,QAAQ;AAC7C,UAAA,QAAQ,iBAAiB,uDAAuD;AAAA,EACxF;AACI,MAAA,gBAAgB,SAAS,YAAY,QAAQ;AACzC,UAAA,QAAQ,kBAAkB,0CAA0C;AAAA,EAC5E;AACO,SAAA;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB;AAAA,EAAA;AAEJ;AAEO,SAAS,oBAAoB,QAAuC;AACzE;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEE,MAAA,OAAO,mBAAmB,GAAG;AACzB,UAAA,QAAQ,UAAU,iCAAiC;AAAA,EAC3D;AACA,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACA,yBAAqB,OAAO,KAAK,GAAG,UAAU,KAAK,EAAE;AAAA,EACvD;AACA,MAAI,OAAO,aAAa;AAAa,UAAA,QAAQ,UAAU,6BAA6B;AACpF,MAAI,CAAC,CAAC,WAAW,QAAQ,OAAO,SAAS,cAAc,EAAE,SAAS,OAAO,OAAO,QAAQ,CAAC,GAAG;AACpF,UAAA,QAAQ,UAAU,4BAA4B;AAAA,EACtD;AACA,MAAI,OAAO,SAAS;AAAgC,yBAAA,OAAO,MAAM,aAAa;AAC/DF,mBAAA,OAAO,WAAW,kBAAkB;AACnD,aAAW,SAAS,CAAC,QAAQ,YAAY,GAAG;AACpC,UAAA,SAAS,OAAO,KAAK;AAC3B,QACE,WAAW,WACV,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,KAC3C,OAAO,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,IAClD;AACA,YAAM,QAAQ,UAAU,UAAU,KAAK,gDAAgD;AAAA,IACzF;AAAA,EACF;AACI,MAAA,OAAO,YAAY,QAAW;AAChC,UAAM,SAAS,qBAAqB,OAAO,SAAS,gBAAgB;AAChE,QAAA;AACE,UAAA,MAAM,WAAW,MAAM;AAAA,IAAA,QACrB;AACA,YAAA,QAAQ,UAAU,oCAAoC;AAAA,IAC9D;AAAA,EACF;AACA,aAAW,SAAS,CAAC,aAAa,YAAY,GAAG;AAC3C,QAAA,OAAO,KAAK,MAAM;AAAW;AACjC,UAAM,UAAUE,eAAa,OAAO,KAAK,GAAG,UAAU,KAAK,EAAE;AAC7D,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,YAAM,QAAQ,UAAU,UAAU,KAAK,iCAAiC;AAAA,IAC1E;AACA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClDA,qBAAa,OAAO,UAAU,KAAK,IAAI,GAAG,EAAE;AAAA,IAC9C;AAAA,EACF;AACkB,oBAAA,OAAO,aAAa,oBAAoB;AACxC,oBAAA,OAAO,kBAAkB,yBAAyB;AACpE,MAAI,kBAAkB,OAAO,KAAK,YAAY,MAAM,GAAG;AAC/C,UAAA,QAAQ,UAAU,sCAAsC;AAAA,EAChE;AACa,eAAA,OAAO,OAAO,GAAG,CAAC;AAC/B,WAAS,OAAO,OAAO,KAAK,GAAG,OAAO;AACtC,WAAS,OAAO,OAAO,UAAU,GAAG,YAAY;AAChD,WAAS,OAAO,OAAO,MAAM,GAAG,QAAQ;AACpC,MAAA,OAAO,gBAAgB,UAAa,CAAC,MAAM,QAAQ,OAAO,WAAW,GAAG;AACpE,UAAA,QAAQ,UAAU,qCAAqC;AAAA,EAC/D;AACA,sBAAoB,OAAO,eAAe,CAAC,GAAG,oBAAoB;AAC9D,MAAA,OAAO,qBAAqB,UAAa,CAAC,MAAM,QAAQ,OAAO,gBAAgB,GAAG;AAC9E,UAAA,QAAQ,UAAU,0CAA0C;AAAA,EACpE;AAC0B,4BAAA,OAAO,qBAAqB,4BAA4B;AAClF,QAAM,UAAUA,eAAa,OAAO,UAAU,iBAAiB;AAC/D,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAC/B,UAAA,QAAQ,UAAU,mCAAmC;AAAA,EAC7D;AACI,MAAA,OAAO,aAAa,gBAAgB;AACjB,yBAAA,OAAO,MAAM,aAAa;AAC/C,QAAI,OAAO,KAAK,OAAO,EAAE,KAAA,MAAW,gBAAgB;AAC5C,YAAA,QAAQ,UAAU,oEAAoE;AAAA,IAC9F;AAAA,EACF;AACA,4BAA0B,MAAM;AAClC;AAEA,SAAS,0BAA0B,QAAyC;AACtE,MAAA;AACF,WAAO,mBAAmB,OAAO,OAAO,GAAG,CAAC;AAAA,WACrC,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,aAAa,MAAM,OAAO;AACnE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,0BAA0B,OAAgB,OAAkC;AAC7E,QAAA,QAAQA,eAAa,OAAO,KAAK;AACzB,gBAAA,OAAO,CAAC,gBAAgB,QAAQ,UAAU,QAAQ,QAAQ,GAAG,KAAK;AAChF,QAAM,aAAa,qBAAqB,MAAM,cAAc,GAAG,KAAK,eAAe;AACnF,mCAAiC,UAAU;AAC3C,QAAM,OAAO,qBAAqB,MAAM,MAAM,GAAG,KAAK,OAAO;AACzD,MAAA,SAAS,GAAG,UAAU,WAAW;AACnC,UAAM,QAAQ,iBAAiB,yBAAyB,IAAI,EAAE;AAAA,EAChE;AACA,MAAI,MAAM,WAAW;AAAU,UAAM,QAAQ,iBAAiB,2BAA2B,IAAI,EAAE;AAC/F,QAAM,OAAO,kBAAkB,MAAM,MAAM,GAAG,KAAK,OAAO;AAC1D,QAAM,SAAS,qBAAqB,MAAM,QAAQ,GAAG,KAAK,SAAS;AACvD,cAAA,QAAQ,GAAG,KAAK,SAAS;AACrC,SAAO,EAAE,cAAc,YAAY,MAAM,QAAQ,UAAU,MAAM;AACnE;AAEA,SAAS,qBAAqB,SAAiB,MAAc,QAAgB,KAAmB;AAC1F,MAAA;AACA,MAAA;AACM,YAAA,IAAI,QAAQ,WAAW,OAAO;AAAA,EAAA,QAChC;AACN,UAAM,QAAQ,WAAW,yCAAyC,GAAG,EAAE;AAAA,EACzE;AACI,MAAA,CAAC,CAAC,UAAU,QAAQ,EAAE,SAAS,MAAM,SAAS,GAAG;AACnD,UAAM,QAAQ,WAAW,yCAAyC,GAAG,EAAE;AAAA,EACzE;AACM,QAAA,OAAO,IAAI,WAAW,MAAM;AAClC,QAAM,WAAW,MAAM,cAAc,WACjC,IAAI,QAAQ,iBAAiB,MAAM,IAAI,IACvC,IAAI,QAAQ,iBAAiB,IAAI;AACrC,MAAI,MAAM,SAAA,MAAe,SAAS,YAAY;AAC5C,UAAM,QAAQ,WAAW,wCAAwC,GAAG,EAAE;AAAA,EACxE;AACF;AAEA,SAAS,eAAe,OAAe,KAAgD;AAC/E,QAAA,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG;AAC5E,UAAM,QAAQ,aAAa,cAAc,GAAG,mCAAmC;AAAA,EACjF;AACO,SAAA,EAAE,MAAM,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC;AAC3C;AAEA,SAAS,kBAAkB,aAAqB,KAAqB;AAC7D,QAAA,QAAQ,YAAY,MAAM,GAAG;AAC7B,QAAA,mCAAmB,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,SAAS,MAAM,SAAS,KAAK,aAAa,IAAI,MAAM,CAAC,CAAC,IACxD,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IACvB,MAAM,KAAK,GAAG;AAClB,MAAI,CAAC,UAAU,OAAO,MAAM,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,wBAAwB,KAAK,KAAK,CAAC,GAAG;AACtF,UAAM,QAAQ,aAAa,cAAc,GAAG,8BAA8B;AAAA,EAC5E;AACO,SAAA;AACT;AAEA,SAAS,gBAAgB,KAAsC;AACvD,QAAA,WAAW,IAAI,MAAM,GAAG;AAC9B,MAAI,SAAS,WAAW,KAAK,CAAC,SAAS,CAAC;AAAS,UAAA,QAAQ,UAAU,yBAAyB;AACxF,MAAA;AACI,UAAA,aAAa,SAAS,CAAC,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,GAAG;AACjE,UAAA,SAAS,WAAW,OAAO,KAAK,KAAK,WAAW,SAAS,CAAC,IAAI,GAAG,GAAG;AACpE,UAAA,SAAS,KAAK,MAAM;AACpB,UAAA,QAAQ,WAAW,KAAK,QAAQ,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AACrE,WAAA,gBAAgB,OAAO,gBAAgB;AAAA,WACvC,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AAChC,UAAA,QAAQ,UAAU,sCAAsC;AAAA,EAChE;AACF;AAEA,SAAS,gBAAgB,OAAmB,OAAwC;AAClF,SAAOA,eAAa,eAAe,OAAO,KAAK,GAAG,KAAK;AACzD;AAEA,SAAS,eAAe,OAAmB,OAAwB;AAC7D,MAAA;AACF,WAAO,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK,CAAC;AAAA,WAClE,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,QAAQ,YAAY,GAAG,KAAK,oBAAoB;AAAA,EACxD;AACF;AAEA,SAAS,SAAS,OAAe,OAA+C;AACxE,QAAA,QAAQ,yBAAyB,KAAK,KAAK;AACjD,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,eAAe,GAAG,KAAK,gBAAgB;AACjE,SAAA,EAAE,QAAQ,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC;AACxC;AAEA,SAAS,YAAY,OAAe,OAAuB;AACnD,QAAA,QAAQ,cAAc,KAAK,KAAK;AACtC,MAAI,CAAC;AAAO,UAAM,QAAQ,UAAU,GAAG,KAAK,oCAAoC;AACzE,SAAA,MAAM,CAAC,EAAE;AAClB;AAEA,SAAS,4BACP,OACA,OACoC;AAChC,MAAA;AACK,WAAA,kBAAkB,OAAO,KAAK;AAAA,WAC9B,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,yBAAyB,KAAa,UAAoD;AAC7F,MAAA;AACF,6BAAyB,KAAK,UAAU,mBAAmB,GAAG,WAAW;AAAA,WAClE,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,iCAAiC,MAAoB;AACxD,MAAA;AACF,2BAAuB,IAAI;AAAA,WACpB,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEgB,SAAAA,eAAa,OAAgB,OAAwC;AAC/E,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,QAAQ,UAAU,GAAG,KAAK,oBAAoB;AAAA,EACtD;AACO,SAAA;AACT;AAEgB,SAAA,qBAAqB,OAAgB,OAAuB;AAC1E,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACrD;AACO,SAAA;AACT;AAEA,SAAS,uBAAuB,OAAgB,OAAmC;AACjF,SAAO,UAAU,SAAY,SAAY,qBAAqB,OAAO,KAAK;AAC5E;AAEA,SAAS,kBAAkB,OAAgB,OAAuB;AAC5D,MAAA,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC1E,UAAM,QAAQ,UAAU,GAAG,KAAK,sCAAsC;AAAA,EACxE;AACO,SAAA;AACT;AAEA,SAAS,WAAW,OAAgB,OAAe,SAAyB;AACpE,QAAA,SAAS,kBAAkB,OAAO,KAAK;AAC7C,MAAI,SAAS;AAAS,UAAM,QAAQ,UAAU,GAAG,KAAK,eAAe;AAC9D,SAAA;AACT;AAEA,SAAS,gBAAgB,OAAgB,OAAqB;AAC5D,MAAI,UAAU,UAAa,OAAO,UAAU,WAAW;AACrD,UAAM,QAAQ,UAAU,GAAG,KAAK,kBAAkB;AAAA,EACpD;AACF;AAEA,SAASF,iBAAe,OAAgB,OAAqB;AAC3D,MAAI,UAAU,UAAa,OAAO,UAAU,UAAU;AACpD,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACrD;AACF;AAEA,SAAS,kBAAkB,OAAgB,OAAwC;AAC3E,QAAA,SAASE,eAAa,OAAO,KAAK;AACpC,MAAA,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAClE,UAAM,QAAQ,UAAU,GAAG,KAAK,yBAAyB;AAAA,EAC3D;AACO,SAAA;AACT;AAEA,SAAS,kBACP,OACA,SACA,OACM;AACA,QAAA,WAAW,IAAI,IAAI,OAAO;AAChC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC;AAC/D,MAAA;AAAS,UAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,OAAO,iBAAiB;AAC3E;AAEgB,SAAA,cACd,OACA,SACA,OACM;AACA,QAAA,WAAW,IAAI,IAAI,OAAO;AAChC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC;AACrE,MAAI,QAAQ,QAAQ;AACZ,UAAA,IAAI,WAAW,4BAA4B,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,iBAAiB;AAAA,EAC1F;AACF;AAEA,SAAS,QAAQ,OAAe,SAAiB,OAA2B;AAC1E,SAAO,IAAI,UAAU,mBAAmB,SAAS,GAAG,OAAO;AAAA,IACzD;AAAA,IACA,GAAI,QAAQ,EAAE,OAAOa,WAAS,KAAK,MAAM,CAAC;AAAA,EAAA,CAC3C;AACH;AAEO,SAAS,iBAAiB,OAAwB;AAChD,SAAA,YAAY,IAAI,cAAc,OAAO,IAAI,sBAAsB,KAAK,CAAC,CAAC;AAC/E;AAEgB,SAAA,wBAAwB,OAAgB,aAAmC;AACrF,MAAA,CAAC,MAAM,QAAQ,KAAK;AAAS,UAAA,QAAQ,UAAU,mCAAmC;AAChF,QAAA,0BAAU;AAChB,aAAW,OAAO,OAAO;AACjB,UAAA,IAAIb,eAAa,KAAK,iBAAiB;AAC7C,UAAM,KAAK,qBAAqB,EAAE,YAAY,YAAY;AAC1D,QAAI,CAAC,mBAAmB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE;AAAS,YAAA,QAAQ,UAAU,iCAAiC;AAC1G,QAAI,IAAI,EAAE;AACN,QAAA,CAAC,OAAO,cAAc,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;AAAS,YAAA,QAAQ,UAAU,yBAAyB;AAC5G,QAAA,CAAC,MAAM,QAAQ,EAAE,SAAS,KAAK,CAAC,EAAE,UAAU;AAAc,YAAA,QAAQ,UAAU,mBAAmB;AACxF,eAAA,eAAe,EAAE,WAAW;AAC/B,YAAA,IAAIA,eAAa,aAAa,UAAU;AAC1C,UAAA,CAAC,CAAC,QAAQ,WAAW,UAAU,KAAK,EAAE,KAAK,CAAK,MAAA,KAAK,CAAC;AAAS,cAAA,QAAQ,UAAU,gBAAgB;AACrG,iBAAW,OAAO,CAAC,QAAQ,WAAW,QAAQ,GAAG;AACzC,cAAA,IAAI,EAAE,GAAG;AACX,YAAA,MAAM,UAAa,EAAE,OAAO,MAAM,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,OAAK,OAAO,MAAM,YAAY,EAAE,MAAM;AAAU,gBAAA,QAAQ,UAAU,wBAAwB;AAAA,MACrM;AACA,UAAI,EAAE,YAAY,WAAc,CAAC,OAAO,cAAc,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;AAAU,cAAA,QAAQ,UAAU,iBAAiB;AAAA,IACvI;AACA,UAAM,UAAUA,eAAa,EAAE,SAAS,SAAS;AACjD,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,KAAK,CAAC,QAAQ;AAAY,YAAA,QAAQ,UAAU,+BAA+B;AAC/G,UAAMgB,QAAOhB,eAAa,QAAQ,MAAM,MAAM;AAC9C,UAAM,QAAQA,eAAagB,MAAK,OAAO,OAAO;AAC9C,UAAM,OAAO,qBAAqB,MAAM,MAAM,YAAY;AACtD,QAAA;AACA,QAAA;AAAE,gBAAU,mBAAmB,IAAI;AAAA,IAAA,QAAU;AAAQ,YAAA,QAAQ,UAAU,oBAAoB;AAAA,IAAE;AACjG,QAAI,MAAM,SAAS,SAAS,CAAC,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,GAAG,KAAK,SAAS,KAAK,OAAO;AAAS,YAAA,QAAQ,UAAU,kBAAkB;AAC9P,QAAIA,MAAK,aAAa,WAAc,CAAC,OAAO,cAAcA,MAAK,QAAQ,KAAK,OAAOA,MAAK,QAAQ,IAAI,KAAK,OAAOA,MAAK,QAAQ,IAAI;AAAW,YAAA,QAAQ,UAAU,wBAAwB;AACtL,QAAIA,MAAK,WAAW,UAAaA,MAAK,WAAW,SAASA,MAAK,WAAW;AAAe,YAAA,QAAQ,UAAU,uBAAuB;AAClI,QAAIA,MAAK,gBAAgB,UAAa,OAAOA,MAAK,gBAAgB;AAAiB,YAAA,QAAQ,UAAU,qBAAqB;AACtH,QAAAA,MAAK,UAAU,WAAc,CAAC,MAAM,QAAQA,MAAK,KAAK,KAAK,CAACA,MAAK,MAAM,UAAUA,MAAK,MAAM,KAAK,OAAK,MAAM,UAAU,MAAM,MAAM;AAAU,YAAA,QAAQ,UAAU,eAAe;AAC7K,QAAA,EAAE,gBAAgB,WAAc,CAAC,MAAM,QAAQ,EAAE,WAAW,KAAK,EAAE,YAAY,KAAK,WAAS,CAAC,YAAY,KAAK,CAAA,MAAK,KAAK,OAAO,MAAM,YAAa,EAA8B,eAAe,KAAK,CAAC;AAAU,YAAA,QAAQ,UAAU,4CAA4C;AAAA,EACpR;AACO,SAAA;AACT;AC5pCO,MAAM,kBAAkB;AACxB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,mBAAmB;ACqChC,MAAM,WAAW,CAAC,SAAiB,UAAU,KAAK,SAAS,IAAI;AAC/D,MAAM,UAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAM1B,eAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAM,OAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAM,WAAW,CAAC,MAAc,OAAe,UAAU,KAAK,SAAS,MAAM,EAAE;AAC/E,MAAME,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,gCAAgC,IAAI,MAAM,KAAK,KAAK;AAC1D,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAMyB,YAAU;AAChB,MAAM,YAAY;AAClB,MAAM,YAAY;AAClB,MAAM,sBAAsB;AAC5B,MAAMpB,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAC5E,MAAM,YAAY,CAAC,cAAc,UAAU,UAAU,cAAc;AACnE,MAAM,aAAsF;AAAA,EAC1F,cAAc,EAAE,KAAK,OAAO,UAAU,OAAO,cAAc,SAAS;AAAA,EACpE,QAAQ,EAAE,KAAK,UAAU,UAAU,QAAQ,cAAc,SAAS;AAAA,EAClE,gBAAgB,EAAE,KAAK,gBAAgB,UAAU,gBAAgB,cAAc,SAAS;AAC1F;AAmFA,SAAS,4BACP,KACA,UACQ;AACF,QAAA,YAAY,YAAY,gBAAgB,GAAG;AACjD,QAAM,KAAK,WAAW;AACtB,QAAM,OAAO,WAAW;AACpB,MAAA,CAAC,MAAM,CAAC;AAAa,WAAA;AACnB,QAAA,gBAAgB,OAAO,UAAU,UAAU;AAC3C,QAAA,kBAAkB,SAAS,WAAW,UAAU;AACtD,QAAM,YAAY,WAAW,aAAa,IAAI,eAAe;AAC7D,8BAAW,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAA,GAAE,IAAI,SAAS,IACd,YACA;AACN;AAEgB,SAAA,iBAAiB,eAAuC,IAAmB;AACzF,QAAM,SAAS,aAAa,UAAU,IAAI,kBAAkB;AACtD,QAAA,MAAM,aAAa,OAAO;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,uBAAuB,iCAAiC;AAAA,QACnE,SAAS,OAAO,KAAK,UAAU,MAAM,cAAc,KAAK,KAAK;AAAA,MAC/D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aAAa;AAAA,UACX,EAAE,MAAM,eAAe,aAAa,kCAAkC,UAAU,MAAM;AAAA,QACxF;AAAA,QACA,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,YAAY,MAAM,SAAS;AAAA,UACxD,EAAE,MAAM,SAAS,aAAa,aAAa,MAAM,SAAS;AAAA,UAC1D;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,WAAW,aAAa,uBAAuB,MAAM,SAAS;AAAA,UACtE,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,oBAAoB,MAAM,SAAS;AAAA,QAC1F;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,aAAa,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC5C,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACtC,MAAM,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACxC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACvC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACxC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC1C;AAAA,UACA,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,OAAO,MAAM;AAAA,MACrE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,gCAAgC;AAAA,QAC3C,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,OAAO,QAAQ,GAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,+BAA+B,UAAU,MAAM;AAAA,QAClF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,+BAA+B;AAAA,QAC1C,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,KAAK;AAAA,MAC7D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,oBAAoB;AAAA,QACpE,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UAC1D,UAAU,CAAC,WAAW;AAAA,UACtB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,+CAA+C;AAAA,QAC1D,SAAS,OAAO,KAAK,UACnB,MAAM,YAAYqB,iBAAe,KAAK,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,MAChF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcrB;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,QAC9C,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,wDAAwD;AAAA,QACnE,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,KAAK;AAAA,MAC9D;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,6BAAqC;AAC5C,QAAM,aAAa,QAAA,EAAU,IAAI,mBAAmB;AACpD,MAAI,eAAe;AAAW,WAAO,KAAK,MAAM,KAAK,QAAQ,GAAI;AACjE,MAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,UAAU,OAAO,UAAU;AACjC,MAAI,CAAC,OAAO,cAAc,OAAO,GAAG;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AACtD,QAAA,UAAUqB,iBAAe,KAAK,SAAS;AAC7C,QAAM,SAAyC,CAAA;AAC3C,MAAA;AACA,MAAA;AAEI,aAAA,CAAC,MAAM,IAAI,KAAK;AAAA,IACpB,CAAC,gBAAgB,KAAK,SAAS,UAAU,CAAC;AAAA,IAC1C,CAAC,iBAAiB,KAAK,SAAS,WAAW,CAAC;AAAA,EAAA,GAE9C;AACI,QAAA;AACF,YAAM,QAAQ,MAAM,SAAS,MAAM,IAAI;AACvC,UAAI,SAAS;AAA0B,kBAAA;AAAA;AACvB,mBAAA;AAChB,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM;AAAA,aACjC,OAAO;AACd,aAAO,KAAK;AAAA,QACV;AAAA,QACA,QAAQ,YAAY,OAAO,UAAU,IAAI,YAAY;AAAA,QACrD;AAAA,QACA,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAAA,CAC9D;AAAA,IACH;AAAA,EACF;AACA,MAAI,WAAW,UAAU;AACnB,QAAA;AACI,YAAA,MAAM,aAAa,OAAO;AAC1B,YAAA,OAAO,cAAc,UAAU,GAAG;AACxC,YAAM,iBAA2B,CAAA;AACjC,iBAAW,cAAc,OAAO,OAAO,KAAK,QAAQ,GAAG;AACjD,YAAA,WAAW,OAAO,SAAS;AAAQ;AACvC,cAAM,SAAS1B,UAAQ,SAAS,WAAW,OAAO,IAAI;AAClD,YAAA;AACI,gBAAA,QAAU,EAAA,MAAM,MAAM;AAAA,iBACrB,OAAO;AACV,cAAA,YAAY,OAAO,UAAU;AAAG,2BAAe,KAAK,MAAM;AAAA;AACnD,kBAAA;AAAA,QACb;AAAA,MACF;AACA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,eAAe,WAAW,IAAI,OAAO;AAAA,QAC7C,SAAS;AAAA,MAAA,CACV;AAAA,aACM,OAAO;AACd,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAAA,CAC9D;AAAA,IACH;AAAA,EACF;AACA,QAAM,eAAe,MAAM,IAAI,YAAY,WAAW;AACtD,QAAM,cAAc,IAAI,OAAO,eAAe,aAAa;AAC3D,QAAM,UAAU,cAAc,MAAM,IAAI,YAAY,YAAY,WAAW,IAAI;AAC/E,QAAMP,QAAO;AACN,SAAA;AAAA,IACL,SAAS,OAAO,MAAM,CAAC,UAAU,MAAM,WAAW,IAAI;AAAA,IACtD,cAAc;AAAA,IACd,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,GAAG,WAAWA,KAAI;AAAA,IAClB,uBAAuB,yBAAyB,MAAM,yBAAyBA,KAAI,CAAC;AAAA,IACpF,QAAQ;AAAA,MACN,SAAS,eAAe;AAAA,MACxB,MAAM,IAAI,OAAO,QAAQ,SAAS,QAAQ;AAAA,MAC1C,UAAU,IAAI,OAAO,YAAY,SAAS,YAAY;AAAA,MACtD,eAAe;AAAA,IACjB;AAAA,IACA,qBAAqB,MAAM,sBAAsB,IAAI,MAAM;AAAA,IAC3D;AAAA,EAAA;AAEJ;AAEA,eAAe,YACb,KACA,OACA,QACkC;AAClC,QAAM,eAAe,oBAAoB,OAAO,aAAa,KAAK;AAClE,QAAM,aAAa,MAAM,cAAciC,iBAAe,KAAK,YAAY,GAAG,mBAAmB;AACzF,MAAA,OAAO,oBAAoB,OAAO,MAAM,KAAK,iBAAiB,SAAS,UAAU,CAAC;AAChF,QAAA,YAAY,CAAC,IAAI,OAAO,kBAAkB,CAAC,IAAI,eAAe,IAAI,GAAG;AAC3E,MAAI,CAAC;AAAM,WAAO,MAAM,eAAe,KAAK,WAAW,cAAc,MAAM;AACvE,MAAA,QAAQ,oBAAoB,OAAO,OAAO;AAC9C,MAAI,CAAC;AAAO,YAAQ,MAAM,eAAe,KAAK,WAAW,eAAe,OAAO;AAC3E,MAAA,OAAO,oBAAoB,OAAO,MAAM;AAC5C,MAAI,CAAC,MAAM;AACT,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA,aAAa,UAAU,KAAK,GAAG,CAAC;AAAA,MAChC;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,CAAC,UAAU,SAAS,IAAI,GAAG;AAC7B,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,IAAI,EAAE;AAAA,EACtE;AACI,MAAA,SAAS,oBAAoB,OAAO,QAAQ;AAChD,MAAI,CAAC;AAAQ,aAAS,MAAM,eAAe,KAAK,WAAW,YAAY,QAAQ;AAC/E,QAAM,UAAU,oBAAoB,OAAO,SAAS,KAAK;AACzD,kBAAgB,IAAI;AACpB,kBAAgB,OAAO;AACjB,QAAA,aAAa,aAAa,MAAM,KAAK;AAC3C,QAAM,SAAS,oBAAoB,OAAO,SAAS,KAAK;AACxD,qBAAmB,MAAM;AAErB,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAAC;AACJ,MAAI,SAAS,UAAU;AACrB,UAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM;AACnC,UAAA,OAAOJ,gBAAc,MAAM,YAAY;AAC7C,oBAAgB,SAAS,WACrB,uBACA,SAAS,YACT,0BACC,MAAM;AACP,YAAM,IAAI,WAAW,4BAA4B,oCAAoC,IAAI,EAAE;AAAA,IAAA;AAEpF,eAAA,EAAE,IAAI,SAAS,KAAK;AAC/B,kBAAc,EAAE,MAAM,gBAAgB,OAAO,OAAO;AACpC,IAAAI,iBAAA,EAAE,MAAM,gBAAgB,OAAO,MAAM,eAAe,UAAU,MAAM;EAAG,OAClF;AACW,oBAAA,WAAW,IAAI,EAAE;AAC3B,UAAA,iBAAiB3B,UAAQ,YAAY,MAAM;AACjD,UAAM,kBAAkBF,aAAW,MAAM,IACrCE,UAAQ,MAAM,IACd,eAAe,SAAS,KAAK,YAAY,WAAW,GAAG,cAAc,CAAC;AAC1E,kBAAc,EAAE,MAAM,QAAQ,MAAM,gBAAgB;AACpD,IAAA2B,iBAAgB,EAAE,MAAM,QAAQ,MAAM,cAAc,YAAY,cAAc;AAC1E,QAAA;AACI,YAAA,QAAU,EAAA,MAAM,cAAc;AAAA,aAC7B,OAAO;AACV,UAAA,YAAY,OAAO,UAAU,GAAG;AAClC,cAAM,IAAI,GAAG,OAAO,uCAAuCA,eAAc,IAAI;AAAA,CAAI;AAAA,MACnF;AAAa,cAAA;AAAA,IACf;AAAA,EACF;AAEA,QAAM,UAAmB;AAAA,IACvB,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY,CAAC,WAAW,IAAI,GAAG,YAAY,MAAM;AAAA,IACjD,aAAa,CAAC;AAAA,IACd,eAAe,WAAW,IAAI,GAAG,gBAAgB;AAAA,IACjD,qBAAqB,CAAC;AAAA,EAAA;AAExB,QAAM,WAAW;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW,GAAG,IAAI,IAAI,OAAO;AAAA,IAC7B,UAAU;AAAA,MACR,CAAC,aAAa,GAAG;AAAA,QACf,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EAAA;AAEW,eAAA,EAAE,GAAG,QAAA,CAAS;AAC3B,gBAAc,QAAQ;AAChB,QAAA,UAAU,KAAK,YAAY,WAAW;AAC5C,QAAM,wBAAwB,YAAY,SAAS,SAAS,QAAQ;AAC7D,SAAA;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB,CAAC,KAAK,SAAS,UAAU,GAAG,KAAK,SAAS,WAAW,CAAC;AAAA,IACvE,KAAK;AAAA,MACH,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY,QAAQ;AAAA,MACpB,aAAa,CAAC;AAAA,MACd,eAAe,QAAQ;AAAA,MACvB,qBAAqB,CAAC;AAAA,IACxB;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL;AAAA,MACA,QAAQA;AAAA,MACR,UAAU;AAAA,MACV,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,IACjC;AAAA,IACA,YAAY,KAAK,YAAY,WAAW;AAAA,IACxC,WAAW,SAAS;AAAA,IACpB,cAAc,sBAAsB,OAAO;AAAA,EAAA;AAE/C;AAEA,eAAe,aACb,KACA,OACA,QACA,KACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,cAAcD,iBAAe,KAAK,SAAS,GAAG,WAAW;AACzE,QAAA,UAAU,aAAa,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG,UAAU,CAAC;AAC5E,QAAA,WAAW,cAAc,MAAM,SAAS,KAAK,SAAS,WAAW,GAAG,WAAW,GAAG,OAAO;AAC/F,QAAM,iBAAiB1B,UAAQ,SAAS,SAAS,UAAU;AACrD,QAAA,kBAAkB,gBAAgB,mBAAmB;AACrD,QAAA,UAAU,MAAM,gBAAgB,cAAc;AAC9C,QAAA,aAAa,QAAQ,OAAO;AAClC,QAAM,cAAwB,CAAA;AAC9B,aAAW,cAAc,OAAO,OAAO,SAAS,QAAQ,GAAG;AACrD,QAAA,WAAW,OAAO,SAAS,QAAQ;AACzB,kBAAA,KAAK,MAAM,QAAA,EAAU,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,IACrF;AAAA,EACF;AACiB,mBAAA,SAAS,SAAS,WAAW;AAC9C,QAAM,wBAAwB,SAAS,WAAW,OAAO,CAAC;AACpD,QAAA,QAAA,EAAU,MAAM,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAA,CAAM;AAC3D,QAAM,YAAY,MAAM,QAAQ,EAAE,YAAY;AAAA,IAC5C,KAAK,QAAQ,OAAO;AAAA,IACpB,QAAQ;AAAA,EAAA,CACT;AACG,MAAA;AACF,UAAM,WAAiC,CAAA;AAE/B,eAAA,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,SAAS,QAAQ,EAAE;AAAA,MAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MACxE,EAAE,cAAc,CAAC;AAAA,IAAA,GAEnB;AACA,YAAM,cAAc,KAAK,WAAW,GAAG,GAAG,SAAS;AAC/C,UAAA;AACA,UAAA,WAAW,OAAO,SAAS,QAAQ;AAC/B,cAAA,aAAa,MAAM,QAAU,EAAA,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC;AACpF,cAAM,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU;AAC5C,YAAI,KAAK,aAAa;AACd,gBAAA,yBAAyB,YAAY,WAAW;AAAA,QAAA,WAC7C,KAAK,UAAU,WAAW,cAAc,SAAS,SAAS,GAAG;AAChE,gBAAA,SAAS,MAAM,WAAW,UAAU;AAC1C,gBAAM,aAAa,aAAa,MAAM,QAAU,EAAA,KAAK,UAAU,CAAC;AAChE,gBAAM,QAAQ,EAAE,SAAS,YAAY,WAAW;AAC1C,gBAAA,QAAQ,MAAM,WAAW,UAAU;AACzC,gBAAM,YAAY,aAAa,MAAM,QAAU,EAAA,KAAK,UAAU,CAAC;AACzD,gBAAA,SAAS,MAAM,WAAW,WAAW;AAC3C,cACE,eAAe,aAAa,OAAO,SAAS,MAAM,QAClD,OAAO,WAAW,MAAM,UAAU,OAAO,SAAS,OAAO,QACzD,OAAO,WAAW,OAAO,QACzB;AACA,kBAAM,IAAI,UAAU,kBAAkB,gCAAgC,GAAG,EAAE;AAAA,UAC7E;AAAA,QAAA,OACK;AACL,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,GAAG,GAAG;AAAA,UAAA;AAAA,QAEV;AAAA,MAAA,OACK;AACL,qBAAa,MAAM,OAAO,QAAQ,WAAW,OAAO,KAAK;AACzD,YAAI,CAAC,UAAU,KAAK,WAAW,EAAE,GAAG;AAClC,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,gBAAgB,GAAG;AAAA,UAAA;AAAA,QAEvB;AACA,cAAM,OAAO,KAAK,WAAW,IAAI,WAAW;AAC5C,cAAM,QAAQ,MAAM,OAAO,QAAQ,WAAW,EAAE;AAC5C,YAAA,MAAM,OAAO,WAAW,IAAI;AAC9B,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,kDAAkD,GAAG;AAAA,UAAA;AAAA,QAEzD;AAAA,MACF;AACM,YAAA,SAAS,MAAM,WAAW,WAAW;AAC3C,eAAS,KAAK;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,QAAQ,EAAE,MAAM,OAAO,MAAM,QAAQ,UAAU,OAAO,MAAM,GAAG;AAAA,QAC/D,GAAI,aAAa,EAAE,QAAQ,eAAe,CAAC;AAAA,MAAA,CAC5C;AAAA,IACH;AAEA,UAAM,YAAY;AAClB,QAAI,CAAC,OAAO,cAAc,SAAS,KAAK,YAAY;AAAS,YAAA,IAAI,MAAM,qBAAqB;AACtF,UAAA,YAAY,mBAAmB,QAAQ,GAAG;AAChD,UAAM,iBAA0D,CAAA;AAChE,UAAM,eAAiD,CAAA;AACvD,UAAM,UAAmD,CAAA;AACzD,UAAM,uBAAoD,CAAA;AACpD,UAAA,mCAAmB;AACzB,eAAW,QAAQ,UAAU;AAC3B,YAAM,cAAc,GAAG,4BAA4B,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC,IAC/E,cAAc,KAAK,GAAG,CACxB,IAAI,SAAS;AACT,UAAA,aAAa,IAAI,WAAW,GAAG;AACjC,cAAM,IAAI,WAAW,0BAA0B,+BAA+B,WAAW,EAAE;AAAA,MAC7F;AACA,mBAAa,IAAI,WAAW;AAC5B,YAAM,cAAc,KAAK,OAAO,OAAO,MAAM,UAAU,MAAM;AAC7D,YAAM4B,eAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,EAAE,MAAM,KAAK,OAAO,MAAM,QAAQ,aAAa,OAAO,EAAE;AAAA,QACxD;AAAA,MAAA;AAEaA,qBAAAA,aAAY,QAAQ,IAAIA,aAAY;AACnD,UAAI,aAAa,KAAK,OAAO,MAAM,GAAG;AACpC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,qDAAqD,KAAK,GAAG;AAAA,QAAA;AAAA,MAEjE;AACa,mBAAA,KAAK,OAAO,MAAM,IAAI;AAAA,QACjC,cAAc,KAAK;AAAA,QACnB,MAAM,GAAG,KAAK,GAAG;AAAA,QACjB,QAAQ;AAAA,QACR,MAAM,KAAK,OAAO;AAAA,QAClB,QAAQ,KAAK,OAAO;AAAA,MAAA;AAEhB,YAAA,WAAW,KAAK,MAAM;AACpB,cAAA,KAAK,GAAG,IAAI;AAAA,QAClB,QAAQ,GAAG,WAAW,IAAI,QAAQ,OAAO;AAAA,QACzC,WAAWA,aAAY;AAAA,QACvB,GAAI,KAAK,SACL;AAAA,UACA,mBAAmB,KAAK,OAAO;AAAA,UAC/B,qBAAqB,KAAK,OAAO;AAAA,QAAA,IAEjC,CAAC;AAAA,QACL,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,KAAK,MAAM;AAAA,MAAA;AAEF,2BAAA,KAAK,GAAG,IAAI;AAAA,QAC/B,aAAa,KAAK,MAAM,OAAO;AAAA,QAC/B,MAAM,KAAK,OAAO;AAAA,QAClB,QAAQ,KAAK,OAAO;AAAA,QACpB,WAAWA,aAAY;AAAA,MAAA;AAAA,IAE3B;AACA,UAAM,SAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,KAAK,QAAQ;AAAA,MACb,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ,WAAW,CAAC;AAAA,MAC9B,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,KAAK,YAAY;AAAA,MACjB,YAAY,QAAQ;AAAA,MACpB,UAAU;AAAA,MACV,WAAW,QAAQ;AAAA,MACnB,GAAI,QAAQ,YAAY,SAAS,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACzE,GAAI,QAAQ,kBAAkB,SAAS,EAAE,kBAAkB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,MACzF,eAAe,QAAQ;AAAA,MACvB,qBAAqB,QAAQ;AAAA,IAAA;AAEzB,UAAA,cAAc,eAAe,MAAM;AACzC,UAAM,cAA+B;AAAA,MACnC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,eAAe;AAAA,IAAA;AAEjB,UAAM,UAAU,KAAK,WAAW,YAAY,GAAG,MAAM;AACrD,UAAM,UAAU,KAAK,WAAW,kBAAkB,GAAG,WAAW;AAChE,UAAM,YAAY,MAAM,iBAAiB,WAAW,QAAQ,WAAW;AACvE,UAAM,iBAAkD,CAAA;AACxD,eACQ,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,GAAG,SAAS,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,SAAS;AAAA,IAAA,GAEhD;AACA,YAAM,SAAS,MAAM,WAAW,KAAK,WAAW,IAAI,CAAC;AACtC,qBAAA,IAAI,IAAI,EAAE,MAAM,OAAO,MAAM,QAAQ,UAAU,OAAO,MAAM,GAAG;AAAA,IAChF;AACA,UAAM,WAAyB;AAAA,MAC7B,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc,WAAW,OAAO;AAAA,MAChC,oBAAoB,UAClB,iBAAiB;AAAA,QACf,KAAK;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACX,CAAA,CACH;AAAA,MACA,mBAAmB;AAAA,MACnB,WAAW,SAAS;AAAA,MACpB,iBAAiB;AAAA,MACjB,aAAa;AAAA,IAAA;AAEf,UAAM,UAAU,KAAK,WAAW,kBAAkB,GAAG,QAAQ;AACvD,UAAA,iBAAiB,WAAW,OAAO;AAClC,WAAA;AAAA,MACL,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,mBAAmB;AAAA,MACnB,kBAAkB,UAAU,YAAY;AAAA,MACxC,aAAa,UAAU,YAAY,IAAI,CAAC,UAAU;AAAA,QAChD,KAAK,KAAK;AAAA,QACV,aAAa,SAAS,SAAS,KAAK,GAAG,EAAE,OAAO;AAAA,QAChD,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,MAAA,EAChB;AAAA,MACF,gBAAgB;AAAA,MAChB,cAAc,qBAAqB,OAAO;AAAA,MAC1C,aAAa;AAAA,IAAA;AAAA,WAER,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,YACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,sBAAsBF,iBAAe,KAAK,SAAS,GAAG,WAAW;AACvF,QAAM,WAAW,MAAM,oBAAoB,SAAS,QAAW,IAAI;AACnE,QAAM,SAAS,MAAM,SAAS,KAAK,SAAS,YAAY,GAAG,YAAY;AACvE,QAAM,cAAc;AAAA,IAClB,MAAM,SAAS,KAAK,SAAS,kBAAkB,GAAG,kBAAkB;AAAA,EAAA;AAEtE,QAAM,YAAY,MAAM,iBAAiB,SAAS,QAAQ,WAAW;AACjE,MAAA,UAAU,mBAAmB,SAAS,mBAAmB;AAC3D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,YAAY,KAAK,SAAS,IAAI,SAAS,SAAS,QAAQ,OAAO,WAAY,CAAA,EAAE;AACnF,QAAM,YAAY,KAAK,SAAS,SAAS,SAAS;AAC9C,MAAA;AACF,UAAM,aAAa,SAAS,WAAW,QAAQ,WAAW;AACpD,UAAA,aAAa,MAAM,YAAY,SAAS;AAC9C,QAAI,WAAW,IAAI,sBAAsB,SAAS,mBAAmB;AACnE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACM,UAAA,YAAY,WAAW,SAAS;AAChC,UAAA,SAAS,MAAM,WAAW,SAAS;AAClC,WAAA;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,MAAM,OAAO;AAAA,MACb,aAAa,UAAU,OAAO,MAAM;AAAA,MACpC,mBAAmB,WAAW,IAAI;AAAA,MAClC,YAAY;AAAA,IAAA;AAAA,WAEP,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,aACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,cAAcA,iBAAe,KAAK,SAAS,GAAG,WAAW;AACzE,QAAA,UAAU,aAAa,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG,UAAU,CAAC;AAClF,QAAM,WAAW;AAAA,IACf,MAAM,SAAS,KAAK,SAAS,WAAW,GAAG,WAAW;AAAA,IACtD;AAAA,EAAA;AAEF,QAAM,iBAAiB1B,UAAQ,SAAS,SAAS,UAAU;AAC3D,wBAAsB,KAAK,SAAS,gBAAgB,CAAE,CAAA;AAChD,QAAA,kBAAkB,gBAAgB,qBAAqB;AACvD,QAAA,UAAU,MAAM,gBAAgB,cAAc;AAChD,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,OAAO;AAAA,WACtB,OAAO;AACV,QAAA,YAAY,OAAO,UAAU,GAAG;AAClC,aAAO,EAAE,UAAU,SAAS,UAAU,SAAS,SAAS;IAC1D;AACM,UAAA;AAAA,EACR;AACA,QAAM,cAAwB,CAAA;AAC9B,aAAW,cAAc,OAAO,OAAO,SAAS,QAAQ,GAAG;AACrD,QAAA,WAAW,OAAO,SAAS,QAAQ;AACjC,UAAA;AACU,oBAAA,KAAK,MAAM,QAAA,EAAU,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,eAC5E,OAAO;AACV,YAAA,CAAC,YAAY,OAAO,UAAU;AAAS,gBAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACsB,wBAAA,KAAK,SAAS,SAAS,WAAW;AACxD,QAAM,oBAAoB,SAAS,WAAW,OAAO,GAAG,MAAM,qBAAqB;AAC/E,MAAA,CAAC,IAAI,WAAW;AACd,QAAA,IAAI,OAAO,kBAAkB,IAAI,eAAe,CAAC,IAAI,GAAG,iBAAiB;AAC3E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,SAAS,MAAM,IAAI,GAAG,OAAO,8BAA8B,OAAO,UAAU;AAClF,QAAI,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,SAAS,OAAO,OAAO,YAAa,CAAA,GAAG;AAClE,YAAM,IAAI,UAAU,yBAAyB,2BAA2B,eAAe;AAAA,IACzF;AAAA,EACF;AACA,QAAM,QAAU,EAAA,OAAO,SAAS,EAAE,WAAW,MAAM;AACnD,SAAO,EAAE,UAAU,SAAS,UAAU,SAAS,SAAS;AAC1D;AAEA,SAAS,aAAa,OAAyC;AAC7D;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEE,MAAA,MAAM,mBAAmB,GAAG;AACxB,UAAA,IAAI,WAAW,8BAA8B,mCAAmC;AAAA,EACxF;AACA,QAAM,OAAO,kBAAkB,MAAM,MAAM,eAAe;AAC1D,kBAAgB,IAAI;AACpB,QAAM,UAAU,kBAAkB,MAAM,SAAS,kBAAkB;AACnE,kBAAgB,OAAO;AACvB,QAAM,MAAM,kBAAkB,MAAM,KAAK,cAAc;AACvD,QAAM,QAAQ,kBAAkB,MAAM,OAAO,gBAAgB;AAC7D,qBAAmB,GAAG;AACtB,QAAM,aAAa,MAAM;AACzB,MACE,CAAC,MAAM,QAAQ,UAAU,KAAK,CAAC,WAAW,UAC1C,WAAW,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAClD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,cAAc;AAAA,IAClB,MAAM,oBAAoB,MAAM,eAAe,CAAA,GAAI,sBAAsB;AAAA,EAAA;AAE3E,QAAM,gBAAgB;AAAA,IAAsB,MAC1C;AAAA,MACE,MAAM,uBAAuB,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EAAA;AAEK,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,kBAAkB,MAAM,QAAQ,iBAAiB;AAAA,IACzD,WAAW,kBAAkB,MAAM,WAAW,oBAAoB;AAAA,IAClE;AAAA,IACA;AAAA,IACA,GAAI,MAAM,qBAAqB,SAAY,CAAK,IAAA,EAAE,kBAAkB,sBAAsB,MAAM,wBAAwB,MAAM,kBAAkB,WAAW,CAAC,EAAE;AAAA,IAC9J,eAAe,kBAAkB,MAAM,eAAe,wBAAwB;AAAA,IAC9E,qBAAqB;AAAA,EAAA;AAEzB;AAEA,SAAS,cAAc,OAAgC,KAAyB;AAC9E,gBAAc,OAAO,CAAC,kBAAkB,cAAc,aAAa,UAAU,GAAG,WAAW;AACvF,MAAA,MAAM,mBAAmB,GAAG;AACxB,UAAA,IAAI,WAAW,8BAA8B,oCAAoC;AAAA,EACzF;AACM,QAAA,YAAY,MAAM,eAAe,SACnC,iBACA,kBAAkB,MAAM,YAAY,sBAAsB;AACxD,QAAA,kBAAkB,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,OAAO,UAAU;AAClE,QAAM,WAAW,MAAM,cAAc,SACjC,oBAAoB,MAAM;AACpB,UAAA,IAAI,WAAW,4BAA4B,iCAAiC;AAAA,EACjF,GAAA,IACD,kBAAkB,MAAM,WAAW,qBAAqB;AAC5D,MACE,CAAC,eAAe,KAAK,QAAQ,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,QAAQ,MAAM,UACpF;AACM,UAAA,IAAI,WAAW,qBAAqB,0CAA0C;AAAA,EACtF;AACA,QAAM,iBAAiB,kBAAkB,MAAM,UAAU,oBAAoB;AAC7E,MAAI,CAAC,OAAO,KAAK,cAAc,EAAE,QAAQ;AACjC,UAAA,IAAI,WAAW,4BAA4B,sCAAsC;AAAA,EACzF;AACA,QAAM,cAA+C,CAAA;AACrD,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,cAAc,GAAG;AACvD,2BAAuB,GAAG;AAC1B,UAAM,aAAa,kBAAkB,KAAK,sBAAsB,GAAG,EAAE;AACvD,kBAAA,YAAY,CAAC,YAAY,YAAY,QAAQ,GAAG,sBAAsB,GAAG,EAAE;AACzF,UAAM,WAAW;AAAA,MAAsB,MACrC,kBAAkB,WAAW,UAAU,sBAAsB,GAAG,WAAW;AAAA,IAAA;AAE7E,6BAAyB,KAAK,UAAU,sBAAsB,GAAG,WAAW;AAC5E,QAAI,WAAW,aAAa,UAAa,OAAO,WAAW,aAAa,WAAW;AACjF,YAAM,IAAI,WAAW,4BAA4B,GAAG,GAAG,2BAA2B;AAAA,IACpF;AACA,UAAM,SAAS,kBAAkB,WAAW,QAAQ,sBAAsB,GAAG,SAAS;AAClF,QAAA,OAAO,SAAS,QAAQ;AAC1B,oBAAc,QAAQ,CAAC,QAAQ,MAAM,GAAG,sBAAsB,GAAG,SAAS;AAC1E,kBAAY,GAAG,IAAI;AAAA,QACjB,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,WAAW,aAAa,SAAY,OAAO,WAAW;AAAA,QAChE,QAAQ,EAAE,MAAM,QAAQ,MAAM,kBAAkB,OAAO,MAAM,GAAG,GAAG,cAAc,EAAE;AAAA,MAAA;AAAA,IACrF,WACS,OAAO,SAAS,gBAAgB;AACzC,oBAAc,QAAQ,CAAC,QAAQ,OAAO,GAAG,sBAAsB,GAAG,SAAS;AAC3E,kBAAY,GAAG,IAAI;AAAA,QACjB,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,WAAW,aAAa,SAAY,OAAO,WAAW;AAAA,QAChE,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,OAAO,kBAAkB,OAAO,OAAO,GAAG,GAAG,eAAe;AAAA,QAC9D;AAAA,MAAA;AAAA,IACF,OACK;AACL,YAAM,IAAI,WAAW,kBAAkB,GAAG,GAAG,2CAA2C;AAAA,IAC1F;AAAA,EACF;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAEd;AAEA,eAAe,wBACb,YACA,SACA,SACA,UACe;AACf,MAAI,eAAe;AACf,MAAA;AACF,UAAMkB,QAAO,MAAM,QAAQ,EAAE,MAAM,OAAO;AAC1C,QAAI,CAACA,MAAK,eAAeA,MAAK,WAAW;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,eAAW,UAAU,MAAM,QAAU,EAAA,QAAQ,OAAO,GAAG;AAC/C,YAAA,IAAI,WAAW,kBAAkB,kCAAkC;AAAA,IAC3E;AACe,mBAAA;AAAA,WACR,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACM,QAAA,YAAY,MAAM,QAAA,EAAU,YAAY,EAAE,KAAK,YAAY,QAAQ,sBAAA,CAAuB;AAC5F,MAAA;AACF,UAAM,UAAU,KAAK,WAAW,UAAU,GAAG,OAAO;AACpD,UAAM,UAAU,KAAK,WAAW,WAAW,GAAG,QAAQ;AACtD,iBAAa,MAAM,SAAS,KAAK,WAAW,UAAU,GAAG,UAAU,CAAC;AACtD,kBAAA,MAAM,SAAS,KAAK,WAAW,WAAW,GAAG,WAAW,GAAG,OAAO;AAC5E,QAAA;AAAoB,YAAA,QAAU,EAAA,OAAO,OAAO;AAC5C,QAAA;AACF,YAAM,QAAQ,EAAE,OAAO,WAAW,OAAO;AAAA,aAClC,OAAO;AACV,UAAA;AAAoB,cAAA,QAAU,EAAA,MAAM,OAAO;AACzC,YAAA;AAAA,IACR;AAAA,WACO,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,wBAAwB,SAAiB,oBAA2C;AAC7F,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,OAAO;AAAA,WACtB,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG;AAC9B,UAAA;AAAA,EACR;AACM,QAAA,oBAAoB,SAAS,oBAAoB,IAAI;AAC7D;AAEA,eAAe,oBACb,SACA,oBACA,cAAc,MACd,aAAa,sBACU;AACnB,MAAA;AACF,UAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,OAAO;AACtC,QAAA,CAAC,KAAK,eAAe,KAAK;AAAiB,YAAA,IAAI,MAAM,gCAAgC;AACzF,UAAM,WAAW;AAAA,MACf,MAAM,SAAS,KAAK,SAAS,kBAAkB,GAAG,kBAAkB;AAAA,IAAA;AAElE,QAAA,sBAAsB,SAAS,iBAAiB,oBAAoB;AAChE,YAAA,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACM,UAAA,8BAAc,IAAI;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,MACT,GAAG,OAAO,KAAK,SAAS,eAAe;AAAA,IAAA,CACxC;AACD,eAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,OAAO,GAAG;AAChD,UAAA,CAAC,MAAM,UAAU,MAAM,aAAa,CAAC,QAAQ,IAAI,MAAM,IAAI,GAAG;AAChE,cAAM,IAAI,MAAM,2BAA2B,MAAM,IAAI,EAAE;AAAA,MACzD;AAAA,IACF;AACA,eAAW,QAAQ,OAAO,KAAK,SAAS,eAAe,GAAG;AAClDW,YAAAA,QAAO,MAAM,UAAU,MAAM,KAAK,SAAS,IAAI,CAAC;AAClD,UAAA,CAACA,MAAK,UAAUA,MAAK;AAAW,cAAM,IAAI,MAAM,6BAA6B,IAAI,EAAE;AACvF,UAAI,aAAa;AACT,cAAA,WAAW,SAAS,gBAAgB,IAAI;AAC9C,cAAM,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI,CAAC;AAC/C,YAAA,OAAO,SAAS,SAAS,QAAQ,UAAU,OAAO,MAAM,OAAO,SAAS,QAAQ;AAClF,gBAAM,IAAI,MAAM,gCAAgC,IAAI,EAAE;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AACO,WAAA;AAAA,WACA,OAAO;AACV,QAAA,iBAAiB,aAAa,MAAM,SAAS;AAAkB,YAAA;AACnE,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mCAAmC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACzF;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,kBAAkB,OAA8C;AACvE;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEF,MAAI,MAAM,mBAAmB;AAAS,UAAA,IAAI,MAAM,wCAAwC;AACxF,QAAM,WAAW,OAAO,MAAM,aAAa,EAAE;AAC7C,MACE,CAAC,eAAe,KAAK,QAAQ,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,QAAQ,MAAM,UACpF;AACM,UAAA,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAM,eAAerB,eAAa,MAAM,iBAAiB,GAAG,kBAAkB,kBAAkB;AAChG,QAAM,YAAiD,CAAA;AACvD,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,YAAY,GAAG;AAEpD,QAAA,CAAC,oBAAoB,KAAK,IAAI,KAAK,SAAS,OAAO,SAAS,QAAQ,KAAK,SAAS,IAAI,KACtF,SAAS,IAAI,MAAM,QAAQ,SAAS,sBAAsB,SAAS,UACnE;AACA,YAAM,IAAI,MAAM,oDAAoD,IAAI,EAAE;AAAA,IAC5E;AACA,UAAM,SAASA,eAAa,KAAK,mBAAmB,IAAI,EAAE;AAC1D,kBAAc,QAAQ,CAAC,QAAQ,QAAQ,GAAG,mBAAmB,IAAI,EAAE;AACnE,QAAI,OAAO,OAAO,SAAS,YAAY,CAAC,OAAO,cAAc,OAAO,IAAI,KAAK,OAAO,OAAO,GAAG;AAC5F,YAAM,IAAI,MAAM,mBAAmB,IAAI,kBAAkB;AAAA,IAC3D;AACI,QAAA,OAAO,OAAO,WAAW,YAAY,CAAC,UAAU,KAAK,OAAO,MAAM,GAAG;AACvE,YAAM,IAAI,MAAM,mBAAmB,IAAI,oBAAoB;AAAA,IAC7D;AACU,cAAA,IAAI,IAAI,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO;EACxD;AACA,MAAI,CAAC,UAAU,YAAY,KAAK,CAAC,UAAU,kBAAkB,GAAG;AACxD,UAAA,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,cAAc,OAAO,MAAM,gBAAgB,EAAE;AAAA,IAC7C,cAAc,qBAAqB,MAAM,cAAc,cAAc;AAAA,IACrE,oBAAoB,qBAAqB,MAAM,oBAAoB,oBAAoB;AAAA,IACvF,mBAAmB,iBAAiB,MAAM,mBAAmB,mBAAmB;AAAA,IAChF,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAaA,eAAa,MAAM,aAAa,aAAa;AAAA,EAAA;AAE9D;AAEA,SAAS,iBAAiB,SAAiB,SAAiB,aAA6B;AACnF,MAAA,aAAa,SAAS,OAAO,GAAG;AAC5B,UAAA,IAAI,WAAW,qBAAqB,+BAA+B;AAAA,EAC3E;AACA,aAAW,UAAU,aAAa;AAC5B,QAAA,aAAa,QAAQ,OAAO,GAAG;AAC3B,YAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,IACrF;AAAA,EACF;AACF;AAEA,SAAS,sBACP,KACA,SACA,SACA,aACM;AACA,QAAA,aAAa,QAAQ,OAAO;AAClC,QAAM,iBAAiB,CAACR,UAAQ,IAAI,GAAG,GAAG,UAAU;AAC9C,QAAA,OAAO,QAAU,EAAA,IAAI,MAAM,KAAK,QAAU,EAAA,IAAI,aAAa;AAC7D,MAAA;AAAqB,mBAAA,KAAKA,UAAQ,IAAI,CAAC;AAEzC,MAAA,QAAQ,OAAO,MAAM,WACrB,eAAe,KAAK,CAAC,SAASA,UAAQ,IAAI,MAAMA,UAAQ,OAAO,CAAC,KAChE,aAAa,SAAS,OAAO,KAAK,YAAY,KAAK,CAAC,SAAS,aAAa,MAAM,OAAO,CAAC,GACxF;AACM,UAAA,IAAI,UAAU,uBAAuB,8CAA8C;AAAA,EAC3F;AACF;AAEA,eAAe,iBAAiB,WAAmB,aAAoC;AACrF,MAAI,SAAS;AACT,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,WAAW;AACxB,aAAA;AAAA,WACF,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAC7C;AAAA,EACF;AACA,QAAM,SAAS,GAAG,WAAW,aAAa,OAAO,WAAY,CAAA;AAC7D,QAAM,QAAQ,EAAE,OAAO,aAAa,MAAM;AACtC,MAAA;AACF,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAAA,WACtC,OAAO;AACd,UAAM,QAAQ,EAAE,OAAO,QAAQ,WAAW;AACpC,UAAA;AAAA,EACR;AACA,QAAM,QAAU,EAAA,OAAO,QAAQ,EAAE,WAAW,MAAM;AACpD;AAEA,eAAe,YAAY,WAAmB,aAAoC;AAChF,MAAI,SAAS;AACT,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,WAAW;AACxB,aAAA;AAAA,WACF,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAC7C;AAAA,EACF;AACA,QAAM,SAAS,GAAG,WAAW,aAAa,OAAO,WAAY,CAAA;AAC7D,QAAM,QAAQ,EAAE,OAAO,aAAa,MAAM;AACtC,MAAA;AACF,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAAA,WACtC,OAAO;AACd,UAAM,QAAQ,EAAE,OAAO,QAAQ,WAAW;AACpC,UAAA;AAAA,EACR;AACA,QAAM,mBAAmB,MAAM;AACjC;AAEA,MAAM,kBAA0C;AAAA,EAC9C,MAAM,QAAQ,WAA6C;AACrD,QAAA;AACA,QAAA;AACO,eAAA,MAAM,QAAU,EAAA,IAAI,UAAU,CAAC,SAAS,WAAW,SAAS,CAAC;AAAA,aAC/D,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QACxF;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sCAAsC,gBAAgB,OAAO,MAAM,CAAC;AAAA,QACpE;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA;AACA,QAAA;AACO,eAAA,KAAK,MAAM,IAAI,cAAc,OAAO,OAAO,MAAM,CAAC;AAAA,IAAA,QACrD;AACA,YAAA,IAAI,UAAU,0BAA0B,sCAAsC;AAAA,IACtF;AACA,QAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AAC3C,YAAA,IAAI,UAAU,0BAA0B,8CAA8C;AAAA,IAC9F;AACA,UAAM,QAAQ,kBAAkB,OAAO,CAAC,GAAG,gBAAgB;AAC3D,UAAM,KAAK,kBAAkB,MAAM,IAAI,iBAAiB,EAAE;AAC1D,QAAI,CAAC,UAAU,KAAK,EAAE,GAAG;AACjB,YAAA,IAAI,UAAU,2BAA2B,yCAAyC;AAAA,IAC1F;AACA,UAAM,eAAe,kBAAkB,MAAM,cAAc,qBAAqB;AAChF,UAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,IACrC,MAAM,SAAS;AAAA,MAAO,CAAC,QACvB,OAAO,QAAQ,YAAY,QAAQ;AAAA,QAEnC;AACG,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA,eAAe,KAAK,SAAS,SAAS,IAAI,YAAY,KAAK,CAAC,KAAK;AAAA,IAAA;AAAA,EAErE;AAAA,EAEA,MAAM,KAAK,SAAiB,kBAAyC;AAC/D,QAAA;AACI,YAAA,SAAS,MAAM,QAAA,EAAU;AAAA,QAC7B;AAAA,QACA,CAAC,SAAS,QAAQ,OAAO;AAAA,QACzB;AAAA,MAAA;AAEE,UAAA,CAAC,OAAO,SAAS;AACnB,cAAM,mBAAmB,gBAAgB;AACzC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,6BAA6B,gBAAgB,OAAO,MAAM,CAAC;AAAA,UAC3D;AAAA,QAAA;AAAA,MAEJ;AAAA,aACO,OAAO;AACd,UAAI,iBAAiB;AAAiB,cAAA;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+BAA+B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QACrF;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;AAEA,SAAS0B,iBAAe,KAAqB,OAAuB;AAC3D,SAAA5B,aAAW,KAAK,IAAIE,UAAQ,KAAK,IAAIA,UAAQ,IAAI,KAAK,KAAK;AACpE;AAEA,eAAe,cAAc,MAAc,OAAgC;AACzE,QAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,IAAI;AAC1C,QAAMkB,QAAO,MAAM,QAAQ,EAAE,KAAK,IAAI;AACtC,MAAI,CAACA,MAAK;AAAa,UAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,sBAAsB;AACnF,SAAA;AACT;AAEA,eAAe,sBAAsB,MAAc,OAAgC;AACjF,QAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,IAAI;AACvC,MAAI,CAAC,KAAK,eAAe,KAAK,WAAW;AACvC,UAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,2BAA2B;AAAA,EAC1E;AACA,SAAO,MAAM,QAAA,EAAU,SAAS,IAAI;AACtC;AAEA,eAAe,gBAAgB,MAA+B;AACtD,QAAA,WAAWlB,UAAQ,IAAI;AACzB,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,SAAS,QAAQ;AAAA,WACjC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AACrC,UAAA,SAAS,QAAQ,QAAQ;AAC/B,QAAI,WAAW;AAAiB,aAAA;AAChC,WAAO,KAAK,MAAM,gBAAgB,MAAM,GAAG,SAAS,QAAQ,CAAC;AAAA,EAC/D;AACF;AAEA,eAAe,kBAAkB,MAAc,MAA6B;AACtE,MAAA;AACF,SAAK,MAAM,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;AACrC,YAAA,IAAI,UAAU,MAAM,6CAA6C;AAAA,IACzE;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG;AAC9B,UAAA;AAAA,EACR;AACF;AAEA,SAAS,aAAa,MAAc,OAAwB;AAC1D,QAAM,cAAc,SAASA,UAAQ,IAAI,GAAGA,UAAQ,KAAK,CAAC;AAC1D,QAAM,cAAc,SAASA,UAAQ,KAAK,GAAGA,UAAQ,IAAI,CAAC;AACpD,QAAA,YAAY,UAAU,KAAK;AACjC,SAAO,gBAAgB,MAAM,CAAC,YAAY,WAAW,KAAK,SAAS,EAAE,KAAK,gBAAgB,QACxF,CAAC,YAAY,WAAW,KAAK,SAAS,EAAE,KAAK,gBAAgB;AACjE;AAEA,SAAS,WAAW,SAAyB;AACpC,SAAA,UAAU,YAAY,IAAI,YAAY,EAAE,OAAOA,UAAQ,OAAO,CAAC,CAAC,CAAC;AAC1E;AAEA,SAAS,cAAc,KAAqB;AACpC,QAAA,SAAS,IAAI,YAAA,EAAc,WAAW,iBAAiB,GAAG,EAAE,WAAW,YAAY,EAAE;AAC3F,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,WAAW,2BAA2B,mCAAmC,GAAG,EAAE;AAAA,EAC1F;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAuB;AACxC,SAAA,MAAM,YAAc,EAAA,WAAW,eAAe,GAAG,EAAE,WAAW,YAAY,EAAE;AACrF;AAEA,SAAS,gBAAgB,OAAqB;AACxC,MAAA,CAAC,SAAS,KAAK,KAAK;AAAG,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAClG;AAEA,SAAS,gBAAgB,OAAqB;AACxC,MAAA,CAACyB,UAAQ,KAAK,KAAK;AAAG,UAAM,IAAI,WAAW,mBAAmB,wBAAwB,KAAK,EAAE;AACnG;AAEA,SAAS,aAAa,MAAc,OAAuB;AACnD,QAAA,QAAQ,8CAA8C,KAAK,KAAK;AACtE,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO,WAAW,IAAI,IAAI,MAAM,CAAC,CAAC;AACpC;AAEA,eAAe,eACb,KACA,WACA,SACA,OACiB;AACjB,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,WAAW,0BAA0B,GAAG,KAAK,cAAc;AAAA,EACvE;AACA,QAAM,SAAS,MAAM,IAAI,GAAG,OAAO,OAAO;AACtC,MAAA,CAAC,QAAQ,KAAK;AAAG,UAAM,IAAI,WAAW,0BAA0B,GAAG,KAAK,cAAc;AAC1F,SAAO,OAAO;AAChB;AAEA,SAAS,oBAAoB,OAAgC,KAAiC;AAC5F,SAAO,MAAM,GAAG,MAAM,SAAY,SAAY,kBAAkB,OAAO,GAAG;AAC5E;AAEA,SAAS,kBAAkB,OAAgC,KAAqB;AACxE,QAAA,QAAQ,MAAM,GAAG;AACvB,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO;AACvC,UAAM,IAAI,WAAW,0BAA0B,GAAG,GAAG,cAAc;AAAA,EACrE;AACO,SAAA;AACT;AAEA,SAAS,kBAAkB,OAAgB,OAAuB;AAC5D,MAAA;AACK,WAAA,qBAAqB,OAAO,KAAK;AAAA,WACjC,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAkB,OAAgB,OAAwC;AAC7E,MAAA;AACK,WAAAjB,eAAa,OAAO,KAAK;AAAA,WACzB,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,SAAS,sBAAyB,UAAsB;AAClD,MAAA;AACF,WAAO,SAAS;AAAA,WACT,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,eAAe,SAAS,MAAc,OAAiD;AACjF,MAAA;AACI,UAAA,SAAS,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACrD,WAAA,kBAAkB,QAAQ,KAAK;AAAA,WAC/B,OAAO;AACd,QAAI,iBAAiB,aAAa;AAChC,YAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,oBAAoB;AAAA,IACnE;AACM,UAAA;AAAA,EACR;AACF;AAEA,eAAe,UAAU,MAAc,OAA+B;AAC9D,QAAA,QAAU,EAAA,cAAc,MAAM,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,GAAM;AAAA,IACzE,WAAW;AAAA,IACX,MAAM;AAAA,EAAA,CACP;AACH;AAEA,SAAS,qBAAqB,OAAgB,OAAuB;AACnE,MAAI,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK,KAAK;AAAG,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AACvF,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAgB,OAAuB;AAC/D,MAAI,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK,KAAK;AAAG,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AACvF,SAAA;AACT;AAEA,SAAS,aAAa,OAA6B;AACjD,SAAO,KAAK,UAAU;AAAA,IACpB,MAAM,MAAM;AAAA,IACZ,OAAO,MAAM,OAAO,QAAa,KAAA;AAAA,IACjC,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,MAAM,MAAM;AAAA,EAAA,CACb;AACH;AAEA,SAAS,cAAc,YAAoB,QAAwB;AAC3D,QAAA,UAAU,SAAS,YAAY,MAAM;AAC3C,SAAO,WAAW,CAAC,QAAQ,WAAW,KAAK,UAAU,KAAK,GAAG,EAAE,KAAK,YAAY,OAC5E,eAAe,OAAO,IACtB;AACN;AAEA,SAAS,eAAe,MAAsB;AACrC,SAAA,KAAK,MAAM,UAAU,KAAK,GAAG,EAAE,KAAK,GAAG,KAAK;AACrD;AAEA,SAAS,gBAAgB,OAA2B;AAC5C,QAAAO,QAAO,IAAI,YAAc,EAAA,OAAO,KAAK,EAAE,OAAO,WAAW,YAAY,GAAG;AAC9E,SAAOA,MAAK,MAAM,GAAG,GAAG,KAAK;AAC/B;AAEA,eAAe,mBAAmB,MAA6B;AACzD,MAAA;AACF,UAAM,QAAU,EAAA,OAAO,MAAM,EAAE,WAAW,MAAM;AAAA,WACzC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,eAAe,mBAAmB,MAA6B;AACzD,MAAA;AACI,UAAA,QAAU,EAAA,OAAO,IAAI;AAAA,WACpB,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;ACj/CA,MAAM,uBAAuB;AAC7B,MAAM,2BAA2B;AAyBjC,eAAsB,YACpB,KACA,QACA,UAA2B,CAAA,GACO;AAC5B,QAAA,UAAU,QAAQ,WAAW;AAC7B,QAAA,QAAQ,QAAQ,SAASe;AACzB,QAAA,iBAAiB,QAAQ,kBAAkB;AAC3C,QAAA,oBAAoB,QAAQ,qBAAqB;AACvD,MAAI,eAAe;AACf,MAAA;AACA,MAAA;AAEA,MAAA;AACI,UAAA,YAAY,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAK,CAAA;AACjE,UAAA,cAAc,YAAY,IAAI,CAAC,IAAI,QAAQ,YAAY,QAAQ,SAAS,CAAC,CAAC;AAChF,aAAS,MAAM,IAAI,QAAQ,oBAAoB,aAAa,MAAM,IAAI,WAAW;AAAA,EAAA,QAC3E;AACG,aAAA;AAAA,EACX;AAEI,MAAA;AACF,WAAO,MAAM;AACX,YAAM,cAAc,MAAM,QAAQ,KAAK,MAAM;AACvC,YAAA,WAAW,KAAK,UAAU;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU,YAAY;AAAA,QACtB,OAAO,YAAY;AAAA,QACnB,SAAS,YAAY;AAAA,QACrB,UAAU,YAAY;AAAA,QACtB,SAAS,YAAY;AAAA,MAAA,CACtB;AACD,YAAM,UAAU,YAAY,aAAa,SACrC,aAAa,eACb,YAAY,aAAa;AAC7B,UAAI,SAAS;AACX,YAAI,QAAQ;AAAqB,gBAAA,QAAQ,cAAc,WAAW;AAAA;AAC7D,gBAAM,IAAI,GAAG,OAAO,GAAG,QAAQ;AAAA,CAAI;AACzB,uBAAA;AACf,uBAAe,YAAY;AAAA,MAC7B;AAEI,UAAA,YAAY,UAAU,YAAY;AAChC,YAAA,qBAAqB,YAAY,YAAY,aAAa;AAC5D,gBAAM,QAAQ,YAAY;AAC1B,gBAAM,IAAI;AAAA,YACR,uBAAuB,OAAO,MAAM,YAAY,OAAO;AAAA,YACvD,OAAO,WAAW,QAAQ,MAAM,eAAe,YAAY,WAAW,YAAY;AAAA,YAClF,YAAY,YAAY,aAAa,eAAe;AAAA,YACpD,OAAO,aAAa;AAAA,YACpB,EAAE,SAAS,OAAO;AAAA,UAAA;AAAA,QAEtB;AACA,eAAO,YAAY;AAAA,MACrB;AAEA,YAAM,aAAa,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK;AACtD,UAAI,aAAa,GAAG;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,8BAA8B,MAAM;AAAA,UACpC;AAAA,UACA;AAAA,UACA,EAAE,SAAS,OAAO;AAAA,QAAA;AAAA,MAEtB;AACA,YAAM,WAAW,KAAK,IAAI,gBAAgB,SAAS;AAC/C,UAAA;AAAc,cAAA,OAAO,UAAU,QAAQ;AAAA;AAChC,cAAA,MAAM,UAAU,IAAI,MAAM;AAAA,IACvC;AAAA,EAAA,UACA;AACA,UAAM,QAAQ,MAAQ,EAAA,MAAM,MAAM,MAAS;AAAA,EAC7C;AACF;AAEA,eAAe,YAAY,KAAqB,QAA0C;AAClF,QAAA,WAAW,MAAM,IAAI,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA,EAAE,SAAS,OAAO;AAAA,IAClBvB,aAAW,GAAG;AAAA,EAAA;AAEV,QAAA,WAAWC,eAAa,UAAU,+BAA+B;AACvE,QAAM,OAAOA,eAAa,SAAS,QAAQ,UAAU,kBAAkB;AACvE,QAAM,QAAQC,eAAa,KAAK,OAAO,YAAY;AAC7C,QAAA,UAAUH,iBAAe,KAAK,OAAO;AAC3C,QAAM,YAAYyB,WAAS,KAAK,KAAK,IAAI,KAAK,QAAQ;AAC/C,SAAA;AAAA,IACL,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,IAC9D;AAAA,IACA;AAAA,IACA,SAASzB,iBAAe,KAAK,OAAO;AAAA,IACpC,OAAO,YACH;AAAA,MACA,MAAMA,iBAAe,UAAU,IAAI;AAAA,MACnC,SAASA,iBAAe,UAAU,OAAO;AAAA,MACzC,WAAW,OAAO,UAAU,cAAc,YAAY,UAAU,YAAY;AAAA,MAC5E,SAASyB,WAAS,UAAU,MAAM,IAAI,UAAU,SAAS;AAAA,IAEzD,IAAA;AAAA,IACJ,UAAU,KAAK;AAAA,IACf,MAAM;AAAA,EAAA;AAEV;AAEA,SAASxB,aAAW,KAIlB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,SAAS,uBAAuB,MAA0B,SAAqC;AACzF,MAAA;AAAM,WAAO,KAAK,OAAO,WAAW,kBAAkB,GAAG,EAAE;AACxD,SAAA,YAAY,aAAa,aAAa;AAC/C;AAEA,SAASD,iBAAe,OAAoC;AACnD,SAAA,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAASG,eAAa,OAAgB,OAAuB;AAC3D,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO;AACvC,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,qBAAqB,CAAC;AAAA,EAChF;AACO,SAAA;AACT;AAEA,SAASsB,WAAS,OAAkD;AAC3D,SAAA,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACrE;AAEA,SAASvB,eAAa,OAAgB,OAAwC;AACxE,MAAA,CAACuB,WAAS,KAAK,GAAG;AACpB,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,CAAC;AAAA,EACjF;AACO,SAAA;AACT;AAEA,SAASD,iBAAe,cAAsB,QAAoC;AAChF,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY,CAAC;AAAA,EACrF;AACA,SAAO,IAAI,QAAQ,CAAC9B,UAAS,WAAW;AAChC,UAAA,QAAQ,WAAW,MAAM;AACtB,aAAA,oBAAoB,SAAS,OAAO;AACnC,MAAAA;OACP,YAAY;AACf,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY,CAAC;AAAA,IAAA;AAEtE,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM;AAAA,EAAA,CACzD;AACH;AC5KA,MAAM,aAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAM,UAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,wBAAwB;AAC9B,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,kBAAkB,CAAC,IAAM,IAAM,GAAM,CAAI;AAC/C,MAAMK,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAwDgB,SAAA,gBAAgB,eAAsC,IAAmB;AACvF,QAAM,WAAW;AAAA,IACf,aAAa,YAAY;AAAA,IACzB2B,cAAY;AAAA,IACZC,aAAW;AAAA,IACX,eAAe,YAAY;AAAA,IAC3B,eAAe,YAAY;AAAA,IAC3B,iBAAiB,YAAY;AAAA,IAC7BC,gBAAc;AAAA,IACd,iBAAiB,SAAS,wBAAwB;AAAA,IAClD,iBAAiB,QAAQ,uBAAuB;AAAA,IAChD,eAAe;AAAA,IACfC,gBAAc;AAAA,IACd,eAAe;AAAA,EAAA;AAEV,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,SAAS,IAAI,CAAC,YAAY;AAClC,YAAM,UAAU,QAAQ;AACjB,aAAA;AAAA,QACL,GAAG;AAAA,QACH,SAAS,OAAO,KAAK,UAAU,kBAAkB,MAAM,QAAQ,KAAK,KAAK,CAAC;AAAA,MAAA;AAAA,IAC5E,CACD;AAAA,EAAA;AAEL;AAEA,SAASD,kBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,wBAAwB,UAAU,MAAM;AAAA,IACtF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IAAA,CACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,OAAO,EAAE,MAAM,YAAY;AAAA,MACpF,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc7B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UACnB,MAAM,YAAY,KAAK,uBAAuB;AAAA,MAC5C,SAAS,aAAa,OAAO,SAAS;AAAA,MACtC,OAAO,MAAM,UAAU;AAAA,IAAA,CACxB;AAAA,EAAA;AAEP;AAEA,SAAS,aAAa,cAAwD;AACrE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,SAAS,cAAc;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,8CAA8C,MAAM,SAAS;AAAA,MAC1F,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA,CACd;AAAA,IACD,aAAa,kBAAkB;AAAA,MAC7B,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,eAAe,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MAC9C,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,MACtD,QAAQ,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAAA,MACrD,gBAAgB,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAAA,IAAA,CAC9D;AAAA,IACD,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU,MAAM,SAAS,KAAK,OAAO,YAAY;AAAA,EAAA;AAE1E;AAEA,SAAS2B,gBAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,iBAAiB;AAAA,IAC9B,cAAc3B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,kBAAkB;AAAA,IAC7B,SAAS,OAAO,QAAQ,MAAM,YAAY,KAAK,aAAa,EAAE;AAAA,EAAA;AAElE;AAEA,SAAS4B,eAAgC;AACvC,SAAO,gBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS,OAAO,KAAK,UAAU;AAC7B,YAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,YAAM,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC1C,YAAY,KAAK,gBAAgB,EAAE,UAAU;AAAA,QAC7C,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,MAAA,CAC7C;AACM,aAAA,EAAE,SAAS;IACpB;AAAA,EAAA,CACD;AACH;AAEA,SAAS,eAAe,cAAwD;AACvE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,SAAS,cAAc;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,0CAA0C,MAAM,SAAS;AAAA,MACtF;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,IAAA,CACd;AAAA,IACD,aAAa,kBAAkB;AAAA,MAC7B,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,MAC3B,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,IAAA,CACvD;AAAA,IACD,cAAc5B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,OAAO,YAAY;AAAA,EAAA;AAE5E;AAEA,SAAS,eAAe,cAAwD;AACvE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX,EAAE,MAAM,YAAY,aAAa,2CAA2C,UAAU,MAAM;AAAA,IAC9F;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,IACf;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,MACxD;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,uBAAuB,8CAA8C;AAAA,IAChF,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,OAAO,YAAY;AAAA,EAAA;AAE7E;AAEA,SAAS,iBAAiB,cAAwD;AACzE,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,OAAO,YAAY;AAAA,IAAA,CAC3E;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAM,CAAC,UAAU,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,QAAQ,EAAE;AAAA,QACnD,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,YAAY,MAAM;AAAA,MAC7B,sBAAsB;AAAA,IACxB;AAAA,IACA,UAAU,CAAC,0CAA0C;AAAA,EAAA;AAEzD;AAEA,SAAS,iBAAiB,MAAwBT,UAAoC;AAC7E,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB;AAAA,MACA,SAAAA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,SAAS,UAAU,SAAS;AAAA,MACvC,SAAS,OAAO,KAAK,UAAU,MAAM,gBAAgB,KAAK,OAAO,IAAI;AAAA,IAAA,CACtE;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS,OAAO,KAAK,UAAU,MAAM,gBAAgB,KAAK,OAAO,SAAS;AAAA,IAAA,CAC3E;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,YAAY,SAAS;AAAA,MAC9B;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,SAAS,EAAE;AAAA,QAC1D,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,UAAU,CAAC,0BAA0B;AAAA,EAAA;AAEzC;AAEA,SAASuC,kBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX,EAAE,MAAM,YAAY,aAAa,2CAA2C,UAAU,MAAM;AAAA,IAC9F;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc9B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,sBAAsB,uCAAuC;AAAA,IACxE,SAAS,OAAO,KAAK,UAAU;AACzB,UAAA,OAAO,MAAM,aAAa,UAAU;AAChC,cAAA,WAAW,qBAAqB,MAAM,QAAQ;AACpD,cAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC1C,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,UAC5C,YAAY,KAAK,gBAAgB,EAAE,UAAU;AAAA,QAAA,CAC9C;AACK,cAAA,eAAeG,eAAa,SAAS,uBAAuB;AAClE,cAAMZ,WAAUY,eAAa,aAAa,SAAS,sBAAsB;AAClE,eAAA;AAAA,UACL,GAAGA,eAAa,QAAQ,sBAAsB;AAAA,UAC9C,WAAW,MAAM,QAAQZ,SAAQ,SAAS,IAAIA,SAAQ,YAAY,CAAC;AAAA,QAAA;AAAA,MAEvE;AACM,YAAA,SAASY,eAAa,MAAM,YAAY,KAAK,aAAa,CAAA,CAAE,GAAG,oBAAoB;AACnF,YAAA,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO;AACxD,YAAM,QAAQ,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAO,SAAS;AACjD,cAAA,MAAMA,eAAa,MAAM,gBAAgB;AACzC,cAAA,WAAW,aAAa,KAAK,iBAAiB;AAC7C,eAAA;AAAA,UACL,GAAGA;AAAAA,YACD,MAAM,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,YAClD;AAAA,UACF;AAAA,UACA,WAAW,MAAM,QAAQ,IAAI,SAAS,IAAI,IAAI,YAAY,CAAC;AAAA,QAAA;AAAA,MAE9D,CAAA,CAAC;AACF,aAAO,EAAE,OAAO,MAAM,QAAQ,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,aAAa;AAAA,MACX,EAAE,MAAM,aAAa,aAAa,sDAAsD;AAAA,IAC1F;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,OAAO,OAAO;AAAA,MAC/B;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAC1C,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,OAAO,OAAO,EAAE;AAAA,MAC7D;AAAA,MACA,UAAU,CAAC,aAAa,SAAS;AAAA,MACjC,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,WAAW,aAAa,OAAO,WAAW;AAC5C,UAAA,CAAC,WAAW,QAAQ,GAAG;AACzB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACI,UAAA;AACA,UAAA;AACF,iBAAS,KAAK;AAAA,UACZ,MAAM,QAAQ,EAAE,aAAa,eAAe,KAAK,aAAa,OAAO,SAAS,CAAC,CAAC;AAAA,QAAA;AAAA,eAE3E,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,mCAAmC,aAAa,KAAK,CAAC;AAAA,QAAA;AAAA,MAE1D;AACI,UAAA,CAAC,SAAS,MAAM,GAAG;AACf,cAAA,IAAI,WAAW,mBAAmB,uCAAuC;AAAA,MACjF;AACA,YAAM,SAASG;AAAAA,QACb,MAAM,YAAY,KAAK,eAAe;AAAA,UACpC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,GAAI,OAAO,MAAM,aAAa,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,QAAA,CAC1E;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,EAAE,IAAI,KAAK,GAAG,cAAc;AAC3B,aAAA;AAAA,QACL,GAAG;AAAA,QACH,gBAAgB,aAAa,QAAQ,gBAAgB;AAAA,QACrD,mBAAmB;AAAA,QACnB,qBAAqB;AAAA,MAAA;AAAA,IAEzB;AAAA,EAAA;AAEJ;AAEA,eAAe,SACb,KACA,OACA,cACkC;AAClC,QAAM,SAAS,MAAM,cAAc,KAAK,OAAO,WAAW,YAAY;AAClE,MAAA;AACF,QAAI,aAAa,MAAM,cAAc,KAAK,QAAQ,KAAK;AACjD,UAAA,gBAAgBF,iBAAe,MAAM,IAAI;AAC3C,QAAA;AACJ,QAAI,eAAe;AACjB,mBAAa,MAAM,oBAAoB,KAAK,QAAQ,OAAO,UAAU;AACrE,YAAM,OAAO,WAAW;AACxB,yBAAmB,IAAI;AACZ,iBAAA,eAAe,KAAK,aAAa;AACtC,YAAA,cAAc,KAAK,UAAU,IAAI;AAAA,IACzC;AACO,WAAA;AAAA,MACL,QAAQ,cAAc,MAAM;AAAA,MAC5B,KAAK,WAAW,KAAK;AAAA,MACrB,iBAAiB,WAAW,KAAK;AAAA,MACjC,YAAY,WAAW;AAAA,MACvB,QAAQ,WAAW;AAAA,MACnB,WAAW,YAAY;AAAA,MACvB,kBAAkB,WAAW,WAAW,KAAK,mBAAmB;AAAA,IAAA;AAAA,EAClE,UACA;AACM,UAAA,eAAe,KAAK,MAAM;AAAA,EAClC;AACF;AAEA,eAAe,WACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AACxB,QAAM,gBAAgBA,iBAAe,MAAM,IAAI,IAC3C,MAAM,aAAa,eAAe,KAAK,OAAO,MAAM,IAAI,CAAC,CAAC,IAC1D;AACJ,QAAM,SAAS,MAAM,cAAc,KAAK,OAAO,WAAW,YAAY;AACtE,MAAI,cAAc;AACd,MAAA;AACF,QAAI,aAAa,gBACb,MAAM,cAAc,KAAK,QAAQ,OAAO,aAAa,IACrD,MAAM,cAAc,KAAK,QAAQ,KAAK;AACxB,sBAAA,QAAQ,iBAAiB,WAAW,IAAI;AAC1D,UAAM,MAAME,eAAa,WAAW,KAAK,KAAK,qBAAqB;AAC7D,UAAA,SAAS,aAAa,KAAK,KAAK;AACtC,UAAM,eAAe,gBAAgB,aAAa,eAAe,eAAe,IAAI;AACpF,UAAM,YAAY,MAAM,cAAc,KAAK,QAAQ,YAAY;AAE/D,QAAI,iBAAiB,WAAW;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,CAAC,iBAAiB,CAAC,WAAW;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uCAAuC,OAAO,OAAO;AAAA,MAAA;AAAA,IAEzD;AAEA,QAAI,eAAe;AACjB,kCAA4B,eAAe,UAAU;AAAA,IAAA,OAChD;AACC,YAAA,QAAQ,eAAe,SAAU;AAC1B,mBAAA,MAAM,cAAc,KAAK,QAAQ,OAAO,EAAE,GAAG,OAAO,QAAQ,UAAA,CAAW;AAClE,wBAAA,QAAQ,WAAW,IAAI;AAAA,IAC3C;AAEI,QAAA,MAAM,YAAY,MAAM;AACnB,aAAA;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,cAAc,MAAM;AAAA,QAC5B,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,MAAA;AAAA,IAEvB;AAEA,QAAI,QAAQ,WAAW,IAAI,MAAM,aAAa;AAC5C,aAAO,gBAAgB,UAAU;AAAA,IACnC;AACA,UAAM,cAAc,KAAK,WAAW,oBAAoB,UAAU,CAAC;AACnE,UAAM,SAAS;AAAA,MACb,GAAG,gBAAgB,MAAM;AAAA,MACzB,GAAG,oBAAoB,WAAW,IAAI;AAAA,MACtC,SAAS,eAAe,KAAK;AAAA,MAC7B,MAAM,iBAAiB,WAAW;AAAA,MAClC,2BAA2B,aAAa,WAAW,MAAM,kBAAkB;AAAA,MAC3E,iBAAiB,eAAe,GAAG;AAAA,IAAA;AAErC,UAAM,YAAYA;AAAAA,MAChB,MAAM,YAAY,KAAK,eAAe,MAAM;AAAA,MAC5C;AAAA,IAAA;AAEF,QAAI,UAAU,WAAW,eAAe,UAAU,YAAY,MAAM;AAC3D,aAAA;AAAA,IACT;AACM,UAAA,SAAS,aAAa,WAAW,SAAS;AAClC,kBAAA;AACd,QAAI,MAAM,YAAY;AAAa,aAAA;AAC/B,QAAA;AACF,YAAM,SAAS,MAAM,YAAY,KAAK,QAAQ;AAAA,QAC5C,SAAS;AAAA,QACT,OAAO,aAAa;AAAA,MAAA,CACrB;AACM,aAAA,EAAE,GAAG,WAAW;IAAO,UAC9B;AACc,oBAAA;AAAA,IAChB;AAAA,EAAA,UACA;AACA,QAAI,CAAC;AAAmB,YAAA,eAAe,KAAK,MAAM;AAAA,EACpD;AACF;AAEA,eAAe,YACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AAClB,QAAA,WAAW,OAAO,MAAM,aAAa,WACvC,qBAAqB,MAAM,QAAQ,IACnC;AACJ,QAAM,QAAQA;AAAAA,IACZ,MAAM,YAAY,KAAK,sBAAsB,WAAW,EAAE,SAAa,IAAA,EAAE;AAAA,IACzE;AAAA,EAAA;AAEI,QAAA,QAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ;AACzD,QAAM,aAAa,MAAM,OAAO,CAAC,UAAU;AACzC,UAAM,OAAO,SAAS,KAAK,IAAI,QAAQ,CAAA;AACvC,WAAO,KAAK,UAAU,sBAAsB,KAAK,UAAU;AAAA,EAAA,CAC5D;AAED,MAAI,MAAM,YAAY;AAAa,WAAA,EAAE,QAAQ,WAAW;AACxD,MAAI,WAAW,WAAW;AAAG,WAAO,EAAE,QAAQ,aAAa,OAAO,MAAM,QAAQ;AAE1E,QAAA,cAAc,KAAK,WAAW;AAAA,IAClC,OAAO,MAAM;AAAA,IACb,cAAc,WAAW;AAAA,IACzB;AAAA,EAAA,CACD;AAEG,MAAA;AACJ,MAAI,cAAc;AAClB,MAAI,UAAU;AACZ,UAAM,OAAOA,eAAa,WAAW,CAAC,GAAG,cAAc;AACjD,UAAA,SAAS,aAAa,MAAM,SAAS;AAC3C,UAAM,UAAU,MAAM,cAAc,KAAK,MAAM;AAC/C,QAAI,CAAC;AAAS,YAAM,IAAI,UAAU,sBAAsB,yBAAyB,MAAM,EAAE;AACzF,UAAM,SAAwB;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,eAAe,EAAE,MAAM,cAAc,YAAY,OAAO;AAAA,IAAA;AAE1D,UAAM,aAAa,MAAM,cAAc,KAAK,QAAQ,OAAO;AAAA,MACzD,GAAG,eAAe,OAAO;AAAA,MACzB,QAAQ;AAAA,IAAA,CACT;AACW,gBAAAA;AAAAA,MACV,MAAM,YAAY,KAAK,eAAe;AAAA,QACpC,GAAG,gBAAgB,MAAM;AAAA,QACzB,GAAG,oBAAoB,WAAW,IAAI;AAAA,QACtC,SAAS,eAAe,KAAK;AAAA,QAC7B,MAAM,WAAW;AAAA,QACjB,2BAA2B,aAAa,WAAW,MAAM,kBAAkB;AAAA,QAC3E,iBAAiB,eAAe,GAAG;AAAA,MAAA,CACpC;AAAA,MACD;AAAA,IAAA;AAEF,kBAAc,UAAU,YAAY;AAAA,EAAA,OAC/B;AACO,gBAAAA;AAAAA,MACV,MAAM,YAAY,KAAK,gBAAgB,EAAE,iBAAiB,eAAe,GAAG,GAAG;AAAA,MAC/E;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,UAAU,YAAY,QAAQ,UAAU,WAAW;AAAoB,WAAA;AACrE,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AACnC,QAAM,SAAS,MAAM,YAAY,KAAK,QAAQ;AAAA,IAC5C,SAAS,cAAc,qBAAqB;AAAA,IAC5C,OAAO,aAAa;AAAA,EAAA,CACrB;AACM,SAAA,EAAE,GAAG,WAAW;AACzB;AAEA,eAAe,aACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AACxB,QAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,YAAY,KAAK,eAAe,EAAE,UAAU;AACjE,QAAM,YAAY,EAAE,QAAQ,aAAa,kBAAkB,MAAM,MAAM;AACvE,MAAI,MAAM,YAAY;AAAa,WAAA,EAAE,QAAQ,WAAW;AAClD,QAAA,cAAc,KAAK,aAAa,SAAS;AAC/C,QAAM,YAAYA;AAAAA,IAChB,MAAM,YAAY,KAAK,kBAAkB;AAAA,MACvC;AAAA,MACA,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,eAAe,GAAG;AAAA,IAAA,CACpC;AAAA,IACD;AAAA,EAAA;AAEI,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AAC7B,QAAA,OAAO,MAAM,YAAY,KAAK,QAAQ,EAAE,OAAO,aAAa,MAAA,CAAO;AACzE,SAAO,EAAE,GAAG,WAAW,QAAQ,KAAK;AACtC;AAEA,eAAe,gBACb,KACA,OACA,MACkC;AAC9B,MAAA,MAAM,aAAa,WAAW;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,QAAM,YAAYA;AAAAA,IAChB,MAAM,YAAY,KAAK,QAAQ,IAAI,IAAI;AAAA,MACrC;AAAA,MACA,iBAAiB,eAAe,GAAG;AAAA,MACnC,GAAI,SAAS,YAAY,EAAE,kBAAkB,MAAM,YAAY,WAAW,IAAI,CAAC;AAAA,IAAA,CAChF;AAAA,IACD,QAAQ,IAAI;AAAA,EAAA;AAER,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AACnC,QAAM,OAAO,MAAM,YAAY,KAAK,MAAM;AAC1C,SAAO,EAAE,GAAG,WAAW,QAAQ,KAAK;AACtC;AAEA,eAAe,cACb,KACA,OACA,SACA,cACyB;AACzB,QAAM,aAAa,MAAM,eAAe,KAAK,KAAK;AAClD,MAAI,WAAW,SAAS;AAAkB,WAAA;AAE1C,QAAMf,QAAO;AACP,QAAA,iBAAiB,mBAAmB,GAAG;AACzC,MAAA;AACA,MAAA;AACJ,MAAI,gBAAgB;AACd,QAAA;AACI,YAAAA,MAAK,MAAM,gBAAgB,EAAE,WAAW,MAAM,MAAM,KAAO;AACrD,kBAAA;AACZ,oBAAc,OAAO,WAAA,EAAa,WAAW,KAAK,EAAE;AAAA,aAC7C,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,kBAAkB,KAAK,CAAC,YAAY,OAAO,UAAU;AAAS,cAAA;AAAA,IACxF;AAAA,EACF;AACA,MAAI,CAAC,aAAa;AACV,UAAAA,MAAK,MAAM,IAAI,YAAY,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAC3D,gBAAA,MAAMA,MAAK,YAAY,EAAE,KAAK,IAAI,YAAY,MAAM,QAAQ,SAAU,CAAA;AAAA,EACpF;AACI,MAAA,OAAOA,MAAK,KAAK,KAAK,WAAY,GAAG,eAAe,QAAQ,OAAO;AACjE,QAAA,aAAa,CAAC,gBAClB,WAAW,SAAS,QAChB,aAAa,WAAW,KAAK,aAAa,aAAa,UAAU,IAAI,MAAM,IAC3E,SAAS,WAAW,MAAM,aAAa,IAAI,MAAM;AACnD,MAAA;AACE,QAAA;AACA,QAAA;AACS,iBAAA,MAAM,WAAW,IAAI;AAAA,aACzB,OAAO;AACd,UAAI,CAAC,eAAe,CAAC,YAAY,OAAO,kBAAkB;AAAS,cAAA;AACnE,YAAMA,MAAK,OAAO,IAAI,EAAE,MAAM,MAAM;AAAA,MAAA,CAAE;AACxB,oBAAA;AACR,YAAAA,MAAK,MAAM,IAAI,YAAY,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAC3D,kBAAA,MAAMA,MAAK,YAAY,EAAE,KAAK,IAAI,YAAY,MAAM,QAAQ,SAAU,CAAA;AAClF,aAAOA,MAAK,KAAK,KAAK,WAAW,aAAa;AACnC,iBAAA,MAAM,WAAW,IAAI;AAAA,IAClC;AACA,aAAS,cAAc;AACjB,UAAA,QAAQ,aAAa,aAAa;AACxC,UAAM,WAAW,MAAM,MAAM,KAAK,UAAU,OAAO;AAC/C,QAAA,SAAS,mBAAmB,qBAAqB;AAC7C,YAAA,IAAI,UAAU,8BAA8B,kCAAkC;AAAA,IACtF;AACA,QAAI,SAAS,gBAAgB,SAAS,UAAU,SAAS,SAAS,SAAS,MAAM;AAC/E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB,SAAS;AAAA,UAC1B,eAAe,SAAS;AAAA,UACxB,eAAe,SAAS;AAAA,UACxB,aAAa,SAAS;AAAA,QACxB;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,SAAS,YAAY,SAAS;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,MACL,MAAM,SAAS;AAAA,MACf,SAAS,SAAS;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT,eAAe,EAAE,MAAM,cAAc,gBAAgB,SAAS,OAAO;AAAA,IAAA;AAAA,EACvE,UACA;AACA,UAAMA,MAAK,OAAO,cAAc,OAAO,WAAY,EAAE,WAAW,CAAC,aAAa,EAC3E,MAAM,MAAM;AAAA,IAAA,CAAE;AAAA,EACnB;AACF;AAEA,eAAe,eACb,KACA,OAKA;AACM,QAAA,aAAaa,iBAAe,MAAM,MAAM;AACxC,QAAA,OAAOA,iBAAe,MAAM,IAAI;AACtC,MAAI,cAAc,MAAM;AAChB,UAAA,IAAI,WAAW,qBAAqB,4CAA4C;AAAA,EACxF;AACA,QAAM,MAAM,QAAQ;AACpB,MAAI,CAAC;AAAW,UAAA,IAAI,WAAW,oBAAoB,8BAA8B;AACjF,QAAM,SAAS,OAAO,SAASA,iBAAe,MAAM,IAAI;AACpD,MAAA,QAAQ,UAAU,WAAW,QAAQ;AACjC,UAAA,IAAI,WAAW,qBAAqB,8BAA8B;AAAA,EAC1E;AAEA,MAAI,WAAW;AAAO,WAAO,EAAE,MAAM,OAAO,KAAK,aAAa,GAAG;AACjE,MAAI,WAAW;AAAQ,WAAO,EAAE,MAAM,QAAQ,MAAM,eAAe,KAAK,GAAG;AAC3E,MAAI,WAAW,WAAW;AACjB,WAAA;AAAA,MACL,MAAM;AAAA,MACN,SAAS,2BAA2B,GAAG;AAAA,MACvC,eAAe,EAAE,MAAM,cAAc,YAAY,2BAA2B,GAAG,EAAE;AAAA,IAAA;AAAA,EAErF;AACI,MAAA;AAAQ,UAAM,IAAI,WAAW,oBAAoB,yBAAyB,MAAM,EAAE;AAElF,MAAA,gBAAgB,KAAK,GAAG;AAAG,WAAO,EAAE,MAAM,OAAO,KAAK,aAAa,GAAG;AACpE,QAAA,gBAAgB,eAAe,KAAK,GAAG;AACvC,QAAAY,QAAO,MAAM,SAAS,aAAa;AACzC,MAAIA,OAAM;AACJ,QAAA,CAACA,MAAK,QAAQ;AAChB,YAAM,IAAI,WAAW,uBAAuB,sCAAsC,GAAG,EAAE;AAAA,IACzF;AACA,WAAO,EAAE,MAAM,QAAQ,MAAM,cAAc;AAAA,EAC7C;AACI,MAAA,mBAAmB,GAAG,GAAG;AAC3B,UAAM,IAAI,WAAW,kBAAkB,+BAA+B,GAAG,EAAE;AAAA,EAC7E;AACM,QAAA,aAAa,2BAA2B,GAAG;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,MAAM,cAAc,WAAW;AAAA,EAAA;AAEpD;AAEA,SAAS,mBAAmB,KAAyC;AAC7D,QAAA,OAAO,UAAU,OAAO;AAC9B,QAAM,WAAW,IAAI,IAAI,IAAI,WAAW,QAAQ,EAAE;AAC9C,MAAA,CAAC,QAAQ,CAAC,CAAC,aAAa,aAAa,OAAO,EAAE,SAAS,QAAQ;AAAU,WAAA;AACtE,SAAA,QAAA,EAAU,KAAK,KAAK,MAAM,SAAS,iBAAiB,gBAAgB,UAAU;AACvF;AAEA,gBAAgB,WAAW,MAAgB,MAA0C;AAC7E,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,SAAO,MAAM;AACX,QAAI,OAAO;AACJ,WAAA,OAAO,OAAO,QAAQ;AAC3B,YAAM,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,IAAI,CAAC;AAClD,UAAI,SAAS;AAAM;AACnB,UAAI,SAAS;AAAS,cAAA,IAAI,WAAW,oBAAoB,4BAA4B;AAC7E,cAAA;AAAA,IACV;AACA,QAAI,SAAS;AAAG;AACV,UAAA,OAAO,SAAS,GAAG,IAAI;AAAA,EAC/B;AACF;AAEA,eAAe,kBACb,MACA,QACA,QACyD;AACzD,QAAM,SAAS,MAAM,UAAU,KAAK,MAAM,EAAE,OAAO,MAAM,WAAW,MAAM,MAAM,IAAO,CAAA;AACvF,QAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AAC1C,QAAM,QAAQ,IAAI,WAAW,gBAAgB,MAAM;AACnD,MAAI,OAAO;AACP,MAAA;AACF,qBAAiB,SAAS,QAAQ;AAChC,aAAO,eAAe;AACtB,UAAI,OAAO,MAAM;AAAc,cAAA,IAAI,MAAM,SAAS,GAAG,MAAM,SAAS,IAAI,GAAG,IAAI;AAC/E,WAAK,OAAO,KAAK;AACjB,cAAQ,MAAM;AACV,UAAA,CAAC,OAAO,cAAc,IAAI;AAAS,cAAA,IAAI,WAAW,kBAAkB,mBAAmB;AAC3F,UAAI,SAAS;AACN,aAAA,SAAS,MAAM,QAAQ;AAC5B,cAAM,UAAU,MAAM,OAAO,MAAM,MAAM,SAAS,MAAM,CAAC;AACzD,YAAI,YAAY;AAAS,gBAAA,IAAI,WAAW,qBAAqB,6BAA6B;AAChF,kBAAA;AAAA,MACZ;AAAA,IACF;AACqB,yBAAA,MAAM,SAAS,GAAG,KAAK,IAAI,MAAM,MAAM,MAAM,CAAC,CAAC;AACpE,UAAM,OAAO;AACb,WAAO,EAAE,MAAM,MAAM,QAAQ,KAAK;EAAY,UAC9C;AACA,UAAM,OAAO;EACf;AACF;AAEA,eAAe,SACb,QACA,aACA,QACuB;AACnB,MAAA;AACA,MAAA;AACK,WAAA,MAAM,UAAU,KAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,WAC3C,OAAO;AACd,UAAM,IAAI,WAAW,oBAAoB,wBAAwB,aAAa,KAAK,CAAC,EAAE;AAAA,EACxF;AACI,MAAA;AACI,UAAA,SAAS,MAAM,KAAK;AAC1B,QAAI,CAAC,OAAO;AAAc,YAAA,IAAI,WAAW,uBAAuB,2BAA2B;AACrF,UAAA,WAAW,MAAM,kBAAkB,aAAa,WAAW,MAAM,MAAM,IAAI,GAAG,MAAM;AACpF,UAAA,QAAQ,MAAM,KAAK;AACzB,QACE,SAAS,SAAS,OAAO,QAAQ,OAAO,SAAS,MAAM,QACvD,OAAO,OAAO,QAAQ,MAAM,MAAM,OAAO,WACzC;AACM,YAAA,IAAI,WAAW,oBAAoB,+BAA+B;AAAA,IAC1E;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,QAAQ,GAAG;EAAS,UACpD;AACA,UAAM,KAAK;EACb;AACF;AAEA,eAAe,aACb,KACA,aACA,YACA,QACuB;AACnB,MAAA;AACA,MAAA;AACO,aAAA,aAAa,CAAC,MAAM,WAAW,KAAK,MAAM,CAAC,IAAI,MAAM,gBAAgB,KAAK,MAAM;AACzF,UAAM,WAAW,MAAM,kBAAkB,aAAa,QAAQ,MAAM;AAC7D,WAAA,EAAE,MAAM,OAAO,SAAS,QAAQ,GAAG,GAAG,GAAG;WACzC,OAAO;AACd,QAAI,iBAAiB,aAAa,YAAY,OAAO,kBAAkB;AAAS,YAAA;AAChF,WAAO,eAAe;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,4BAA4B,aAAa,KAAK,CAAC;AAAA,MAC/C;AAAA,MACA;AAAA,IAAA;AAAA,EACF,UACA;AACI,QAAA,kBAAkB,kBAAkB,CAAC,OAAO;AAAQ,YAAM,OAAO,SAAS,MAAM,MAAM;AAAA,MAAA,CAAE;AAAA,EAC9F;AACF;AAEA,eAAe,gBAAgB,KAAU,QAA0D;AAC3F,QAAA,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,UAAU,UAAU,OAAA,CAAQ;AAC/E,MAAI,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM;AAC5B,UAAA,SAAS,MAAM;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,+BAA+B,SAAS,MAAM;AAAA,MAC9C;AAAA,MACA,SAAS,UAAU;AAAA,IAAA;AAAA,EAEvB;AACA,SAAO,SAAS;AAClB;AAEA,eAAe,UACb,KACA,UACA,SAC8B;AACxB,QAAA,WAAW,EAAE,aAAa,SAAS,QAAQ,MAAM,SAAS,MAAM;AACtE,MAAI,SAAS,aAAa;AACpB,QAAA;AACF,YAAM5B,SAAQkB;AAAAA,QACZ,MAAM,YAAY,KAAK,yBAAyB;AAAA,UAC9C,GAAG;AAAA,UACH,eAAe,SAAS;AAAA,QAAA,CACzB;AAAA,QACD;AAAA,MAAA;AAEF,aAAO,qBAAqBlB,MAAK;AAAA,aAC1B,OAAO;AACd,UAAI,CAAC,aAAa,KAAK,EAAE,SAAS,wBAAwB;AAAS,cAAA;AAAA,IACrE;AAAA,EACF;AACA,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC;AAAS,UAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AACzF,QAAM,SAAS,MAAM,QAAQ,YAAA,GAAe;AACtC,QAAA,QAAQ,UAAU,qBAAqB;AAAA,IAC3C,UAAU8C,gBAAc,IAAI,WAAW,QAAQ;AAAA,IAC/C,cAAc;AAAA,IACd,SAAS,CAAC,SAA4B,SACpC,MAAM,uBAAuB,OAAO,GAAG,EAAE,GAAG,MAAM,QAAQ,IAAI,QAAQ;AAAA,EAAA,CACzE;AACG,MAAA;AACA,MAAA;AACI,UAAA,OAAO,MAAM,QAAA,EAAU,KAAK,SAAS,MAAM,EAAE,MAAM,KAAA,CAAM;AACzD,UAAA,SAAS,IAAI,IAAI;AACvB,UAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AACtC,QAAA;AACF,uBAAiB,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI,GAAG;AAC5D,YAAI,OAAO;AACX,aAAK,OAAO,KAAK;AACX,cAAA,QAAQ,IAAI,QAAQ,iBAAiB,MAAM,QAAQ,IAAI,YAAY,KAAK,CAAC;AAC/E,cAAM,MAAM,SAAS,MAAM,YAAY,KAAK;AAC5C,eAAO,YAAY,KAAK;AAAA,MAC1B;AAAA,IAAA,UACA;AACA,YAAM,KAAK;IACb;AACI,QAAA,OAAO,eAAe,SAAS,QAAQ,KAAK,UAAU,MAAM,SAAS,QAAQ;AACzE,YAAA,IAAI,UAAU,wBAAwB,qCAAqC;AAAA,IACnF;AACA,QAAI,UAAU,OAAO,KAAK,CAAC,EAAE,SAAS;AAClC,QAAA,OAAO,KAAK,SAAS,GAAG;AAC1B,YAAM,CAACC,KAAIC,KAAI,IAAI,OAAO,SAAS;AAC7B,YAAA,MAAM,UAAU,EAAE,QAAQD,IAAG,YAAY,UAAUC,MAAAA,CAAM;AAC/D,gBAAUD,IAAG;IACf;AACM,UAAA,aAAa,IAAI,IAAI,WAAW,GAAG,SAAS,MAAM,SAAS,SAAS,MAAM,OAAO;AACvF,UAAM,CAAC,IAAI,IAAI,IAAI,WAAW,SAAS;AACjC,UAAA,MAAM,UAAU,EAAE,QAAQ,GAAG,YAAY,UAAU,KAAA,CAAM;AAC/D,mBAAe,GAAG;WACX,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,QAAI,OAAO;AACX,UAAM,IAAI;AAAA,MACR;AAAA,MACA,0BAA0B,aAAa,KAAK,CAAC;AAAA,MAC7C;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,QAAQ7B;AAAAA,IACZ,MAAM,YAAY,KAAK,yBAAyB;AAAA,MAC9C,GAAG;AAAA,MACH,eAAe;AAAA,IAAA,CAChB;AAAA,IACD;AAAA,EAAA;AAEF,SAAO,qBAAqB,KAAK;AACnC;AAEA,SAAS,qBAAqB,OAAqD;AAC1E,SAAA;AAAA,IACL,gBAAgB,aAAa,OAAO,gBAAgB;AAAA,IACpD,QAAQ,aAAa,OAAO,QAAQ;AAAA,IACpC,aAAa,aAAa,OAAO,aAAa;AAAA,IAC9C,MAAM,aAAa,OAAO,MAAM;AAAA,IAChC,SAAS,aAAa,OAAO,SAAS;AAAA,IACtC,YAAY,eAAe,MAAM,UAAU;AAAA,EAAA;AAE/C;AAEA,SAAS,uBAAuB,SAA+C;AACzE,MAAA,OAAO,YAAY,UAAU;AAC/B,WAAO,QAAQ,WAAW,OAAO,GAAG,EAAE,WAAW,OAAO,GAAG;AAAA,EAC7D;AACA,MAAI,mBAAmB,KAAK;AAC1B,WAAO,IAAI,IAAI,QAAQ,SAAW,EAAA,WAAW,OAAO,GAAG,EAAE,WAAW,OAAO,GAAG,CAAC;AAAA,EACjF;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,QACA,OACA,YAAqC,CAAA,GACT;AAC5B,QAAM,SAAS,MAAM,YAAY,KAAK,gBAAgB;AAAA,IACpD,GAAG,gBAAgB,MAAM;AAAA,IACzB,GAAG,qBAAqB,KAAK;AAAA,IAC7B,GAAG;AAAA,IACH,SAAS,eAAe,KAAK;AAAA,EAAA,CAC9B;AACD,SAAO,iBAAiB,MAAM;AAChC;AAEA,eAAe,cACb,KACA,QACA,OACA,MACA,YAAqC,IACT;AACrB,SAAA;AAAA,IACL,MAAM,YAAY,KAAK,uBAAuB;AAAA,MAC5C,GAAG,gBAAgB,MAAM;AAAA,MACzB,GAAG,oBAAoB,IAAI;AAAA,MAC3B,GAAG;AAAA,MACH;AAAA,MACA,SAAS,eAAe,KAAK;AAAA,IAAA,CAC9B;AAAA,EAAA;AAEL;AAEA,eAAe,oBACb,KACA,QACA,OACA,SAC4B;AAC5B,MAAI,aAAa;AACjB,QAAM,cAAc,eAAe,YAAY,QAAQ,MAAM;AACzD,MAAA,IAAI,OAAO,gBAAgB;AAC7B,QAAI,CAAC,eAAe,MAAM,WAAW,UAAa,MAAM,mBAAmB,QAAW;AACpF,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,EACT;AAEM,QAAA,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,oBAAoB,UAAU,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AACnF,MAAI,CAAC,IAAI,GAAG,mBAAmB,IAAI;AAAkB,WAAA;AAC/C,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,uCAAuC,IAAI,OAC5E;AACC,MAAA,WAAW,OAAO,WAAW,MAAM;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,WAAW,OAAO,WAAW,QAAQ;AACvC,UAAM,MAAM,MAAM,IAAI,GAAG,OAAO,2DAA2D;AACrF,UAAA,UAAU,iBAAiB,GAAG;AACpC,iBAAa,MAAM,cAAc,KAAK,QAAQ,OAAO,QAAQ,MAAM,OAAO;AAAA,EAC5E;AACA,MAAI,eAAe,YAAY,QAAQ,MAAM,SAAS;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,QACA,aAC8C;AAC1C,MAAA;AACK,WAAAA;AAAAA,MACL,MAAM,YAAY,KAAK,gBAAgB;AAAA,QACrC,UAAU;AAAA,QACV,GAAI,cAAc,EAAE,eAAe,gBAAgB,CAAC;AAAA,MAAA,CACrD;AAAA,MACD;AAAA,IAAA;AAAA,WAEK,OAAO;AACV,QAAA,iBAAiB,aAAa,MAAM,SAAS;AAA6B,aAAA;AACxE,UAAA;AAAA,EACR;AACF;AAEA,eAAe,mBACb,KACA,QAC0B;AAC1B,QAAM,SAASA;AAAAA,IACb,MAAM,YAAY,KAAK,uBAAuB,EAAE,SAAS,QAAQ;AAAA,IACjE;AAAA,EAAA;AAEF,QAAM,QAAQ,SAAS,OAAO,KAAK,IAAI,OAAO,QAAQ;AAChD,QAAA,mBAAmB,SAAS,SAAS,MAAM,OAAO,IACpD,kBAAkB,MAAM,OAAO,IAC/B;AACG,SAAA;AAAA,IACL,OAAO,aAAa,QAAQ,YAAY;AAAA,IACxC,SAASF,iBAAe,OAAO,YAAY;AAAA,IAC3C,SAAS,uBAAuB,MAAM;AAAA,IACtC,OAAO,QACH;AAAA,MACA,MAAMA,iBAAe,MAAM,IAAI;AAAA,MAC/B,SAASA,iBAAe,MAAM,OAAO;AAAA,MACrC,WAAW,OAAO,MAAM,cAAc,YAAY,MAAM,YAAY;AAAA,MACpE,SAAS,SAAS,gBAAgB,IAAI,mBAAmB;AAAA,IAEzD,IAAA;AAAA,IACJ,MAAM;AAAA,EAAA;AAEV;AAEA,eAAe,cACb,KACA,QACAV,UACe;AACf,QAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,EAAE,QAAQ,WAAWA,SAAW,GAAA,MAAM,CAAC,CAAC;AAAA,CAAI;AAClF,MAAI,IAAI;AAAW;AACnB,MAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,oBAAoB,MAAM,UAAU,IAAI,KAAK,EAAE,YAAY;AAC3F,MAAA,WAAW,OAAO,WAAW,OAAO;AACtC,UAAM,IAAI,UAAU,yBAAyB,GAAG,MAAM,iBAAiB,eAAe;AAAA,EACxF;AACF;AAEA,eAAe,YACb,KACA,QACA,QACY;AACR,MAAA;AACK,WAAA,MAAM,IAAI,QAAQ,KAAQ,uBAAuB,QAAQ,QAAQ,WAAW,GAAG,CAAC;AAAA,WAChF,OAAO;AACd,UAAM,yBAAyB,KAAK;AAAA,EACtC;AACF;AAEA,SAAS,yBAAyB,OAA2B;AAC3D,MAAI,iBAAiB;AAAkB,WAAA;AACjC,QAAA,UAAU,aAAa,KAAK;AAC5B,QAAA,aAAa,kBAAkB,OAAO;AAC5C,MAAI,cAAc,OAAO,WAAW,SAAS,UAAU;AACrD,UAAM,aAAa,SAAS,WAAW,OAAO,IAAI,WAAW,UAAU;AACjE,UAAA,UAAU,kBAAkB,UAAU;AAC5C,WAAO,IAAI;AAAA,MACT,WAAW;AAAA,MACX,OAAO,WAAW,YAAY,WAAW,WAAW,UAAU;AAAA,MAC9D,WAAW,SAAS,yBAAyB,iBAAiB;AAAA,MAC9D,WAAW,cAAc;AAAA,MACzB,SAAS,OAAO,IAAI,UAAU,CAAC;AAAA,IAAA;AAAA,EAEnC;AACM,QAAA,QAAQ,QAAQ;AACtB,MACE,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,cAAc,KAChE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,iBAAiB,KACzE,MAAM,SAAS,eAAe,GAC9B;AACA,WAAO,IAAI;AAAA,MACT,MAAM,SAAS,SAAS,IAAI,oBAAoB;AAAA,MAChD,MAAM,SAAS,SAAS,IAAI,kCAAkC;AAAA,MAC9D;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,QAAQ,GAAG;AACvD,WAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY;AAAA,EACrE;AACA,MAAI,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,WAAW,GAAG;AAC5D,WAAO,IAAI,UAAU,WAAW,uBAAuB,cAAc,IAAI;AAAA,EAC3E;AACA,MACE,MAAM,SAAS,cAAc,KAAK,MAAM,SAAS,oBAAoB,KACrE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,qBAAqB,KAC7E,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,uBAAuB,SAAS,kBAAkB,IAAI;AAAA,EAC7E;AACA,MAAI,QAAQ,SAAS,mBAAmB,KAAK,aAAa,KAAK,OAAO,GAAG;AAChE,WAAA,IAAI,UAAU,sBAAsB,OAAO;AAAA,EACpD;AACI,MAAA,wBAAwB,KAAK,OAAO,GAAG;AACzC,WAAO,IAAI,UAAU,qBAAqB,SAAS,eAAe;AAAA,EACpE;AACI,MAAA,oCAAoC,KAAK,OAAO,GAAG;AAC9C,WAAA,IAAI,UAAU,wBAAwB,OAAO;AAAA,EACtD;AACA,SAAO,IAAI,UAAU,oBAAoB,SAAS,cAAc;AAClE;AAEA,SAAS,gBAAgB,QAAiD;AACjE,SAAA,EAAE,QAAQ,OAAO;AAC1B;AAEA,SAAS,qBAAqB,OAAyD;AAC9E,SAAA;AAAA,IACL,GAAI,OAAO,MAAM,kBAAkB,WAAW,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,IACxF,GAAI,SAAS,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IACzD,GAAI,SAAS,MAAM,cAAc,IAAI,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAAA,EAAA;AAErF;AAEA,SAAS,oBAAoB,MAAwD;AAC5E,SAAA;AAAA,IACL,eAAe,aAAa,MAAM,eAAe;AAAA,IACjD,QAAQY,eAAa,KAAK,QAAQ,aAAa;AAAA,IAC/C,gBAAgBA,eAAa,KAAK,gBAAgB,qBAAqB;AAAA,EAAA;AAE3E;AAEA,SAAS,eAAe,SAA2D;AAC1E,SAAA;AAAA,IACL,eAAe,aAAa,SAAS,eAAe;AAAA,EAAA;AAExD;AAEA,SAAS,eAAe,OAAyD;AAC/E,QAAM+B,UAASjC,iBAAe,MAAM,MAAM,KAAK;AACxC,SAAA,EAAE,QAAQiC,QAAO,WAAW,KAAK,GAAG,EAAE;AAC/C;AAEA,SAAS,cAAc,QAAiD;AACtE,MAAI,OAAO,SAAS;AAAW,WAAO,EAAE,MAAM,OAAO,MAAM,YAAY,OAAO;AACvE,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO;AAAA,IACf,aAAa,OAAO,SAAS;AAAA,IAC7B,MAAM,OAAO,SAAS;AAAA,EAAA;AAE1B;AAEA,SAAS,oBAAoB,YAAwD;AACnF,QAAM,OAAO,WAAW;AACjB,SAAA;AAAA,IACL,kBAAkB,KAAK;AAAA,IACvB,UAAU,KAAK;AAAA,IACf,KAAK,KAAK;AAAA,IACV,iBAAiB,KAAK;AAAA,IACtB,eAAe,KAAK;AAAA,IACpB,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK;AAAA,IACxB,gBAAgB,KAAK;AAAA,IACrB,WAAW,WAAW,OAAO;AAAA,IAC7B,UAAU,WAAW,OAAO,YAAY,CAAC;AAAA,EAAA;AAE7C;AAEA,SAAS,gBAAgB,YAAwD;AACxE,SAAA;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,iBAAiB,WAAW,KAAK;AAAA,IACjC,mBAAmB/B,eAAa,WAAW,KAAK,KAAK,UAAU,EAAE;AAAA,EAAA;AAErE;AAEA,SAAS,4BACP,MACA,YACM;AACA,QAAA,cAAc,aAAa,MAAM,kBAAkB;AACrD,MAAA,gBAAgB,WAAW,KAAK,kBAAkB;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,kBAAkB;AAAA,QAClB,qBAAqB,WAAW,KAAK;AAAA,MACvC;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,kBACP,QACA,MACM;AACN,MAAI,OAAO,SAAS;AAAW;AAC/B,QAAM,WAAWA,eAAa,KAAK,iBAAiB,sBAAsB;AACpE,QAAA,SAAS,aAAa,UAAU,aAAa;AAC/C,MAAA,WAAW,OAAO,SAAS,QAAQ;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,aAAa,QAAQ,eAAe,OAAO,SAAS,OAAO;AAAA,IAAA;AAAA,EAEjE;AACF;AAEA,SAAS,mBAAmB,MAAqC;AAC3D,MAAA,KAAK,mBAAmB,qBAAqB;AAC/C,UAAM,IAAI;AAAA,MACR;AAAA,MACA,+BAA+B,mBAAmB;AAAA,IAAA;AAAA,EAEtD;AACA,eAAa,MAAM,kBAAkB;AACrC,eAAa,MAAM,SAAS;AACtB,QAAA,8BAAc,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,aAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,QAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,UAAU,cAAc,0CAA0C,GAAG,EAAE;AAAA,IACnF;AAAA,EACF;AACA,sBAAoB,MAAM,MAAM;AAClC;AAEA,SAAS,oBAAoB,OAAgB,MAAoB;AAC3D,MAAA,MAAM,QAAQ,KAAK,GAAG;AAClB,UAAA,QAAQ,CAAC,MAAM,UAAU,oBAAoB,MAAM,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;AAC7E;AAAA,EACF;AACI,MAAA,CAAC,SAAS,KAAK;AAAG;AACtB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAA,aAAa,IAAI;AACvB,UAAM,aAAa,eAAe,oBAAoB,eAAe,kBACnE,eAAe,mBAAmB,eAAe,mBACjD,eAAe,iBAAiB,eAAe,cAC/C,WAAW,SAAS,QAAQ,KAAK,WAAW,SAAS,WAAW,KAChE,WAAW,SAAS,cAAc,KACjC,WAAW,SAAS,QAAQ,KAAK,eAAe;AACnD,QAAI,YAAY;AACd,YAAM,IAAI,UAAU,uBAAuB,GAAG,IAAI,IAAI,GAAG,8BAA8B;AAAA,IACzF;AAEE,QAAA,OAAO,UAAU,aAChB,8CAA8C,KAAK,KAAK,KACvD,2DAA2D,KAAK,KAAK,IACvE;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,IAAI,GAAG;AAAA,MAAA;AAAA,IAElB;AACA,wBAAoB,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE;AAAA,EAC7C;AACF;AAEA,eAAe,aAAa,MAAgD;AACtE,MAAA;AACA,MAAA;AACF,UAAM,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,WAChC,OAAO;AACd,UAAM,IAAI,WAAW,oBAAoB,+BAA+B,aAAa,KAAK,CAAC,EAAE;AAAA,EAC/F;AACI,MAAA;AACA,MAAA;AACM,YAAA,KAAK,MAAM,GAAG;AAAA,EAAA,QAChB;AACA,UAAA,IAAI,WAAW,qBAAqB,+BAA+B;AAAA,EAC3E;AACM,QAAA,OAAOA,eAAa,OAAO,aAAa;AAC9C,qBAAmB,IAAI;AAChB,SAAA;AACT;AAEA,eAAe,cACb,KACA,MACA,MACe;AACT,QAAA,SAAS,MAAM,SAAS,IAAI;AAClC,MAAI,QAAQ;AACN,QAAA,CAAC,OAAO,QAAQ;AACZ,YAAA,IAAI,WAAW,qBAAqB,+CAA+C;AAAA,IAC3F;AACI,QAAA,CAAC,IAAI,WAAW;AAClB,UAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,cAAM,IAAI;AAAA,UACR;AAAA,UACA,+BAA+B,IAAI;AAAA,UACnC;AAAA,QAAA;AAAA,MAEJ;AACM,YAAA,UAAU,MAAM,IAAI,GAAG,OAAO,kCAAkC,IAAI,UAAU,IAChF,KAAK,EAAE,YAAY;AACnB,UAAA,WAAW,OAAO,WAAW,OAAO;AACtC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA;AAC5C,MAAA;AACF,UAAM,QAAU,EAAA;AAAA,MACd;AAAA,MACA;AAAA,MACA,SAAS,EAAE,MAAM,QAAU,EAAE,WAAW,MAAM,MAAM,IAAM;AAAA,IAAA;AAExD,QAAA,QAAA,EAAU,aAAa;AAAW,YAAM,QAAQ,EAAE,MAAM,MAAM,GAAK;AAAA,WAChE,OAAO;AACd,UAAM,IAAI,WAAW,qBAAqB,gCAAgC,aAAa,KAAK,CAAC,EAAE;AAAA,EACjG;AACF;AAEA,eAAe,eAAe,KAAqB,QAAuC;AACxF,MAAI,OAAO,SAAS;AAAW;AAC3B,MAAA;AACF,UAAM,IAAI,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA,EAAE,gBAAgB,OAAO,QAAQ,OAAO;AAAA,MACxC;AAAA,QACE,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX,QAAQ,IAAI,gBAAA,EAAkB;AAAA,MAChC;AAAA,IAAA;AAAA,WAEK,OAAO;AACd,UAAM,IAAI,GAAG,OAAO,kDAAkD,aAAa,KAAK,CAAC;AAAA,CAAI;AAAA,EAC/F;AACF;AAEA,SAAS,iBAAiB,OAAmC;AACrD,QAAAhB,UAASgB,eAAa,OAAO,uBAAuB;AACpD,QAAA,gBAAgB,aAAahB,SAAQ,gBAAgB;AAC3D,MAAI,kBAAkB,qBAAqB;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8BAA8B,aAAa,MAAM,mBAAmB;AAAA,IAAA;AAAA,EAExE;AACA,QAAM,aAAgC;AAAA,IACpC,gBAAgB;AAAA,IAChB,MAAMgB,eAAahB,QAAO,MAAM,iBAAiB;AAAA,IACjD,mBAAmBgB,eAAahB,QAAO,mBAAmB,8BAA8B;AAAA,IACxF,QAAQgB,eAAahB,QAAO,QAAQ,mBAAmB;AAAA,EAAA;AAEzD,qBAAmB,WAAW,IAAI;AAClC,MAAI,WAAW,OAAO,qBAAqB,WAAW,KAAK,kBAAkB;AAC3E,UAAM,IAAI,UAAU,4BAA4B,0CAA0C,CAAC;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,KAAyD;AACjF,MAAI,CAAC;AAAW,UAAA,IAAI,UAAU,uBAAuB,+BAA+B;AAChF,MAAA;AACA,MAAA;AACM,YAAA,KAAK,MAAM,GAAG;AAAA,EAAA,QAChB;AACA,UAAA,IAAI,WAAW,sBAAsB,iCAAiC;AAAA,EAC9E;AACM,QAAA,UAAUgB,eAAa,OAAO,cAAc;AAClD,aAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AAClC,QAAA,QAAQ,YAAY,QAAQ,kBAAkB;AAChD,YAAM,IAAI,WAAW,oBAAoB,wBAAwB,GAAG,EAAE;AAAA,IACxE;AAAA,EACF;AACO,SAAA;AACT;AAEA,SAAS,2BAA2B,OAAuB;AACnD,QAAA,MAAM,MAAM;AAClB,MACE,CAAC,OAAO,gBAAgB,KAAK,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,KAAK,GAAG,GAC7F;AACA,UAAM,IAAI,WAAW,oBAAoB,mCAAmC,KAAK,EAAE;AAAA,EACrF;AACI,MAAA,IAAI,WAAW,MAAM,GAAG;AAC1B,WAAO,YAAY,GAAG;AAAA,EACxB;AACO,SAAA,IAAI,SAAS,GAAG,IAAI,IAAI,gBAAgB,YAAY,WAAW,GAAG,EAAE;AAC7E;AAEA,SAAS,qBAAqB,OAAuB;AACnD,SAAO,2BAA2B,KAAK;AACzC;AAEA,SAAS,YAAY,KAAqB;AACpC,MAAA;AACA,MAAA;AACI,UAAA,QAAQ,IAAI,QAAQ,GAAG;AAAA,WACtB,OAAO;AACd,UAAM,IAAI,WAAW,mBAAmB,oBAAoB,aAAa,KAAK,CAAC,EAAE;AAAA,EACnF;AACA,MAAI,IAAI,WAAW,SAAS,IAAI,WAAW,OAAO;AAC1C,UAAA,IAAI,WAAW,mBAAmB,uCAAuC;AAAA,EACjF;AACA,SAAO,IAAI;AACb;AAEA,SAAS,aAAa,OAAoB;AACpC,MAAA;AACA,MAAA;AACI,UAAA,IAAI,IAAI,KAAK;AAAA,EAAA,QACb;AACN,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACA,MAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACnD,UAAA,IAAI,WAAW,oBAAoB,iCAAiC;AAAA,EAC5E;AACI,MAAA,IAAI,YAAY,IAAI,UAAU;AAC1B,UAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAAA,EAClF;AACO,SAAA;AACT;AAEA,SAAS,qBAAqB,OAAyB;AACjD,MAAA,MAAM,SAAS,gBAAgB,QAAQ;AACnC,UAAA,IAAI,WAAW,gBAAgB,yCAAyC;AAAA,EAChF;AACI,MAAA,CAAC,gBAAgB,MAAM,CAAC,MAAM,UAAU,MAAM,KAAK,MAAM,IAAI,GAAG;AAC5D,UAAA,IAAI,WAAW,gBAAgB,+CAA+C;AAAA,EACtF;AACF;AAEA,SAAS4B,gBAAc,UAA0B;AACzC,QAAA,MAAM,IAAI,IAAI,QAAQ;AAC5B,QAAM,SAAS,IAAI,SAAS,QAAQ,OAAO;AACvC,MAAA,WAAW,UAAU,IAAI,IAAI,SAAS,MAAM,GAAG,MAAM,KAAK,MAAM;AACpE,MAAI,SAAS;AACb,MAAI,OAAO;AACX,SAAO,IAAI,SAAW,EAAA,QAAQ,OAAO,EAAE;AACzC;AAEA,SAAS,QAAQ,KAAkB;AAC3B,QAAA,OAAO,IAAI,IAAI,GAAG;AACxB,OAAK,SAAS;AACd,OAAK,OAAO;AACZ,SAAO,KAAK;AACd;AAEA,SAAS,mBAAmB,OAAwB;AAClD,SAAO,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,WAAW,GAAG,KACxE,MAAM,YAAY,EAAE,SAAS,OAAO;AACxC;AAEA,eAAe,SAAS,MAAiD;AACnE,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,MAAM,IAAI;AAAA,WAC1B,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACrC,UAAA,IAAI,WAAW,sBAAsB,qBAAqB,IAAI,KAAK,aAAa,KAAK,CAAC,EAAE;AAAA,EAChG;AACF;AAEA,SAAS,eAAe,KAAqB,MAAsB;AAC1D,SAAA,WAAW,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI;AACjE;AAEA,SAAS,kBAAkB,SAAsD;AAC/E,WAAS,QAAQ,QAAQ,QAAQ,GAAG,GAAG,SAAS,GAAG,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,CAAC,GAAG;AACtF,QAAA;AACF,YAAM,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC;AAC7C,UAAI,SAAS,KAAK;AAAU,eAAA;AAAA,IAAA,QACtB;AAAA,IAER;AAAA,EACF;AACO,SAAA;AACT;AAEA,SAAS,eAAe,YAA+B,OAAmC;AAClF,QAAA,YAAY,SAAS,WAAW,OAAO,SAAS,IAAI,WAAW,OAAO,YAAY;AACxF,SAAO,YAAY9B,iBAAe,UAAU,KAAK,CAAC,IAAI;AACxD;AAEA,SAAS,QAAQ,MAAmD;AAC3D,SAAAA,iBAAe,KAAK,QAAQ;AACrC;AAEA,SAAS,uBAAuB,QAAqD;AAC7E,QAAA,QAAQA,iBAAe,OAAO,KAAK;AACzC,QAAM,WAAW,SAAS,OAAO,QAAQ,IAAI,OAAO,WAAW;AACzD,QAAA,UAAU,YAAY,OAAO,SAAS,YAAY,WACpD,GAAG,SAAS,OAAO,MACnB;AACG,SAAA,CAAC,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AACvD;AAEA,SAAS,eAAe,KAA6B;AAC5C,SAAA,IAAI,kBAAkB,OAAO,WAAW;AACjD;AAEA,SAAS,mBAAmB,OAAsC;AAChE,MAAI,MAAM,YAAY,QAAQ,MAAM,YAAY,MAAM;AAC9C,UAAA,IAAI,WAAW,qBAAqB,gDAAgD;AAAA,EAC5F;AACF;AAEA,SAAS,gBAAgB,SAMH;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,6BAA6B;AAAA,IAC5E,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcD;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ,OAAO;AAAA,IAC/C,WAAW,QAAQ;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU,CAAC,eAAe,QAAQ,IAAI,OAAO;AAAA,IAC7C,SAAS,QAAQ;AAAA,EAAA;AAErB;AAEA,SAAS,cACP,OAC2C;AACpC,SAAA;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,QAAQ,KAAK;AAAA,IACjC;AAAA,IACA,EAAE,MAAM,QAAQ,aAAa,4BAA4B,MAAM,SAAS;AAAA,IACxE,GAAG;AAAA,EAAA;AAEP;AAEA,SAAS,kBAAkB,OAA+C;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,QAAQ,KAAK,EAAE;AAAA,MACzD,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,GAAG;AAAA,IACL;AAAA,IACA,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,mBAA+B;AACtC,SAAO,EAAE,MAAM,UAAU,YAAY,CAAA,GAAI,sBAAsB;AACjE;AAEA,SAAS,cAAiE;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EAAA;AAEV;AAEA,SAAS,eAAkE;AAClE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM,CAAC,GAAG,gBAAgB;AAAA,EAAA;AAE9B;AAEA,SAAS,WAAW,KAIlB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,SAASG,eAAa,OAAgB,OAAwC;AACxE,MAAA,CAAC,SAAS,KAAK,GAAG;AACpB,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,aAAa;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,SAAS,OAAkD;AAC3D,SAAA,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACrE;AAIA,SAAS,aAAa,OAAgB,UAA0B;AAC9D,QAAM,YAAY,SAAS,KAAK,IAAI,MAAM,QAAQ,IAAI;AACtD,MAAI,OAAO,cAAc,YAAY,CAAC,UAAU,QAAQ;AACtD,UAAM,IAAI,UAAU,4BAA4B,GAAG,QAAQ,+BAA+B,CAAC;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,aAAahB,SAAiC,UAA0B;AACzE,QAAA,QAAQA,QAAO,QAAQ;AACzB,MAAA,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC1E,UAAM,IAAI,UAAU,4BAA4B,GAAG,QAAQ,mCAAmC,CAAC;AAAA,EACjG;AACO,SAAA;AACT;AAEA,SAASc,iBAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,QAAQ;AAC7D;AAEA,SAAS,eAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEA,SAAS,kBAAkB,OAAyB;AAC9C,MAAA,MAAM,QAAQ,KAAK;AAAU,WAAA,MAAM,IAAI,iBAAiB;AACxD,MAAA,CAAC,SAAS,KAAK;AAAU,WAAA;AAC7B,QAAM,SAAkC,CAAA;AAClC,QAAA,gCAAgB,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,CAAC,UAAU,IAAI,IAAI,aAAa;AAAU,aAAA,GAAG,IAAI,kBAAkB,KAAK;AAAA,EAC9E;AACO,SAAA;AACT;ACz2DA,eAAsB,iBACpB,KACA,SACA,QACA,SACA,UAA2B,wBACA;AAC3B,QAAM,OAAO,QAAU,EAAA,KAAK,WAAW,OAAO,IAC1C,UACA,QAAU,EAAA,KAAK,QAAQ,IAAI,KAAK,OAAO;AAC3C,QAAM,OAAO,IAAI,IAAI,kBAAkB,IAAI,QAAQ,OAAO,CAAC;AACrD,QAAA,MAAM,IAAI,IAAI,QAAQ,GAAG,KAAK,QAAQ,KAAK,KAAK,IAAI,EAAE;AAC5D,MAAI,IAAI,WAAW,KAAK,UAAU,IAAI,YAAY,IAAI,UAAU;AACxD,UAAA,IAAI,UAAU,wBAAwB,kDAAkD;AAAA,EAChG;AACA,QAAM,QAAQ,MAAM,QAAQ,KAAK,GAAG;AAChC,MAAA;AACI,UAAA,OAAO,MAAM,QAAU,EAAA,KAAK,MAAM,EAAE,WAAW,MAAM,OAAO,KAAM,CAAA;AACpE,QAAA;AACF,UAAI,SAAS;AACb,aAAO,SAAS,MAAM;AAAQ,kBAAU,MAAM,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAC/E,YAAM,KAAK;IAAK,UAChB;AACA,YAAM,KAAK;IACb;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,eAAe,GAAG;AACvC,YAAM,IAAI,WAAW,iBAAiB,+BAA+B,IAAI,EAAE;AAAA,IAC7E;AACI,QAAA;AACI,YAAA,QAAU,EAAA,OAAO,IAAI;AAAA,IAAA,QACrB;AAAA,IAER;AACM,UAAA;AAAA,EACR;AACM,QAAA,SAAS,MAAM,OAAO,OAAO,OAAO,WAAW,WAAW,KAAK,KAAK,EAAE,MAAM;AAC3E,SAAA,EAAE,MAAM,MAAM,MAAM,YAAY,QAAQ,MAAM,IAAI,WAAW,MAAM,CAAC,EAAE;AAC/E;AAEA,eAAe,uBAAuB,KAAU,KAA0C;AAClF,QAAA,QAAQ,IAAI,WAAW,MAAM,IAAI,QAAQ,eAAe,QAAQ;AAChE,QAAA,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,SAAS,QAAQ,EAAE,eAAe,UAAU,KAAK,GAAO,IAAA;AAAA,IACxD,QAAQ,IAAI;AAAA,EAAA,CACb;AACG,MAAA,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,sCAAsC,SAAS,MAAM;AAAA,IAAA;AAAA,EAEzD;AACA,SAAO,IAAI,WAAW,MAAM,SAAS,YAAa,CAAA;AACpD;AAEA,SAAS,MAAM,OAA2B;AACxC,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7E;ACzDA,MAAMK,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAM/D,SAAA,uBACd,eAA6C,IAC9B;AACR,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,eAAA,GAAkBmC,gBAAc,YAAY,CAAC;AAAA,EAAA;AAE5D;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAS;AAAA,MAC7E,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAS;AAAA,MAC7E;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,CAAC;AAAA,QACX,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcnC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,WAAW,cAAc,MAAM,QAAQ;AACzC,UAAA,SAAS,WAAW,GAAG;AACnB,cAAA,IAAI,WAAW,oBAAoB,6CAA6C;AAAA,MACxF;AACA,YAAM,WAAWG;AAAAA,QACf,MAAM;AAAA,UACJ;AAAA,UACAG;AAAAA,UACA;AAAA,UACA8B,UAAQ;AAAA,YACN;AAAA,YACA,OAAO,YAAY,OAAO,OAAO;AAAA,YACjC,OAAO,YAAY,OAAO,OAAO;AAAA,YACjC,iBAAiB,IAAI,kBAAkB,cAAc,OAAO,YAAY;AAAA,UAAA,CACzE;AAAA,QACH;AAAA,QACA;AAAA,MAAA;AAEF,YAAM,SAAShC,eAAa,SAAS,SAAS,4BAA4B;AAC1E,UAAI,MAAM,YAAY;AAAa,eAAA,EAAE,SAAS;AACvC,aAAA,MAAM,YAAY,KAAK,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAEA,SAAS+B,gBAAc,cAA+D;AAC7E,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,oBAAoB,UAAU,MAAM;AAAA,IACpF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,IAAA,CACX;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAC1C,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC;AAAA,MACA,UAAU,CAAC,aAAa,MAAM;AAAA,MAC9B,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcnC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UAAU,MAAM,iBAAiB,KAAK,OAAO,YAAY;AAAA,EAAA;AAElF;AAEA,eAAe,iBACb,KACA,OACA,cACkC;AAClC,QAAM,WAAWG;AAAAA,IACf,MAAM,YAAY,KAAKG,iBAAe,qBAAqB;AAAA,MACzD,WAAW,oBAAoB,OAAO,WAAW;AAAA,IAAA,CAClD;AAAA,IACD;AAAA,EAAA;AAEF,QAAM,aAAa,MAAM;AAAA,IACvB;AAAA,IACAA;AAAAA,IACAF,eAAa,SAAS,KAAK,uBAAuB;AAAA,IAClD,oBAAoB,OAAO,MAAM;AAAA,IACjC,aAAa;AAAA,EAAA;AAEf,QAAM,WAAW,OAAO,SAAS,oBAAoB,WACjD,SAAS,kBACT;AACA,MAAA,YAAY,WAAW,WAAW,UAAU;AAC1C,QAAA;AACF,YAAM,QAAQ,EAAE,OAAO,WAAW,IAAI;AAAA,IAAA,QAChC;AAAA,IAER;AACM,UAAA,IAAI,UAAU,0BAA0B,qCAAqC;AAAA,EACrF;AACO,SAAA;AAAA,IACL,GAAG;AAAA,IACH,WAAW,SAAS,aAAa,MAAM;AAAA,IACvC,gBAAgB,SAAS,UAAU;AAAA,IACnC,YAAY,SAAS,cAAc;AAAA,EAAA;AAEvC;AAEA,SAASgC,UAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AC3JA,MAAM9B,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAE/E,MAAM,aAAa,CAAC,SAAS,WAAW,QAAQ,SAAS,OAAO;AAOhD,SAAA,gBAAgB,eAAsC,IAAmB;AAChF,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR,gBAAgB;AAAA,MAChBqC,eAAa;AAAA,MACb,YAAY,YAAY;AAAA,MACxB,cAAc,YAAY;AAAA,IAC5B;AAAA,EAAA;AAEJ;AAEA,SAAS,kBAAqC;AACrC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,MAAM,UAAU,YAAY,CAAC,GAAG,sBAAsB,MAAM;AAAA,IAC3E,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,OAAOrC,kBAAgB;AAAA,MAChE,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,sBAAsB;AAAA,IACjC,SAAS,OAAO,QAAQ;AACtB,YAAM,WAAWG;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,oBAAoB,CAAA,CAAE;AAAA,QAC5D;AAAA,MAAA;AAEF,UAAI,CAAC,MAAM,QAAQ,SAAS,QAAQ;AAAGE,0BAAgB,kBAAkB;AAClE,aAAA,EAAE,UAAU,SAAS;IAC9B;AAAA,EAAA;AAEJ;AAEA,SAAS6B,iBAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,KAAK;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,UAAU;AAAA,MAC9B;AAAA,MACA,EAAE,MAAM,UAAU,aAAa,sBAAsB,MAAM,SAAS;AAAA,MACpE,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,aAAa,aAAa;AAAA,MACxB,WAAW,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,UAAU,EAAE;AAAA,MAC3D,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,IAAA,CACtC;AAAA,IACD,cAAcC,aAAW;AAAA,IACzB,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,iEAAiE;AAAA,IAC5E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,IAAI;AAC1C,YAAM,WAAWnC;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,qBAAqB,MAAM;AAAA,QACjE;AAAA,MAAA;AAEF,UAAI,CAAC,MAAM,QAAQ,SAAS,OAAO;AAAGE,0BAAgB,mBAAmB;AACzE,aAAO,EAAE,OAAO,SAAS,SAAS,aAAa,SAAS,cAAc;IACxE;AAAA,EAAA;AAEJ;AAEA,SAAS,YAAY,cAAwD;AACrE,QAAA,QAAQ,aAAa,SAAS;AAC7B,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,KAAK;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,SAAS,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,IACA,aAAa,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,KAAK,KAAK;AAAA,IAC9E,cAAcR;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,KAAK;AACvC,UAAA,OAAO,SAAS,WAAW,GAAG;AAC1B,cAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAAA,MAClF;AACI,UAAA;AACJ,aAAO,MAAM;AACX,cAAM,aAAa,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK;AACtD,YAAI,aAAa;AAAG,gBAAM,aAAa;AACvC,cAAM,WAAWG;AAAAA,UACf,MAAM,YAAY,KAAKG,iBAAe,oBAAoB;AAAA,YACxD,GAAG;AAAA,YACH;AAAA,YACA,MAAM,YAAY,OAAO,MAAM,KAAK;AAAA,YACpC,OAAO;AAAA,UAAA,CACR;AAAA,UACD;AAAA,QAAA;AAEF,YAAI,CAAC,MAAM,QAAQ,SAAS,OAAO;AAAGE,4BAAgB,kBAAkB;AAC7D,mBAAA,SAAS,SAAS,SAAS;AACpC,gBAAM,IAAI,GAAG,OAAO,GAClB,KAAK,UAAU;AAAA,YACb,gBAAgB;AAAA,YAChB,MAAM;AAAA,YACN;AAAA,UAAA,CACD,CACH;AAAA,CAAI;AAAA,QACN;AACS,iBAAAJ,eAAa,SAAS,YAAY,qBAAqB;AAC1D,cAAA;AAAA,UACJ,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAK,CAAA,CAAC;AAAA,UACpE,IAAI;AAAA,QAAA;AAAA,MAER;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAc,cAAwD;AACtE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,IAAI;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,wBAAwB,MAAM,UAAU,UAAU,KAAK;AAAA,IACtF;AAAA,IACA,aAAa;AAAA,MACX,GAAG,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG;AAAA,MAC1D,UAAU,CAAC,MAAM;AAAA,IACnB;AAAA,IACA,cAAcJ;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,KAAK;AACvC,UAAA,OAAO,SAAS,WAAW,GAAG;AAC1B,cAAA,IAAI,WAAW,oBAAoB,0CAA0C;AAAA,MACrF;AACA,UAAI,CAAC,OAAO,SAAS,CAAC,OAAO,OAAO;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,YAAM,WAAWG;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,wBAAwB;AAAA,UAC5D,GAAG;AAAA,UACH,MAAM;AAAA,QAAA,CACP;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACAA;AAAAA,QACAF,eAAa,SAAS,KAAK,gBAAgB;AAAA,QAC3C,oBAAoB,OAAO,MAAM;AAAA,QACjC,aAAa;AAAA,MAAA;AAER,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAc,QAAiB;AAC/B,SAAA;AAAA,IACL;AAAA,MACE,MAAM,SAAS,aAAa;AAAA,MAC5B,UAAU,SAAS,aAAa;AAAA,MAChC,aAAa,SACT,uDACA;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa,cAAc,WAAW,KAAK,IAAI,CAAC;AAAA,MAChD,MAAM;AAAA,IACR;AAAA,IACA,EAAE,MAAM,WAAW,aAAa,mCAAmC,MAAM,SAAkB;AAAA,IAC3F,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAkB;AAAA,IACtF,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAkB;AAAA,EAAA;AAE1F;AAEA,SAAS,aAAa,OAA+C;AAC5D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC,UAAU,CAAC;AAAA,MACX,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,GAAG;AAAA,IACL;AAAA,IACA,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,gBACP,OACA,UACkD;AAClD,QAAM,WAAW,cAAc,MAAM,YAAY,MAAM,OAAO;AAC9D,MAAI,SAAS,WAAW;AAAS,UAAA,IAAI,WAAW,oBAAoB,qBAAqB;AACzF,QAAM,QAAQ,MAAM,UAAU,SAAY,SAAY,OAAO,MAAM,KAAK;AACpE,MAAA,UAAU,WAAc,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,MAAM;AAC/E,UAAA,IAAI,WAAW,oBAAoB,4CAA4C;AAAA,EACvF;AACA,SAAOgC,UAAQ;AAAA,IACb;AAAA,IACA,MAAM,YAAY,OAAO,MAAM;AAAA,IAC/B,OAAO,eAAe,YAAY,OAAO,OAAO,CAAC;AAAA,IACjD,SAAS,YAAY,OAAO,SAAS;AAAA,IACrC,OAAO,iBAAiB,OAAO,OAAO;AAAA,IACtC,OAAO,iBAAiB,OAAO,OAAO;AAAA,IACtC,WAAW,WAAW,YAAY,OAAO,WAAW,KAAK,YAAY;AAAA,IACrE,QAAQ,WAAW,YAAY,OAAO,QAAQ,IAAI;AAAA,IAClD,OAAO,WAAW,QAAQ;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,eAAe,OAA+C;AACrE,MAAI,CAAC;AAAc,WAAA;AACnB,QAAM,QAAQ,MAAM,kBAAkB,SAAS,YAAY,MAAM;AACjE,MAAI,CAAC,WAAW,SAAS,KAAK,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,wBAAwB,WAAW,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEjD;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAgC,KAAiC;AACnF,QAAA,QAAQ,YAAY,OAAO,GAAG;AACpC,MAAI,CAAC;AAAc,WAAA;AACnB,MAAI,CAAC,OAAO,SAAS,KAAK,MAAM,KAAK,CAAC,GAAG;AACvC,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,mBAAmB;AAAA,EACpE;AACO,SAAA;AACT;AAEA,SAASE,eAAyB;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,OAAO,CAAG,EAAA,GAAG,aAAa,GAAG;AAAA,IACnE,UAAU,CAAC,SAAS,aAAa;AAAA,IACjC,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAASF,UAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AAEA,SAAS5B,kBAAgB,OAAsB;AAC7C,QAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,aAAa;AACvE;AAEA,SAAS,eAA0B;AACjC,SAAO,IAAI,UAAU,WAAW,4BAA4B,cAAc,IAAI;AAChF;AAEA,SAAS,eAAe,cAAsB,QAAoC;AAChF,MAAI,OAAO;AAAS,WAAO,QAAQ,OAAO,IAAI,UAAU,YAAY,oBAAoB,CAAC;AACzF,SAAO,IAAI,QAAQ,CAACb,UAAS,WAAW;AACtC,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,IAAI,UAAU,YAAY,oBAAoB,CAAC;AAAA,IAAA;AAElD,UAAA,QAAQ,WAAW,MAAM;AACtB,aAAA,oBAAoB,SAAS,OAAO;AACnC,MAAAA;OACP,YAAY;AACf,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM;AAAA,EAAA,CACzD;AACH;AC/TA,MAAM,eAAe;AACrB,MAAMW,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAExE,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC2B,cAAA,GAAeC,aAAA,GAAc,eAAe,iBAAiB,cAAc;AAAA,EAAA;AAE1F;AAEA,SAASD,gBAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,SAAS;AAAA,MAChE,EAAE,MAAM,QAAQ,aAAa,kBAAkB,MAAM,SAAS;AAAA,MAC9D,EAAE,MAAM,SAAS,aAAa,cAAc,MAAM,SAAS;AAAA,MAC3D,EAAE,MAAM,SAAS,aAAa,iCAAiC,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,SAAS,aAAa,kCAAkC,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,UAAU,aAAa,sBAAsB,MAAM,SAAS;AAAA,MACpE,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,CAAC;AAAA,QACR,OAAO,CAAC;AAAA,QACR,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACrC,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc,WAAW;AAAA,IACzB,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,8CAA8C;AAAA,IACzD,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,QAAQ,eAAe,MAAM,KAAK;AACxC,YAAM,WAAWxB;AAAAA,QACf,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,YACN,iBAAiB,YAAY,OAAO,OAAO;AAAA,YAC3C,WAAW,YAAY,OAAO,MAAM;AAAA,YACpC,OAAO,MAAM,UAAU,SAAY,SAAY,eAAe,OAAO,MAAM,KAAK,CAAC;AAAA,YACjF,eAAe,eAAe,MAAM,OAAO,OAAO;AAAA,YAClD,gBAAgB,eAAe,MAAM,OAAO,OAAO;AAAA,YACnD,QAAQ,YAAY,OAAO,QAAQ;AAAA,YACnC;AAAA,YACA,kBAAkB,MAAM,qBAAqB;AAAA,UAAA,CAC9C;AAAA,QACH;AAAA,QACA;AAAA,MAAA;AAEF,YAAM,QAAQ,SAAS;AACnB,UAAA,CAAC,MAAM,QAAQ,KAAK;AAAGK,0BAAgB,kBAAkB;AAC7D,aAAO,EAAE,OAAO,aAAa,SAAS,eAAe,KAAK;AAAA,IAC5D;AAAA,EAAA;AAEJ;AAEA,SAASoB,eAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,iBAAiB,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAChD,gBAAgB,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MAChD;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc5B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,qDAAqD;AAAA,IAChE,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,YAAM,CAAC,cAAc,gBAAgB,IAAI,MAAM,QAAQ,IAAI;AAAA,QACzD,YAAY,KAAK,cAAc,YAAY,EAAE,SAAS,QAAQ;AAAA,QAC9D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,QAAQ,YAAY,OAAO,iBAAiB;AAAA,YAC5C,OAAO,eAAe,MAAM,cAAc;AAAA,UAAA,CAC3C;AAAA,QACH;AAAA,MAAA,CACD;AACK,YAAA,eAAeG,eAAa,cAAc,+BAA+B;AACzE,YAAA,mBAAmBA,eAAa,kBAAkB,mCAAmC;AAC3F,UAAI,CAAC,MAAM,QAAQ,iBAAiB,KAAK;AAAGK,0BAAgB,oBAAoB;AACzE,aAAA;AAAA,QACL,MAAML,eAAa,aAAa,QAAQ,cAAc,kBAAkB;AAAA,QACxE,UAAU;AAAA,UACR,OAAO,iBAAiB;AAAA,UACxB,aAAa,iBAAiB,eAAe;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,aAAa,aAAa;AAAA,IAC1B,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oEAAoE;AAAA,IAC/E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AAC5C,aAAA,MAAM,YAAY,KAAK,QAAQ;AAAA,QACpC,mBAAmB;AAAA,QACnB,eAAe,OAAO,gBAAgB;AACpC,gBAAM,IAAI,GAAG,OAAO,GAClB,KAAK,UAAU;AAAA,YACb,gBAAgB;AAAA,YAChB,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU,YAAY,YAAY;AAAA,YAClC,OAAO,YAAY;AAAA,YACnB,SAAS,YAAY,WAAW;AAAA,YAChC,UAAU,YAAY,YAAY;AAAA,YAClC,SAAS,YAAY,WAAW;AAAA,UAAA,CACjC,CACH;AAAA,CAAI;AAAA,QACN;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,SAAS;AAAA,MACP,EAAE,MAAM,aAAa,aAAa,wCAAwC,MAAM,UAAU;AAAA,MAC1F;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,WAAW,EAAE,MAAM,UAAU;AAAA,QAC7B,mBAAmB,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MACnD;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oEAAoE;AAAA,IAC/E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY,IAAI,kBAAkB,OAAO,OAAO,aAAa,WAAW,KAAK,EAAE,CAAC;AAAA,UAChF,WAAW,MAAM,cAAc;AAAA,UAC/B,mBAAmB,MAAM;AAAA,QAAA,CAC1B;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,2BAA2B,UAAU,MAAM;AAAA,IACzF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IAAA,CACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,kFAAkF;AAAA,IAC7F,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,YAAM,cAAcG;AAAAA,QAClB,MAAM,YAAY,KAAK,cAAc,YAAY,EAAE,SAAS,QAAQ;AAAA,QACpE;AAAA,MAAA;AAEF,YAAM,UAAUA,eAAa,YAAY,QAAQ,aAAa,kBAAkB;AAChF,UAAI,QAAQ,UAAU,cAAc,QAAQ,YAAY,UAAU;AAC1D,cAAA,IAAI,WAAW,sBAAsB,4CAA4C;AAAA,MACzF;AACA,YAAM,WAAWA;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,cAAc;AAAA,UAClD,SAAS;AAAA,UACT,iBAAiB,IAAI,kBAAkB,SAAS,OAAO,YAAY;AAAA,QAAA,CACpE;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,cAAcF,eAAa,SAAS,SAAS,oBAAoB;AACvE,UAAI,gBAAgB,UAAU,SAAS,aAAa,QAAQ;AAC1DI,0BAAgB,qBAAqB;AAAA,MACvC;AACA,UAAI,MAAM,YAAY;AAAa,eAAA;AAC5B,aAAA,MAAM,YAAY,KAAK,WAAW;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,eAA2B;AAC3B,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,IACxD,UAAU,CAAC,SAAS;AAAA,IACpB,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,aAAyB;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,OAAO,EAAE,MAAM,SAAS,OAAO,CAAA,EAAG;AAAA,MAClC,aAAa,CAAC;AAAA,IAChB;AAAA,IACA,UAAU,CAAC,SAAS,aAAa;AAAA,IACjC,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,eAAe,OAAuB;AAC7C,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,QAAM,QAAQ,CAAC,YAAY,YAAY,WAAW,WAAW,UAAU,UAAU,EAC9E,KAAK,CAAC,cAAc,cAAc,UAAU;AAC/C,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,uBAAuB,KAAK,EAAE;AACnF,SAAO,MAAM,CAAC,EAAE,YAAgB,IAAA,MAAM,MAAM,CAAC;AAC/C;AAEA,SAAS,eAAe,OAAoC;AAC1D,MAAI,UAAU;AAAkB,WAAA;AAChC,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK;AACtE,UAAA,IAAI,WAAW,oBAAoB,4CAA4C;AAAA,EACvF;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,QAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AAEA,SAASA,kBAAgB,OAAsB;AAC7C,QAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,eAAe,aAAa;AACtF;AC1LA,MAAM,MAAM;AAQZ,MAAMR,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAE/E,MAAM,cAAgC;AAAA,EACpC,MAAM;AAAA,EACN,aACE;AAAA,EACF,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,MAAM,iBAAqC;AAAA,EACzC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAEA,MAAM,0BAAsD;AAAA,EAC1D,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACrC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACvC,YAAY,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EAC3C,kBAAkB,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACjD,WAAW,EAAE,MAAM,SAAS;AAAA,EAC5B,WAAW,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,EACzC,cAAc,EAAE,MAAM,UAAU;AAClC;AAEA,MAAM,kBAAkB,CAAC,QAAQ,UAAU,cAAc,kBAAkB;AAE3E,MAAM,cACJ;AAIc,SAAA,sBACd,eAA4C,IAC7B;AACf,QAAM,OAA6B;AAAA,IACjC,SAAS,aAAa,WAAW,IAAI;AAAA,IACrC,OAAO,aAAa,SAAS,IAAI;AAAA,IACjC,UAAU,aAAa,YAAY,IAAI;AAAA,EAAA;AAElC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,cAAc,IAAI,GAAG,aAAa,IAAI,GAAG,gBAAgB,IAAI,CAAC;AAAA,EAAA;AAE7E;AAIA,SAAS,cAAc,MAA+C;AAC7D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE,oSAGA;AAAA,IACF,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACrD,UAAU,CAAC,MAAM;AAAA,MACjB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,CAAC,iBAAiB,eAAe,WAAW,cAAc,SAAS;AAAA,QAC3E;AAAA,QACA,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,SAAS,kBAAkB;AAAA,IAChD;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU,CAAC,8CAA8C;AAAA,IACzD,SAAS,OAAO,KAAK,UAAU;AAC7B,YAAM,OAAO,YAAY,KAAK,eAAe,OAAO,MAAM,CAAC;AACrD,YAAA,iBAAiB,MAAM,MAAM;AAC5B,aAAA,WAAW,MAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1D;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAa,MAA+C;AAC5D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE,+RAGA;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU;AAAA,QACzB,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO,EAAE,MAAM,SAAS;AAAA,MAC1B;AAAA,MACA,UAAU,CAAC,SAAS,QAAQ,OAAO;AAAA,IACrC;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,kBAAkB,KAAK,KAAK;AACtC,YAAA,iBAAiB,QAAQ,SAAS,MAAM;AACxC,YAAA,iBAAiB,UAAU,KAAK,QAAQ,QAAQ,kBAAkB,GAAG,MAAM;AACjF,YAAM,WAAW,MAAM,OAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AACvD,UAAI,CAAC,SAAS;AAAO,cAAM,cAAc,QAAQ;AACjD,aAAO,aAAa,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAgB,MAA+C;AAC/D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SACE;AAAA,IACF,aACE,uqBAOA;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,GAAG;AAAA,QACH,gBAAgB;AAAA,UACd,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,EAAE;AAAA,QAC9C,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,SAAS,kBAAkB;AAAA,IAChD;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,kBAAkB,KAAK,KAAK;AAC5C,YAAM,kBAAkB,UAAU,KAAK,QAAQ,QAAQ,kBAAkB;AACnE,YAAA,iBAAiB,QAAQ,SAAS,MAAM;AACxC,YAAA,iBAAiB,QAAQ,SAAS,OAAO;AACzC,YAAA,iBAAiB,iBAAiB,MAAM;AACxC,YAAA,iBAAiB,iBAAiB,OAAO;AAC/C,YAAM,WAAW,MAAM,OAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AACvD,UAAI,CAAC,SAAS;AAAO,cAAM,cAAc,QAAQ;AACjD,YAAM,gBAAgB,MAAM,oBAAoB,KAAK,KAAK;AACpD,YAAA,kBAAkB,KAAK,QAAQ;AACrC,YAAM,SAAS,MAAM;AAAA,QAAO,MAC1B,KAAK,SAAS,EAAE,GAAG,SAAS,eAAe,SAAS,IAAI,SAAS;AAAA,MAAA;AAE5D,aAAA,WAAW,KAAK,OAAO,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAMA,SAAS,kBACP,KACA,OAC+B;AACxB,SAAA;AAAA,IACL,SAAS,YAAY,KAAK,eAAe,OAAO,MAAM,CAAC;AAAA,IACvD,QAAQ,eAAe,OAAO,QAAQ;AAAA,IACtC,WAAW,eAAe,OAAO,YAAY;AAAA,IAC7C,oBAAoB,YAAY,KAAK,eAAe,OAAO,kBAAkB,CAAC;AAAA,IAC9E,UAAU,eAAe,OAAO,WAAW;AAAA,IAC3C,UAAU,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AAAA,IAClE,aAAa,MAAM,iBAAiB;AAAA,EAAA;AAExC;AAEA,SAAS,eAAe,OAAgC,KAAqB;AACrE,QAAA,QAAQ,eAAe,OAAO,GAAG;AACvC,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,cAAc;AAClE,SAAA;AACT;AAEA,SAAS,eAAe,OAAgC,KAAiC;AACjF,QAAA,QAAQ,MAAM,GAAG;AAChB,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,YAAY,KAAqB,OAAuB;AACzD,QAAA,OAAO,QAAU,EAAA;AACvB,SAAO,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK;AACnF;AAEA,eAAe,iBAAiB,MAAcuC,YAA4C;AACpF,MAAA;AACF,UAAM,QAAQ,EAAE,aAAa,MAAMA,UAAS;AAAA,WACrC,OAAO;AACV,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,MAAM,OAAO;AAAA,QAChB;AAAA,QACA;AAAA,QACA,EAAE,MAAM,WAAAA,WAAU;AAAA,MAAA;AAAA,IAEtB;AACM,UAAA;AAAA,EACR;AACF;AAEA,eAAe,oBACb,KACA,OACiB;AACb,MAAA,OAAO,MAAM,mBAAmB;AAAU,WAAO,MAAM;AACvD,MAAA,IAAI,OAAO,gBAAgB;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,IAAI,GAAG,iBAAiB;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAMnD,QAAO;AACT,MAAA;AACA,MAAA;AACA,MAAA;AACS,eAAA,MAAMA,MAAK,WAAW,0BAA0B;AAC5C,mBAAA,MAAMA,MAAK,WAAW,kCAAkC;AAAA,WAChE,OAAO;AACV,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AAAA,IAChE;AACM,UAAA;AAAA,EACR;AACA,MAAI,aAAa,cAAc;AACvB,UAAA,IAAI,WAAW,qBAAqB,0CAA0C;AAAA,EACtF;AACO,SAAA;AACT;AAEA,eAAe,kBACb,KACA,UACe;AACf,MAAI,IAAI;AAAW;AACf,MAAA,IAAI,OAAO,gBAAgB;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,IAAI,GAAG,iBAAiB;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,IAAI,GAAG;AAAA,IACX;AAAA,MACE;AAAA,MACA,oBAAoB,SAAS,OAAO;AAAA,MACpC,oBAAoB,SAAS,OAAO;AAAA,MACpC,oBAAoB,SAAS,SAAS;AAAA,MACtC,oBAAoB,SAAS,SAAS;AAAA,MACtC,oBAAoB,KAAK;AAAA,MACzB,oBAAoB,SAAS,QAAQ;AAAA,MACrC,oBAAoB,SAAS,WAAW;AAAA,MACxC,oBAAoB,SAAS,eAAe,IAAI;AAAA,MAChD;AAAA,IAAA,EACA,KAAK,IAAI;AAAA,EAAA;AAEP,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,uCAAuC,IAAI,OAC5E;AACC,MAAA,WAAW,OAAO,WAAW,OAAO;AACtC,UAAM,IAAI,UAAU,yBAAyB,2BAA2B,eAAe;AAAA,EACzF;AACF;AAWA,SAAS,WAAW,OAAmC;AACrD,SAAO,iBAAiB,SAAS,MAAM,SAAS,qBAC9C,OAAQ,MAA6B,SAAS;AAClD;AAEA,eAAe,OAAU,KAAmC;AACtD,MAAA;AACF,WAAO,MAAM,IAAI;AAAA,WACV,OAAO;AACV,QAAA,WAAW,KAAK,GAAG;AACf,YAAA,WAAW,MAAM,SAAS,qBAC5B,aACA,MAAM,SAAS,6BACf,eACA;AACE,YAAA,IAAI,UAAU,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,WAAW,CAAE,CAAA;AAAA,IACrF;AACM,UAAA;AAAA,EACR;AACF;AAEA,SAAS,cAAc,UAAgD;AAC/D,QAAA,CAAC,KAAK,IAAI,SAAS;AACnB,QAAA,SAAS,SAAS,SAAS,WAAW;AAC5C,SAAO,IAAI;AAAA,IACT,SAAS,MAAM,OAAO;AAAA,IACtB,SACI,MAAM,UACN,+BAA+B,SAAS,SAAS,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,IACrF;AAAA,IACA;AAAA,IACA,aAAa,QAAQ;AAAA,EAAA;AAEzB;AAMA,SAAS,WAAW,QAAmD;AAC9D,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,kBAAkB,OAAO;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,IACnB,aAAa,OAAO;AAAA,IACpB,iBAAiB,OAAO;AAAA,IACxB,OAAO,OAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MACjC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,IAAA,EACd;AAAA,IACF,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO,OACT;AAAA,MACA,MAAM,OAAO,KAAK;AAAA,MAClB,OAAO,OAAO,KAAK;AAAA,MACnB,UAAU,OAAO,KAAK;AAAA,MACtB,YAAY,OAAO,KAAK;AAAA,MACxB,QAAQ,OAAO,KAAK;AAAA,MACpB,iBAAiB,OAAO,KAAK;AAAA,MAC7B,kBAAkB,OAAO,KAAK;AAAA,MAC9B,SAAS,OAAO,KAAK;AAAA,IAAA,IAErB;AAAA,EAAA;AAER;AAEA,SAAS,aAAa,UAA8D;AAC3E,SAAA;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS;AAAA,IACf,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,YAAY,SAAS;AAAA,IACrB,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,WAAW,SAAS;AAAA,IACpB,cAAc,SAAS;AAAA,IACvB,WAAW,SAAS;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,kBAAkB;AAAA,MAChB,MAAM,SAAS,eAAe;AAAA,MAC9B,kBAAkB,SAAS,eAAe;AAAA,MAC1C,QAAQ,SAAS,eAAe;AAAA,IAClC;AAAA,IACA,eAAe,SAAS;AAAA,IACxB,UAAU,SAAS;AAAA,IACnB,QAAQ,WAAW,SAAS,MAAM;AAAA,EAAA;AAEtC;AAEA,SAAS,WACP,KACA,OACA,QACyB;AACzB,QAAM,WAAW;AAAA,IACf,GAAG,OAAO,WAAW,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,OAAO,KAAK,EAAE;AAAA,IACpF,GAAI,OAAO,WAAW,KAAK,CAAC,UAAU,OAAO,MAAM,gCAAgC;AAAA,IACnF,uEAAuE,OAAO,OAAO;AAAA,IACrF,uBAAuB,OAAO,MAAM;AAAA,IACpC;AAAA,EAAA;AAEK,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,kBAAkB,OAAO;AAAA,IACzB,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB,aAAa,OAAO;AAAA,IACpB,iBAAiB,OAAO;AAAA,IACxB,WAAW,OAAO;AAAA,IAClB,cAAc,OAAO;AAAA,IACrB,WAAW,OAAO;AAAA,IAClB,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,IACrB,kBAAkB,OAAO;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,WAAW;AAAA,IACX,iBAAiB,OAAO;AAAA,IACxB,UAAU,OAAO;AAAA,IACjB,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA,qCAAqC,OAAO,eAAe,IAAI;AAAA,IACjE;AAAA,IACA,OAAO;AAAA,MACL,QAAQ,IAAI,QAAQ;AAAA,MACpB,MAAM,IAAI,QAAQ;AAAA,MAClB,UAAU,IAAI;AAAA,MACd,cAAc;AAAA,MACd,mBAAmB,iBAAiB,KAAK;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAiB,OAAwC;AAChE,QAAM,WAAoC,CAAA;AAC1C,aAAW,OAAO,OAAO,KAAK,uBAAuB,EAAE,QAAQ;AACzD,QAAA,MAAM,GAAG,MAAM;AAAoB,eAAA,GAAG,IAAI,MAAM,GAAG;AAAA,EACzD;AACA,QAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AACrC,OAAA,OAAO,IAAI,cAAc,OAAO,KAAK,UAAU,QAAQ,CAAC,CAAC;AAC9D,SAAO,KAAK;AACd;ACzqBA,MAAMY,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,cAAc,CAAC,OAAO,MAAM;AAClC,MAAM,iBAAiB;AACvB,MAAM,aAAa,CAAC,cAAc,eAAe,OAAO;AACxD,MAAM,0BAA0B,KAAK,OAAO;AAC5C,MAAM,WAAW;AAEjB,MAAM,eAAiC;AAAA,EACrC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,MAAM,cAAgC;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AACR;AAEO,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,CAAC,cAAc,WAAW;AAAA,QACnC,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,MAAM,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,UAC5C;AAAA,UACA,UAAU,CAAC,UAAU;AAAA,UACrB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,YAAY,KAAK;AACjC,gBAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,gBAAM,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAClD,iBAAO,EAAE,UAAU,SAAS,GAAI,OAAO,EAAE,SAAS,CAAA,GAAK,OAAO,OAAO,QAAQ,OAAO;AAAA,QACtF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,0BAA0B;AAAA,QAC1E,SAAS;AAAA,UACP;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC1C,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,SAAS,EAAE,MAAM,UAAU;AAAA,UAC7B;AAAA,UACA,UAAU,CAAC,aAAa,UAAU;AAAA,UAClC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU,MAAM,cAAc,KAAK,KAAK;AAAA,MAC/D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,QACzD,SAAS,CAAC,cAAc,WAAW;AAAA,QACnC,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACrC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,MAAM,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,UAC5C;AAAA,UACA,UAAU,CAAC,QAAQ,UAAU;AAAA,UAC7B,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,QAC9C,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,yEAAyE;AAAA,QACpF,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,KAAK;AAAA,MAC7D;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,cACb,KACA,OACkC;AAC5B,QAAA,UAAU,YAAY,KAAK;AAC3B,QAAA,MAAM,oBAAoB,OAAO,WAAW;AAClD,QAAM,OAAO,QAAQ,EAAE,KAAK,WAAW,GAAG,IACtC,QAAQ,EAAE,KAAK,QAAQ,GAAG,IAC1B,QAAQ,EAAE,KAAK,QAAQ,IAAI,KAAK,GAAG;AACjC,QAAA,aAAa,MAAM,YAAY,IAAI;AACrC,MAAA,WAAW,IAAI,aAAa,gBAAgB;AAC9C,UAAM,IAAI;AAAA,MACR;AAAA,MACA,oBAAoB,WAAW,IAAI,QAAQ,kCAAkC,cAAc;AAAA,IAAA;AAAA,EAE/F;AACM,QAAA,UAAU,WAAW,YAAY,KAAK,CAAC,SAAS,KAAK,QAAQ,cAAc,GAC7E;AACE,QAAA,UAAU,MAAM,QAAQ,IAAI;AAClC,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA,QAAQ,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC/B;AAAA,EAAA;AAEF,MAAI,UAAU,YAAY,KAAK,CAAC,OAAO,QAAQ,QAAQ;AAC/C,UAAA,IAAI,UAAU,mBAAmB,oCAAoC;AAAA,EAC7E;AACA,QAAM,QAAkE,CAAA;AACxE,QAAM,UAAoB,CAAA;AAC1B,aAAW,SAAS,MAAM,UAAU,OAAO,uBAAuB,GAAG;AAC/D,QAAA,CAAC,WAAW,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG;AAC1C,cAAA,KAAK,MAAM,IAAI;AACvB;AAAA,IACF;AACM,UAAA,MAAM,IAAI,IAAI,EAAE,SAAS,OAAO,MAAM,KAAK,GAAG,YAAY,MAAM,WAAW;AAAA,EACnF;AACA,QAAM,SAAS,MAAM,YAAqB,KAAK,SAAS,kBAAkB;AAAA,IACxE,SAAS;AAAA,MACP,SAAS,WAAW,IAAI;AAAA,MACxB,SAAS,WAAW,IAAI;AAAA,MACxB,aAAa,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,IACA,SAAS,MAAM,YAAY;AAAA,EAAA,CAC5B;AACM,SAAA;AAAA,IACL,UAAU;AAAA,IACV,WAAW,WAAW;AAAA,IACtB,aAAa,WAAW;AAAA,IACxB,GAAG,aAAa,QAAQ,gBAAgB;AAAA,IACxC,GAAI,QAAQ,SAAS,EAAE,eAAe,YAAY,CAAC;AAAA,EAAA;AAEvD;AAEA,eAAe,YACb,KACA,OACkC;AAC5B,QAAA,UAAU,YAAY,KAAK;AAC3B,QAAA,OAAO,oBAAoB,OAAO,MAAM;AAC9C,MAAI,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACzD,MAAI,CAAC,MAAM;AACT,UAAM,SAAS,MAAM,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI,EACjF,IAAI,CAAC,UAAU,OAAO,MAAM,IAAI,CAAC;AAChC,QAAA,MAAM,WAAW,GAAG;AACtB,YAAM,IAAI,UAAU,sBAAsB,SAAS,OAAO,uBAAuB,IAAI,EAAE;AAAA,IACzF;AACI,QAAA,MAAM,SAAS,GAAG;AACpB,YAAM,IAAI,WAAW,mBAAmB,GAAG,IAAI,6CAA6C;AAAA,IAC9F;AACA,WAAO,MAAM,CAAC;AAAA,EAChB;AACI,MAAA,CAAC,IAAI,WAAW;AAClB,QAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,UAAU,MAAM,IAAI,GAAG,OAAO,UAAU,IAAI,UAAU,IAAI,SAAS,OAAO,UAAU,IACtF,KAAA,EAAO;AACP,QAAA,WAAW,OAAO,WAAW,OAAO;AACtC,YAAM,IAAI,UAAU,yBAAyB,6BAA6B,eAAe;AAAA,IAC3F;AAAA,EACF;AACM,QAAA,UAAU,MAAM,YAAqB,KAAK,SAAS,iBAAiB,EAAE,MAAM,KAAA,CAAM;AACxF,SAAO,EAAE,UAAU,SAAS,SAAS,aAAa,SAAS,eAAe;AAC5E;AAEA,eAAe,WACb,KACA,SACA,MACoC;AAC9B,QAAA,SAAS,MAAM,YAAqB,KAAK,SAAS,eAAe,OAAO,EAAE,SAAS,CAAA,CAAE;AACvF,MAAA,CAAC,MAAM,QAAQ,MAAM;AAAG,oBAAgB,aAAa;AACzD,SAAQ,OAAqB,IAAI,CAAC,UAAU,aAAa,OAAO,aAAa,CAAC;AAChF;AAEA,SAAS,YAAY,OAAwC;AACrD,QAAA,UAAU,oBAAoB,OAAO,UAAU;AACrD,MAAI,CAAC,SAAS,KAAK,OAAO,GAAG;AAC3B,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,OAAO,EAAE;AAAA,EACzE;AACO,SAAA;AACT;AAEA,SAAS,aAAa,OAAgB,QAAyC;AAC7E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAG,oBAAgB,MAAM;AAChF,SAAA;AACT;AAEA,SAAS,gBAAgB,QAAuB;AAC9C,QAAM,IAAI;AAAA,IACR;AAAA,IACA,0CAA0C,MAAM;AAAA,IAChD;AAAA,EAAA;AAEJ;AAEA,SAAS,OAAO,OAA2B;AACzC,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,OAAQ;AAC/C,cAAA,OAAO,aAAa,GAAG,MAAM,SAAS,OAAO,QAAQ,KAAM,CAAC;AAAA,EACxE;AACA,SAAO,KAAK,MAAM;AACpB;AC1PA,MAAM,gBAAgB;AACtB,MAAMA,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AACf;AACA,MAAM,cAA0B;AAAA,EAC9B,MAAM;AAAA,EACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,EACzD,UAAU,CAAC,UAAU;AAAA,EACrB,sBAAsB;AACxB;AACA,MAAM,iBAAiB,CAAC,gBAAgB,KAAK;AAGtC,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aAAa,EAAE,MAAM,UAAU,YAAY,CAAC,GAAG,sBAAsB,MAAM;AAAA,QAC3E,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,OAAOA,kBAAgB;AAAA,UAC9D,UAAU,CAAC,QAAQ;AAAA,UACnB,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,oBAAoB;AAAA,QAC/B,SAAS,OAAO,QAAQ;AACtB,gBAAM,WAAW,MAAM,UAAU,KAAK,cAAc,CAAE,CAAA;AACtD,cAAI,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAG;AACnC,kBAAM,IAAI;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAEJ;AACO,iBAAA,EAAE,QAAQ,SAAS;QAC5B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,gBAAgB;AAAA,QAC9B,aAAa;AAAA,QACb,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,uCAAuC;AAAA,QAClD,SAAS,OAAO,KAAK,UACnB,MAAM,UAAU,KAAK,aAAa,EAAE,UAAU,oBAAoB,OAAO,UAAU,GAAG;AAAA,MAC1F;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,gBAAgB;AAAA,QAC9B,aAAa;AAAA,QACb,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,+CAA+C;AAAA,QAC1D,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,oBAAoB,OAAO,UAAU;AAC9C,iBAAA;AAAA,YACL,UAAU;AAAA,YACV,GAAG,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS;AAAA,UAAA;AAAA,QAEtE;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,gBAAgB;AAAA,QAC9B,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,OAAO,aAAa,4BAA4B,MAAM,SAAS;AAAA,QACzE;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,cAAc,EAAE,MAAM,SAAS;AAAA,YAC/B,KAAK,EAAE,MAAM,SAAS;AAAA,UACxB;AAAA,UACA,UAAU,CAAC,UAAU;AAAA,UACrB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,SAAS;AAAA,YAC3B,QAAQA;AAAAA,YACR,SAASA;AAAAA,UACX;AAAA,UACA,UAAU,CAAC,YAAY,UAAU,SAAS;AAAA,UAC1C,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,oBAAoB,OAAO,UAAU;AACrD,gBAAM,UAAU,OAAO;AAAA,YACrB,eAAe,OAAO,CAAC,UAAU,OAAO,MAAM,KAAK,MAAM,QAAQ,EAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM,KAAK,CAAC,CAAC;AAAA,UAAA;AAEzC,cAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAC/B,kBAAA,IAAI,WAAW,oBAAoB,8BAA8B;AAAA,UACzE;AACM,gBAAA,SAAS,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS;AACxE,gBAAA,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS,GAAG,QAAA,CAAS;AAClF,iBAAA;AAAA,YACL,UAAU;AAAA,YACV,QAAQG,eAAa,OAAO,SAAS,2BAA2B;AAAA,YAChE,SAASA,eAAa,MAAM,SAAS,2BAA2B;AAAA,UAAA;AAAA,QAEpE;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,UACb,KACA,QACA,QACkC;AAC9B,MAAA;AACK,WAAAA,eAAa,MAAM,YAAY,KAAK,eAAe,QAAQ,MAAM,GAAG,MAAM;AAAA,WAC1E,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACjE,QAAA,QAAQ,SAAS,iBAAiB,GAAG;AACvC,YAAM,IAAI,UAAU,sBAAsB,iCAAiC,OAAO,QAAQ,EAAE;AAAA,IAC9F;AACM,UAAA;AAAA,EACR;AACF;AC1JA,MAAM,OAAO;AACb,MAAMH,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,cAA0B,EAAE,MAAM,UAAU,YAAY,IAAI,sBAAsB;AACxF,MAAM,SAAS,CAAC,UAAU,UAAU,SAAS;AAC7C,MAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,iBAAgC;AACvC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACRwC,cAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aACE;AAAA,MAAA,CACH;AAAA,MACDA,cAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aAAa;AAAA,MAAA,CACd;AAAA,MACD,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,MACP,EAAE,MAAM,OAAO,aAAa,wEAAwE,MAAM,SAAS;AAAA,IACrH;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,KAAK,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACpD,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcxC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oBAAoB,oCAAoC;AAAA,IACnE,SAAS,OAAO,KAAK,UACnBG;AAAAA,MACE,MAAM,YAAY,KAAK,MAAM,eAAe,YAAY,OAAO,KAAK,IAAI,EAAE,QAAQ,YAAY,OAAO,KAAK,EAAE,IAAI,CAAA,CAAE;AAAA,MAClH;AAAA,IACF;AAAA,EAAA;AAEN;AAEA,SAASqC,cAAY,SAKC;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,aAAa;AAAA,IACb,cAAcxC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,cAAc,QAAQ,IAAI,EAAE;AAAA,IACvC,SAAS,OAAO,QACdG,eAAa,MAAM,YAAY,KAAK,MAAM,QAAQ,QAAQ,CAAA,CAAE,GAAG,QAAQ,MAAM;AAAA,EAAA;AAEnF;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,SAAS,aAAa,mCAAmC,MAAM,SAAS;AAAA,MAChF,EAAE,MAAM,SAAS,aAAa,mCAAmC,MAAM,SAAS;AAAA,MAChF;AAAA,QACE,MAAM;AAAA,QACN,aAAa,oBAAoB,OAAO,KAAK,IAAI,CAAC;AAAA,QAClD,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,KAAK;AAAA,MACtB;AAAA,MACA,EAAE,MAAM,UAAU,aAAa,2CAA2C,MAAM,UAAU;AAAA,MAC1F,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,UAAU;AAAA,MACjE,EAAE,MAAM,UAAU,aAAa,4BAA4B,MAAM,SAAS;AAAA,IAC5E;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU,MAAM,OAAO;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,KAAK,EAAE;AAAA,QAChD,QAAQ,EAAE,MAAM,UAAU;AAAA,QAC1B,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACrC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACzC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,cAAc,MAAM,QAAQ;AACtC,YAAA,UAAU,QAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC;AAC7D,UAAA,QAAQ,SAAS,GAAG;AACtB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,oBAAoB,QAAQ,KAAK,IAAI,CAAC,SAAS,OAAO,KAAK,IAAI,CAAC;AAAA,QAAA;AAAA,MAEpE;AACO,aAAAG;AAAAA,QACL,MAAM,YAAY,KAAK,MAAM,eAAe;AAAA,UAC1C,YAAY,UAAU,KAAK;AAAA,UAC3B,GAAI,QAAQ,SAAS,IAAI,EAAE,UAAU,QAAA,IAAY,CAAC;AAAA,UAClD,GAAI,MAAM,SAAS,EAAE,aAAa,MAAM,OAAA,IAAW,CAAC;AAAA,UACpD,aAAa,MAAM,WAAW,OAAO,uBAAuB;AAAA,UAC5D,GAAI,MAAM,UAAU,SAAY,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,UAC1D,GAAI,YAAY,OAAO,QAAQ,IAAI,EAAE,QAAQ,YAAY,OAAO,QAAQ,EAAE,IAAI,CAAC;AAAA,QAAA,CAChF;AAAA,QACD;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEA,SAAS,UAAU,OAAyD;AAC1E,QAAM,QAAQ,eAAe,MAAM,OAAO,OAAO;AACjD,QAAM,QAAQ,eAAe,MAAM,OAAO,OAAO;AACjD,MAAI,UAAU,QAAW;AACvB,QAAI,UAAU;AAAiB,YAAA,IAAI,WAAW,oBAAoB,0BAA0B;AAC5F,WAAO,EAAE,MAAM,YAAY,OAAO,OAAO,KAAK;EAChD;AACI,MAAA,MAAM,UAAU,QAAW;AACvB,UAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,EACrF;AACO,SAAA,EAAE,MAAM,YAAY,eAAe,OAAO,aAAa,SAAS,KAAK,IAAA;AAC9E;ACrLA,MAAMH,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,SAAS;AACf,MAAM,eAAe;AAEd,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EAAA;AAEJ;AAMA,eAAe,SAAS,KAA2C;AACjE,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC;AAAS,UAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AACzF,QAAM,SAAS,MAAM,QAAQ,YAAA,GAAe;AAC5C,QAAM,OAAO,cAAc,IAAI,WAAW,QAAQ;AAClD,MAAI,MAAM;AACJ,QAAA,OAAO,OAAO,QAAgB,SAAkC;AACpE,UAAM,WAAW,MAAM,MAAM,GAAG,IAAI,WAAW,MAAM,IAAI;AAAA,MACvD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,oBAAoB,eAAe,UAAU,KAAK,GAAG;AAAA,MAChF,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,QAAQ,IAAI;AAAA,IAAA,CACb;AACG,QAAA;AACA,QAAA;AACO,eAAA,MAAM,SAAS;IAAK,QACvB;AACN,YAAM,IAAI,UAAU,4BAA4B,8BAA8B,SAAS,MAAM,IAAI,aAAa;AAAA,IAChH;AACI,QAAA,OAAO,OAAO,MAAM;AAChB,YAAA,QAAQ,OAAO,SAAS;AAC9B,YAAM,SAAS,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,YAAgB,IAAA,OAAO,MAAM,QAAQ,UAAU;AACxG,YAAA,IAAI,UAAU,SAAS,MAAM,IAAI,OAAO,MAAM,WAAW,sBAAsB,CAAC;AAAA,IACxF;AACA,WAAOG,eAAa,OAAO,QAAQ,GAAG,MAAM,SAAS;AAAA,EAAA;AAEvD,QAAM,QAAQ,MAAM,KAAK,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAA,CAAG;AACpE,QAAM,YAAY,OAAO,MAAM,WAAW,EAAE;AACxC,MAAA,CAAC,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC,MAAM,SAAS,SAAS,OAAO,GAAG;AACjE,UAAA,IAAI,UAAU,qBAAqB,wDAAwD;AAAA,EACnG;AACO,SAAA;AAAA,IACL,MAAM,CAAC,QAAQ,MAAM,QAAQ,UAC3B,KAAK,QAAQ,EAAE,SAAS,WAAW,MAAM,EAAE,GAAG,MAAM,aAAa,MAAA,GAAS,GAAI,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAA,GAAK;AAAA,EAAA;AAElH;AAEA,SAAS,cAAc,UAA0B;AACzC,QAAA,MAAM,IAAI,IAAI,QAAQ;AAC5B,QAAM,SAAS,IAAI,SAAS,QAAQ,OAAO;AACvC,MAAA,WAAW,UAAU,IAAI,IAAI,SAAS,MAAM,GAAG,MAAM,KAAK,MAAM;AACpE,MAAI,SAAS;AACb,MAAI,OAAO;AACX,SAAO,IAAI,SAAW,EAAA,QAAQ,OAAO,EAAE;AACzC;AAGO,SAAS,aAAa,OAA2C;AACtE,MAAI,UAAU;AAAkB,WAAA;AAChC,QAAMO,QAAO,OAAO,KAAK,EAAE,KAAA,EAAO;AAC9B,MAAAA,UAAS,UAAUA,UAAS;AAAgB,WAAA;AAC1C,QAAA,OAAOA,MAAK,MAAM,UAAU;AAC9B,MAAA;AAAa,WAAA,KAAK,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,UAAU,GAAI;AACpE,QAAA,KAAK,eAAe,OAAO,SAAS;AAC1C,MAAI,OAAO;AAAkB,WAAA;AACzB,MAAA,MAAM,KAAK,IAAI;AAAS,UAAA,IAAI,WAAW,oBAAoB,+BAA+B;AACvF,SAAA,KAAK,MAAM,KAAK,GAAI;AAC7B;AAEA,SAAS,cAAc,MAAuC;AACxD,MAAA,KAAK,WAAW,SAAS;AAAU,WAAA,EAAE,KAAK;AACvC,SAAA,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AACvD;AAEA,SAAS,QAAQ,OAAyD;AACxE,QAAM,OAAO,CAAC,YAAY,QAAQ,SAAS,UAAU,UAAU,cAAc,OAAO,cAAc,kBAAkB,eAAe,YAAY,cAAc,OAAO;AAC7J,SAAA,OAAO,YAAY,KAAK,OAAO,CAAC,QAAQ,MAAM,GAAG,MAAM,MAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1G;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,QAAQ,aAAa,gFAAgF,UAAU,MAAM;AAAA,IAC3I,SAAS;AAAA,MACP,EAAE,MAAM,WAAW,aAAa,gBAAgB,YAAY,IAAI,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,YAAY,aAAa,0CAA0C,MAAM,SAAS;AAAA,MAC1F,EAAE,MAAM,SAAS,aAAa,2BAA2B,MAAM,SAAS;AAAA,MACxE,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,oCAAoC,MAAM,UAAU;AAAA,MACjH,EAAE,MAAM,QAAQ,aAAa,uCAAuC,MAAM,UAAU;AAAA,IACtF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACrC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,aAAa,EAAE,MAAM,UAAU;AAAA,QAC/B,MAAM,EAAE,MAAM,UAAU;AAAA,MAC1B;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,MACjB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcV;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,aAAa,MAAM,OAAO;AACpC,YAAA,WAAW,YAAY,OAAO,UAAU;AAC9C,YAAMkC,UAAkC;AAAA,QACtC,QAAQ,WAAW,aAAa;AAAA,QAChC,gBAAgB,MAAM,gBAAgB;AAAA,QACtC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,GAAI,YAAY,SAAY,EAAE,YAAY,YAAY,CAAC;AAAA,MAAA;AAEzD,UAAI,KAAK,MAAM,KAAK,KAAK,gBAAgB;AAAA,QACvC,QAAQ,cAAc,oBAAoB,OAAO,MAAM,CAAC;AAAA,QACxD,QAAAA;AAAA,QACA,OAAO,YAAY,OAAO,OAAO;AAAA,QACjC,iBAAiB,IAAI,kBAAkB,OAAO,WAAW;AAAA,SACxD,IAAI;AACA,aAAA,MAAM,SAAS,SAAS,GAAG,UAAU,aAAa,GAAG,UAAU,cAAc;AAClF,cAAM,IAAI,QAAQ,CAACvC,aAAY,WAAWA,UAAS,GAAI,CAAC;AACxD,YAAI,OAAO;AACN,aAAA,MAAM,KAAK,KAAK,mBAAmB,EAAE,cAAc,GAAG,cAAc;AAAA,MAC3E;AACA,UAAI,GAAG,UAAU,YAAY,GAAG,UAAU,YAAY;AAC9C,cAAA,QAAS,GAAG,SAAS;AAC3B,cAAM,IAAI,UAAU,SAAS,OAAO,MAAM,UAAU,GAAG,KAAK,EAAE,YAAa,CAAA,IAAI,OAAO,MAAM,WAAW,SAAS,GAAG,KAAK,EAAE,CAAC;AAAA,MAC7H;AACO,aAAA;AAAA,QACL,cAAc,GAAG;AAAA,QACjB,OAAO,GAAG;AAAA,QACV,UAAU,GAAG,YAAY;AAAA,QACzB,KAAK,GAAG,OAAO;AAAA,QACf,gBAAgB,GAAG,kBAAkB;AAAA,QACrC,GAAI,GAAG,QAAQ,EAAE,OAAO,QAAQ,GAAG,KAAgC,EAAE,IAAI,CAAC;AAAA,MAAA;AAAA,IAE9E;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,QAAQ,aAAa,wBAAwB,MAAM,UAAU,MAAM,CAAC,QAAQ,cAAc,EAAE;AAAA,MACpG,EAAE,MAAM,UAAU,aAAa,iCAAiC,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,KAAK,aAAa,yBAAyB,MAAM,SAAS;AAAA,MAClE,EAAE,MAAM,kBAAkB,UAAU,kBAAkB,aAAa,yBAAyB,MAAM,UAAU;AAAA,MAC5G,EAAE,MAAM,UAAU,aAAa,eAAe,MAAM,SAAS;AAAA,MAC7D,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,cAAc,EAAE;AAAA,QACvD,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,GAAG,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAClC,gBAAgB,EAAE,MAAM,UAAU;AAAA,QAClC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MACvC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcK;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,gDAAgD;AAAA,IAC3D,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AAC/B,YAAM,OAAO,MAAM,KAAK,KAAK,cAAc;AAAA,QACzC,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd,GAAG,MAAM;AAAA,QACT,gBAAgB,MAAM,mBAAmB;AAAA,QACzC,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,MAAA,CACd;AACK,YAAA,QAAQ,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAqC;AAC7E,aAAA,EAAE,OAAO,MAAM,IAAI,OAAO,GAAG,aAAa,KAAK,eAAe;IACvE;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,uCAAuC;AAAA,IAClD,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACxB,aAAA,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,oBAAoB,OAAO,UAAU,EAAA,CAAG;AAAA,IAC1F;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,SAAS;AAAA,MACP,EAAE,MAAM,WAAW,aAAa,eAAe,YAAY,IAAI,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,YAAY,aAAa,8BAA8B,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,uBAAuB,MAAM,UAAU;AAAA,MACpG,EAAE,MAAM,SAAS,aAAa,aAAa,MAAM,SAAS;AAAA,MAC1D,EAAE,MAAM,YAAY,aAAa,8CAA8C,MAAM,UAAU;AAAA,IACjG;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,aAAa,EAAE,MAAM,UAAU;AAAA,QAC/B,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,UAAU,EAAE,MAAM,UAAU;AAAA,MAC9B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,2DAA2D,yDAAyD;AAAA,IAC/H,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAI,MAAM,aAAa,UAAa,MAAM,gBAAgB,MAAM;AACxD,cAAA,IAAI,WAAW,oBAAoB,wCAAwC;AAAA,MACnF;AACA,YAAM,UAAmC,CAAA;AACnC,YAAA,UAAU,aAAa,MAAM,OAAO;AAC1C,UAAI,YAAY;AAAW,gBAAQ,aAAa;AAChD,UAAI,MAAM,aAAa;AAAmB,gBAAA,WAAW,OAAO,MAAM,QAAQ;AAC1E,UAAI,MAAM,gBAAgB;AAAM,gBAAQ,WAAW;AACnD,UAAI,MAAM,UAAU;AAAmB,gBAAA,QAAQ,OAAO,MAAM,KAAK;AACjE,UAAI,MAAM,aAAa;AAAmB,gBAAA,iBAAiB,MAAM,aAAa;AAC9E,UAAI,CAAC,OAAO,KAAK,OAAO,EAAE;AAAc,cAAA,IAAI,WAAW,oBAAoB,mBAAmB;AACxF,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,oBAAoB,OAAO,UAAU;AAC/C,YAAA,UAAU,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,SAAS;AAClE,YAAM,SAAS,MAAM,KAAK,KAAK,gBAAgB,EAAE,UAAU,SAAS,UAAU,QAAQ,UAAU,WAAW,IAAI;AACxG,aAAA,EAAE,UAAU,OAAO,UAAU,OAAO,QAAQG,eAAa,OAAO,OAAO,oBAAoB,CAAC,EAAE;AAAA,IACvG;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,SAAS,CAAC,EAAE,MAAM,UAAU,aAAa,iCAAiC,MAAM,UAAU;AAAA,IAC1F,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,KAAK,QAAQ,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACnG,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,IAC9C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,mEAAmE;AAAA,IAC9E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,oBAAoB,OAAO,UAAU;AAC/C,YAAA,UAAU,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,SAAS;AAClE,aAAO,MAAM,KAAK,KAAK,cAAc,EAAE,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ,YAAY,OAAO,QAAQ,EAAA,GAAK,IAAI;AAAA,IACpI;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,4BAA4B,MAAM,SAAS;AAAA,MAClG,EAAE,MAAM,QAAQ,aAAa,mCAAmC,MAAM,UAAU;AAAA,MAChF,EAAE,MAAM,eAAe,aAAa,eAAe,MAAM,UAAU,MAAM,CAAC,OAAO,MAAM,EAAE;AAAA,IAC3F;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,MAAM,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACpC,aAAa,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,MAAM,EAAE;AAAA,MACvD;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,gCAAgC,gFAAgF;AAAA,IAC3H,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AAC/B,YAAM,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAI,IAAI;AAC3C,YAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACpD,aAAA,MAAM,KAAK,KAAK,eAAe;AAAA,QACpC,UAAU,YAAY,OAAO,UAAU;AAAA,QACvC,MAAM,KAAK,OAAO;AAAA,QAClB;AAAA,QACA,aAAa,MAAM,eAAe;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EAAA;AAEJ;AC7VA,MAAM,OAAO,EAAE,MAAM,UAAmB,WAAW,EAAE;AAGrD,MAAM,SAAS,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AACrE,MAAM,mBAAmB;AAAA,EACvB,aAAa;AAAA,EAAM,YAAY,EAAE,MAAM,WAAoB,SAAS,EAAE;AAAA,EACtE,YAAY;AAAA,EAAM,UAAU;AAAA,EAAM,SAAS;AAC7C;AAEA,SAAS,KAAQ,KAAqB,QAAgB,QAA6C;AACjG,SAAO,IAAI,QAAQ,KAAK,iBAAiB,QAAQ,QAAQ;AAAA,IACvD,SAAS,IAAI;AAAA,IAAS,QAAQ,IAAI;AAAA,IAAQ,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAA,IAAQ,OAAS,KAAK,IAAA,CAAK;AAAA,EAAA,CACnH;AACH;AAEA,SAAS,WAAW,MAAc,QAAgB,YAAwC,UAAoB,QAAQ,OAA0B;AACvI,SAAA;AAAA,IACL;AAAA,IAAM,SAAS,YAAY,IAAI;AAAA,IAAI,aAAa,EAAE,GAAG,QAAQ,YAAY,UAAU,sBAAsB,MAAM;AAAA,IAC/G,cAAc;AAAA,IAAQ,qBAAqB;AAAA,IAAG,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,OAAO;AAAA,IACvG,WAAW;AAAA,IAAQ,iBAAiB;AAAA,IACpC,SAAS,OAAO,QAAQ,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,SAAS,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,OAAO;AAAA,MAC5G,MAAM,KAAK,WAAW,KAAK,GAAG;AAAA,MAAG,UAAU;AAAA,MAAM,aAAa;AAAA,MAAM,MAAM,OAAO,SAAS,YAAY,YAAqB;AAAA,MAC3H,UAAU,SAAS,SAAS,IAAI;AAAA,IAAA,EAChC;AAAA,IACF,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,QAAQ,KAAK;AAAA,EAAA;AAEpD;AAEO,SAAS,uBAAsC;AAC7C,SAAA;AAAA,IACL,MAAM;AAAA,IAAY,SAAS;AAAA,IAC3B,UAAU;AAAA,MACR,WAAW,UAAU,0BAA0B,EAAE,MAAM,MAAM,UAAU,QAAQ,QAAQ,QAAQ,eAAe,EAAE,MAAM,UAAY,EAAA,GAAG,CAAC,QAAQ,UAAU,GAAG,IAAI;AAAA,MAC/J,WAAW,QAAQ,wBAAwB,CAAA,GAAI,CAAA,CAAE;AAAA,MACjD,WAAW,SAAS,yBAAyB,EAAE,aAAa,MAAM,eAAe,EAAE,MAAM,UAAY,EAAA,GAAG,CAAC,aAAa,GAAG,IAAI;AAAA,MAC7H,WAAW,UAAU,0BAA0B,EAAE,aAAa,QAAQ,CAAC,aAAa,GAAG,IAAI;AAAA,MAC3F,WAAW,UAAU,0BAA0B,EAAE,aAAa,QAAQ,CAAC,aAAa,GAAG,IAAI;AAAA,MAC3F,WAAW,UAAU,wBAAwB,CAAA,GAAI,CAAA,CAAE;AAAA,MACnD,UAAU,QAAQ,EAAE,KAAK,MAAM,KAAK,MAAM,KAAK,QAAQ,sBAAsB,EAAE,MAAM,WAAW,SAAS,EAAE,EAAA,GAAK,CAAC,OAAO,KAAK,CAAC;AAAA,MAC9H,UAAU,QAAQ,EAAE,MAAM,KAAQ,GAAA,CAAC,MAAM,CAAC;AAAA,MAC1C,UAAU,SAAS,EAAE,MAAM,MAAM,SAAS,EAAE,MAAM,SAAS,GAAG,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,UAAU,YAAY,EAAE,KAAK,CAAC,QAAQ,SAAS,CAAC;AAAA,MACxJ,UAAU,QAAQ,EAAE,MAAM,MAAM,YAAY,MAAM,YAAY,EAAE,MAAM,WAAW,GAAG,CAAC,QAAQ,cAAc,YAAY,CAAC;AAAA,MACxH,UAAU,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,WAAW,SAAS,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,EAAI,EAAA,GAAG,CAAA,CAAE;AAAA,MAChL,UAAU,UAAU,CAAC,GAAG,EAAE;AAAA,IAC5B;AAAA,EAAA;AAEJ;AAEA,SAAS,UAAU,MAAc,OAAmC,UAAuC;AACnG,QAAA,WAAW,SAAS,WAAW,SAAS;AAC9C,QAAM,aAAyC,EAAE,GAAG,kBAAkB,GAAG,MAAM;AACxE,SAAA;AAAA,IACL;AAAA,IAAM,SAAS,GAAG,IAAI;AAAA,IACtB,aAAa,EAAE,GAAG,QAAQ,YAAY,UAAU,CAAC,GAAG,OAAO,KAAK,gBAAgB,GAAG,GAAG,QAAQ,GAAG,sBAAsB,MAAM;AAAA,IAC7H,cAAc;AAAA,IAAQ,qBAAqB;AAAA,IAC3C,QAAQ,EAAE,MAAM,SAAS,OAAO,CAAC,QAAQ,OAAO,EAAE,SAAS,IAAI,IAAI,SAAS,QAAQ;AAAA,IACpF,WAAW;AAAA,IAAQ,iBAAiB;AAAA,IACpC,SAAS,OAAO,QAAQ,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,SAAS,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,OAAO;AAAA,MAC5G,MAAM,KAAK,WAAW,KAAK,GAAG;AAAA,MAAG,UAAU;AAAA,MAAM,aAAa;AAAA,MAC9D,MAAM,OAAO,SAAS,YAAY,YAAqB;AAAA,MACvD,UAAU,OAAO,KAAK,gBAAgB,EAAE,SAAS,IAAI,KAAK,SAAS,SAAS,IAAI;AAAA,IAAA,EAChF;AAAA,IACF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,EAAE,aAAa,OAAO,MAAM,WAAW,GAAG,YAAY,OAAO,MAAM,UAAU,GAAG,YAAY,OAAO,MAAM,UAAU,GAAG,UAAU,OAAO,MAAM,QAAQ;AAC9J,YAAA,OAAO,OAAO,MAAM,OAAO;AACjC,YAAMZ,QAAO;AACT,UAAA;AACA,UAAA;AAAU,kBAAU,KAAK,MAAM,MAAMA,MAAK,aAAa,IAAI,CAAC;AAAA,WAC3D;AACH,kBAAU,EAAE,GAAG,QAAQ,OAAO,OAAO,WAAW,GAAG,QAAQ,IAAI,SAAS,SAAS,IAAI,kBAAkB,OAAO;AAC9G,cAAMA,MAAK,cAAc,MAAM,KAAK,UAAU,OAAO,IAAI,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAAA,MACjG;AACA,UAAI,CAAC,IAAI;AAAe,cAAA,IAAI,UAAU,iBAAiB,0CAA0C;AACjG,YAAM,EAAE,MAAM,IAAI,MAAM,IAAI,QAAQ,YAAY;AAChD,YAAM,QAAQ,MAAM,KAAoB,KAAK,wBAAwB,EAAE,aAAa,OAAO,aAAa,YAAY,OAAO,YAAY,YAAY,OAAO,YAAY;AAChK,YAAA,SAAS,MAAM,sBAAsB,QAAQ,OAAO,QAAQ,OAAO,eAAe,QAAQ,MAAM;AACtG,UAAI,CAAC;AAAc,cAAA,IAAI,UAAU,4BAA4B,oCAAoC;AAC3F,YAAA,QAAQ,MAAM,OAAO;AAC3B,UAAI,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,MAAM;AACtD,UAAA;AACE,YAAA;AACJ,YAAI,SAAS;AAAgB,kBAAA,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,GAAG,GAAG,OAAO,MAAM,GAAG,GAAI,MAAM,OAAO,CAAC,GAA8B,OAAO,MAAM,wBAAwB,GAAK,CAAC;AAAA,iBAC7K,SAAS;AAAQ,kBAAQ,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,IAAI,CAAC;AAAA,iBACtE,SAAS;AAAS,kBAAQ,MAAM,OAAO,MAAM,SAAS,OAAO,MAAM,IAAI,GAAG,IAAI,YAAc,EAAA,OAAO,OAAO,MAAM,OAAO,CAAC,GAAI,MAAM,QAAQ,SAAiD;AAAA,iBAC3L,SAAS;AAAgB,kBAAA,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY,OAAO,MAAM,UAAU,GAAG,YAAY,OAAO,MAAM,UAAU,EAAG,CAAA,CAAC;AAAA,iBACxJ,SAAS;AAAkB,kBAAA,MAAM,OAAO,OAAO,OAAO;AAAA;AAC1D,kBAAQ,MAAM,OAAO,MAAM,SAAS,MAAM,SAAwD,OAAO,MAAM,UAAU,CAAC,GAAG,OAAO,MAAM,WAAW,CAAC,CAAC;AACrJ,eAAA,EAAE,SAAS;MAAM,UACxB;AAAc,YAAA,OAAO,oBAAoB,SAAS,KAAK;AAAG,eAAO,MAAM;AAAA,MAAE;AAAA,IAC7E;AAAA,EAAA;AAEJ;ACxFA,MAAM,UAAU;AAChB,MAAM,gBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAqC,EAAE,MAAM,aAAa,UAAU,gBAAgB,aAAa,uBAAuB,MAAM,UAAU,UAAU,KAAK;AAC7J,MAAM,aAA+B,EAAE,MAAM,OAAO,UAAU,UAAU,aAAa,kBAAkB,MAAM,UAAU,UAAU,KAAK;AACtI,MAAM,iBAAmC,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,2CAA2C,MAAM,WAAW,UAAU,KAAK;AAEzK,SAAS,eAAe,OAAmC,WAAqB,IAAgB;AACvF,SAAA,EAAE,MAAM,UAAU,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,WAAW,KAAK,GAAG,MAAA,GAAS,UAAU,CAAC,gBAAgB,GAAG,QAAQ,GAAG,sBAAsB;AACpK;AAEA,eAAe,KAAK,KAAqB,QAAgB,QAAmE;AACpH,QAAA,SAASe,eAAa,MAAM,YAAqB,KAAK,SAAS,QAAQ,MAAM,GAAG,MAAM;AACxF,MAAA,OAAO,OAAO,OAAO;AACvB,UAAM,QAAQA,eAAa,OAAO,OAAO,GAAG,MAAM,QAAQ;AAC1D,UAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,UAAM,SAAS,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AACjE,UAAM,IAAI,UAAU,MAAM,GAAG,IAAI,GAAG,OAAO,MAAM,aAAa,WAAW,IAAI,MAAM,QAAQ,KAAK,EAAE,KAAK,MAAM,EAAE;AAAA,EACjH;AACO,SAAA;AACT;AAEA,eAAe,UAAU,OAAgC,SAAiB,SAAiB,OAAiC;AACpH,QAAAO,QAAO,YAAY,OAAO,OAAO;AACjC,QAAA,OAAO,YAAY,OAAO,OAAO;AACvC,MAAIA,SAAQ;AAAM,UAAM,IAAI,WAAW,cAAc,GAAG,OAAO,QAAQ,OAAO,gBAAgB;AAC1F,MAAA;AAAM,WAAO,KAAK,MAAM,MAAM,QAAU,EAAA,aAAa,IAAI,CAAC;AAC1D,MAAAA;AAAa,WAAA,KAAK,MAAMA,KAAI;AAChC,QAAM,IAAI,WAAW,cAAc,GAAG,KAAK,YAAY,QAAQ,QAAQ,MAAM,GAAG,CAAC,SAAS,QAAQ,QAAQ,MAAM,GAAG,CAAC,EAAE;AACxH;AAEA,MAAM,cAAiC;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,MAAqC;AAAA,EAC5G,SAAS,CAAC,kBAAkB,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,gEAAgE,MAAM,SAAA,CAAU;AAAA,EACnK,aAAa,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,UAAU,EAAE,MAAM,SAAA,EAAc,GAAA,CAAC,WAAW,CAAC;AAAA,EACxH,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,6CAA6C;AAAA,EACxD,SAAS,CAAC,KAAK,UAAU;AACjB,UAAA,WAAW,YAAY,OAAO,UAAU;AACvC,WAAA,KAAK,KAAK,YAAY,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,WAAW,oBAAoB,OAAO,WAAW,GAAG,GAAI,WAAW,EAAE,UAAU,KAAK,MAAM,QAAQ,EAAE,IAAI,CAAC,EAAA,CAAI;AAAA,EACxM;AACF;AAEA,MAAM,eAAkC;AAAA,EACtC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IACA,EAAE,MAAM,UAAU,UAAU,aAAa,aAAa,mBAAmB,MAAM,SAAS;AAAA,IACxF,EAAE,MAAM,QAAQ,UAAU,WAAW,aAAa,yBAAyB,MAAM,SAAS;AAAA,IAC1F,EAAE,MAAM,UAAU,UAAU,UAAU,aAAa,mCAAmC,MAAM,SAAS;AAAA,IACrG,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC3F,EAAE,MAAM,UAAU,UAAU,UAAU,aAAa,iCAAiC,MAAM,SAAS;AAAA,EACrG;AAAA,EACA,aAAa,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY,QAAQ,EAAE,MAAM,SAAS,GAAG,OAAO,EAAE,MAAM,UAAa,GAAA,QAAQ,EAAE,MAAM,SAAS,EAAA,CAAG;AAAA,EAC9K,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,mEAAmE;AAAA,EAC9E,SAAS,CAAC,KAAK,UAAU;AACvB,UAAM,SAAkC,EAAE,cAAc,oBAAoB,OAAO,cAAc;AACjG,eAAW,OAAO,CAAC,aAAa,WAAW,QAAQ,GAAG;AAAQ,YAAA,QAAQ,YAAY,OAAO,GAAG;AAAO,UAAA;AAAO,eAAO,GAAG,IAAI;AAAA,IAAM;AACxH,UAAA,SAAS,YAAY,OAAO,QAAQ;AACtC,QAAA;AAAe,aAAA,SAAS,KAAK,MAAM,MAAM;AACzC,QAAA,OAAO,MAAM,UAAU;AAAU,aAAO,QAAQ,MAAM;AAC1D,QAAI,CAAC,OAAO,aAAa,CAAC,OAAO;AAAe,YAAA,IAAI,WAAW,cAAc,yBAAyB;AAC/F,WAAA,KAAK,KAAK,aAAa,MAAM;AAAA,EACtC;AACF;AAEA,MAAM,cAAiC;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,gBAAgB;AAAA,EAC1B,aAAa,eAAe,EAAE;AAAA,EAC9B,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,sCAAsC;AAAA,EACjD,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,eAAe,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG;AAChH;AAEA,MAAM,gBAAmC;AAAA,EACvC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,UAAU;AAAA,EACtC,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;AAAA,EACpF,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,uDAAuD;AAAA,EAClE,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,YAAY,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG;AAC3J;AAEA,MAAM,kBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,sDAAsD,MAAM,UAAU,UAAU,MAAM,QAAQ,MAAM;AAAA,EACzM,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,aAAa,EAAE,MAAM,UAAU,WAAW,OAAO,CAAC,UAAU,aAAa,CAAC;AAAA,EAClJ,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,4EAA4E;AAAA,EACvF,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,cAAc;AAAA,IAC/C,cAAc,oBAAoB,OAAO,cAAc;AAAA,IAAG,QAAQ,oBAAoB,OAAO,QAAQ;AAAA,IAAG,aAAa,oBAAoB,OAAO,aAAa;AAAA,IAC7J,UAAU,EAAE,MAAM,SAAS,WAAW,IAAI,UAAU,GAAG;AAAA,EAAA,CACxD;AACH;AAEA,MAAM,sBAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,iDAAiD,MAAM,UAAU;AAAA,EAC1K,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,KAAK,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,OAAO,EAAE,MAAM,SAAS,KAAK,CAAC,UAAU,SAAS,CAAC;AAAA,EACpK,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,kGAAkG;AAAA,EAC7G,SAAS,CAAC,KAAK,UAAU;AACjB,UAAA,QAAQ,YAAY,OAAO,OAAO;AACjC,WAAA,KAAK,KAAK,kBAAkB,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,GAAI,QAAQ,EAAE,UAAU,EAAE,MAAA,MAAY,CAAA,EAAK,CAAA;AAAA,EAClN;AACF;AAEA,MAAM,kBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,OAAO,UAAU,OAAO,aAAa,qCAAqC,MAAM,UAAU,UAAU,MAAM;AAAA,EAC1K,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE,EAAK,GAAA,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EACvL,cAAc,EAAE,MAAM,UAAU,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,OAAO,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,IAAI,GAAG,UAAU,CAAC,OAAO,OAAO,GAAG,sBAAsB,KAAK;AAAA,EACrL,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,gFAAgF;AAAA,EAC3F,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,SAAS,MAAM,KAAK,KAAK,cAAc,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS;AACzK,UAAA,MAAM,oBAAoB,OAAO,KAAK;AAC5C,UAAMtB,QAAO;AACb,UAAM,UAAoB,CAAA;AACf,eAAA,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQe,eAAa,OAAO,OAAO,kBAAkB,CAAC,GAAG;AACnF,YAAA,IAAIA,eAAa,MAAM,IAAI;AACjC,UAAI,OAAO,EAAE,SAAS,YAAY,OAAO,EAAE,WAAW;AAAU;AAChE,YAAM,SAAS,GAAG,GAAG,IAAI,IAAI;AAC7B,YAAMf,MAAK,MAAM,OAAO,MAAM,GAAG,OAAO,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAM,CAAA;AAC1E,UAAA,OAAO,EAAE,SAAS;AAAU,cAAMA,MAAK,cAAc,QAAQ,EAAE,IAAI;AAAA;AAClE,cAAMA,MAAK,UAAU,QAAQ,WAAW,KAAK,KAAK,EAAE,MAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACnG,cAAQ,KAAK,IAAI;AAAA,IACnB;AACM,UAAAA,MAAK,MAAM,GAAG,GAAG,WAAW,EAAE,WAAW,MAAM;AAC/C,UAAAA,MAAK,MAAM,GAAG,GAAG,YAAY,EAAE,WAAW,MAAM;AAC/C,WAAA,EAAE,KAAK,OAAO;EACvB;AACF;AAEA,MAAM,iBAAoC;AAAA,EACxC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,QAAQ,UAAU,QAAQ,aAAa,wEAAwE,MAAM,UAAU,UAAU,QAAQ,EAAE,MAAM,QAAQ,UAAU,QAAQ,aAAa,kBAAkB,MAAM,YAAY,EAAE,MAAM,aAAa,UAAU,aAAa,aAAa,6CAA6C,MAAM,UAAU;AAAA,EAC1Z,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,MAAM,EAAE,MAAM,SAAY,GAAA,WAAW,EAAE,MAAM,WAAW,GAAG,CAAC,UAAU,WAAW,MAAM,CAAC;AAAA,EAClP,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,kHAAoH,8GAAgH;AAAA,EAC/O,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,OAAO,YAAY,OAAO,MAAM,KAAK,YAAY,OAAO,WAAW,IAAI,MAAM,UAAU,OAAO,QAAQ,aAAa,WAAW,IAAI;AACjI,WAAA,KAAK,KAAK,aAAa,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,MAAM,oBAAoB,OAAO,MAAM,GAAG,KAAA,CAAM;AAAA,EAClN;AACF;AAEA,MAAM,oBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IAAkB;AAAA,IAAY;AAAA,IAC9B,EAAE,MAAM,OAAO,UAAU,OAAO,aAAa,uEAAuE,MAAM,UAAU,UAAU,KAAK;AAAA,IACnJ,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,iEAAiE,MAAM,SAAS;AAAA,EACzI;AAAA,EACA,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,SAAS,EAAE,MAAM,WAAW,SAAS,EAAE,GAAG,KAAK,EAAE,MAAM,UAAU,WAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EACrN,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,0GAA0G;AAAA,EACrH,SAAS,OAAO,KAAK,UAAU;AACvB,UAAA,MAAM,oBAAoB,OAAO,KAAK;AAC5C,UAAMA,QAAO;AACb,UAAM,SAAS,MAAMA,MAAK,aAAa,GAAG,GAAG,kBAAkB;AAC/D,QAAI,UAAmB;AACnB,QAAA;AAAY,gBAAA,KAAK,MAAM,MAAMA,MAAK,aAAa,GAAG,GAAG,4BAA4B,CAAC;AAAA,IAAA,QAAU;AAAY,gBAAA;AAAA,IAAK;AAC3G,UAAA,UAAU,YAAY,OAAO,UAAU;AACvC,UAAA,MAAM,UAAU,MAAMA,MAAK,aAAa,OAAO,EAAE,MAAM,MAAM,EAAE,IAAI;AACzE,UAAM,QAAiC,CAAA;AACjC,UAAA,OAAO,OAAO,QAAgB;AAClC,iBAAW,SAAS,MAAMA,MAAK,QAAQ,GAAG,GAAG,UAAU,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,GAAG;AACxE,cAAA,OAAO,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,KAAK,MAAM;AAClD,YAAI,SAAS,WAAW,KAAK,WAAW,QAAQ;AAAG;AACnD,YAAI,MAAM;AAAa,gBAAM,KAAK,IAAI;AAAA,aACjC;AACG,gBAAA,QAAQ,MAAMA,MAAK,SAAS,GAAG,GAAG,WAAW,IAAI,EAAE;AACzD,cAAIsB,QAAsB;AACtB,cAAA;AAAE,YAAAA,QAAO,MAAM,SAAS,CAAC,IAAI,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAA,CAAM,EAAE,OAAO,KAAK;AAAA,UAAA,QAAU;AAAS,YAAAA,QAAA;AAAA,UAAK;AAChH,gBAAA,UAAU,IAAI,EAAE,IAAIA,SAAQ,EAAE,QAAQ,KAAK,MAAM,KAAK,OAAO,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5G;AAAA,MACF;AAAA,IAAA;AAEF,UAAM,KAAK,EAAE;AACN,WAAA,KAAK,KAAK,gBAAgB,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,QAAQ,SAAS,KAAK,MAAA,CAAO;AAAA,EAClM;AACF;AAEA,MAAM,mBAAsC;AAAA,EAC1C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,IACP;AAAA,IAAkB;AAAA,IAAY;AAAA,IAC9B,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,qEAAqE,MAAM,UAAU;AAAA,IAC5I,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,iFAAiF,MAAM,SAAS;AAAA,IACrJ,EAAE,MAAM,gBAAgB,UAAU,gBAAgB,aAAa,iDAAiD,MAAM,SAAS;AAAA,IAC/H,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,kDAAkD,MAAM,SAAS;AAAA,IACxH,EAAE,MAAM,iBAAiB,UAAU,iBAAiB,aAAa,4CAA4C,MAAM,SAAS;AAAA,IAC5H,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,kCAAkC,MAAM,SAAS;AAAA,IACtG,EAAE,MAAM,WAAW,UAAU,YAAY,aAAa,uCAAuC,MAAM,SAAS;AAAA,IAC5G,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,wCAAwC,MAAM,SAAS;AAAA,EAC1G;AAAA,EACA,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,EAAK,GAAA,UAAU,EAAE,MAAM,UAAU,GAAG,SAAS,EAAE,MAAM,SAAY,GAAA,cAAc,EAAE,MAAM,SAAS,GAAG,UAAU,EAAE,MAAM,SAAA,GAAY,eAAe,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,SAAS,GAAG,OAAO,EAAE,MAAM,WAAW,GAAG,CAAC,UAAU,SAAS,CAAC;AAAA,EAC9X,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,SAAkC,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,QAAQ;AACnK,UAAA,QAAQ,YAAY,OAAO,OAAO;AACxC,QAAI,OAAO;AACT,aAAO,QAAQ,EAAE,MAAM,mBAAmB,QAAQ;IAAM,WAC/C,MAAM,aAAa,MAAM;AAClC,aAAO,WAAW;AAAA,IAAA,WACT,YAAY,OAAO,UAAU,KAAK,YAAY,OAAO,eAAe,GAAG;AAChF,aAAO,WAAW,MAAM,UAAU,OAAO,YAAY,iBAAiB,aAAa;AAAA,IAAA,OAC9E;AACL,aAAO,UAAU,MAAM,UAAU,OAAO,WAAW,gBAAgB,SAAS;AAC5E,aAAO,WAAW;IACpB;AACM,UAAAnB,WAAU,YAAY,OAAO,SAAS;AACxC,QAAAA;AAAS,aAAO,UAAUA;AACxB,UAAA,UAAU,YAAY,OAAO,UAAU;AACzC,QAAA;AAAgB,aAAA,WAAW,CAAC,OAAO;AAChC,WAAA,KAAK,KAAK,eAAe,MAAM;AAAA,EACxC;AACF;AAEO,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,aAAa,aAAa,cAAc,eAAe,iBAAiB,qBAAqB,iBAAiB,gBAAgB,mBAAmB,gBAAgB;AAAA,EAAA;AAEhL;ACnPO,MAAM,UAAU;AA8BhB,MAAM,uBAAuB;AAAA,EAEzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EAET,YAAY,eAAwC,IAAI;AACtD,SAAK,WAAW;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAEV,SAAA,eAAe,aAAa,eAAe,gBAAgB;AAChE,SAAK,OAAO,aAAa,OAAO,QAAA,EAAU;AAC1C,SAAK,WAAW,aAAa;AACxB,SAAA,SAAS,aAAa,SAAS,aAAa;AAC5C,SAAA,wBAAwB,aAAa,yBACvC,CAAC,WAAW,IAAI,sBAAsB,QAAQ,KAAK,YAAY;AAClE,SAAK,WAAW,aAAa,WAAW,IAAI,sBAAsB;AAC7D,SAAA,iBAAiB,aAAa,kBAChC,CAAC,QAAQ,mBAAmB,IAAI,6BAA6B,QAAQ,cAAc;AACjF,SAAA,yBAAyB,aAAa,yBAAyB;AAC/D,SAAA,QAAQ,aAAa,QAAQ;AAAA,EACpC;AAAA,EAEA,MAAM,IAAI,MAAiC;AACrC,QAAA,kBAA0B,OAAO;AACjC,QAAA;AACI,YAAA,aAAa,gBAAgB,IAAI;AACrB,wBAAA,WAAW,OAAO,WAAW;AAC3C,UAAA,WAAW,OAAO,SAAS;AAC7B,YAAI,WAAW,QAAQ;AACf,gBAAA,IAAI,WAAW,qBAAqB,6CAA6C;AAAA,QACzF;AACI,YAAA,WAAW,OAAO,SAAS;AACvB,gBAAA,uBAAuB,MAAM;AAC/B,cAAA;AACA,cAAA;AACF,kBAAMkD,SAAQ,MAAM,cAAc,WAAW,QAAQ,KAAK,cAAc;AAAA,cACtE,KAAK,KAAK;AAAA,cACV,SAAS,KAAK;AAAA,YAAA,CACf;AACDA,mBAAM,WAAW,MAAM;AAAA,cACrBA,OAAM;AAAA,cACN,KAAK;AAAA,YAAA;AAEP,iCAAqB,MAAM;AAAA,cACzBA,OAAM;AAAA,cACN,KAAK;AAAA,YAAA;AAAA,mBAEA,OAAO;AACR,kBAAA,aAAa,eAAe,KAAK;AACvC,iCAAqB,EAAE,MAAM,eAAe,OAAO,WAAW;UAChE;AACA,gBAAM,KAAK,OAAO,OAAO,GACvB,KAAK;AAAA,YACH;AAAA,cACE,SAAS,sBAAsB,mBAAmB;AAAA,cAClD,kBAAkB,sBAAsB,YAAY;AAAA,cACpD,cAAc;AAAA,cACd,aAAa;AAAA,cACb,kBAAkB;AAAA,cAClB,aAAa,WAAW,OAAO,QAAQ,UAAU,IAAI,mBAAmB,KAAK;AAAA,cAC7E,eAAe;AAAA,cACf,GAAG,WAAW,SAAS;AAAA,cACvB,qBAAqB;AAAA,cACrB,uBAAuB,yBAAyB,oBAAoB;AAAA,YACtE;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CAEJ;AAAA,CAAI;AAAA,QAAA,OACC;AACL,gBAAM,KAAK,OAAO,OAAO,WAAW,OAAO;AAAA,CAAI;AAAA,QACjD;AACO,eAAA;AAAA,MACT;AACI,UAAA,WAAW,OAAO,KAAK;AAClB,eAAA,MAAM,KAAK,gBAAgB,WAAW,QAAQ,WAAW,QAAQ,WAAW,IAAI;AAAA,MACzF;AACI,UAAA,CAAC,WAAW,QAAQ;AAClB,YAAA,WAAW,OAAO,MAAM;AAC1B,gBAAM,KAAK,OAAO,OAAO,GAAG,aAAa,KAAK,QAAQ,CAAC;AAAA,CAAI;AACpD,iBAAA;AAAA,QACT;AACM,cAAA,IAAI,WAAW,oBAAoB,gCAAgC;AAAA,MAC3E;AACI,UAAA,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,WAAW,SAAS,MAAM;AAC1E,cAAA,KAAK,OAAO,OAAO,GAAG,WAAW,KAAK,UAAU,WAAW,MAAM,CAAC;AAAA,CAAI;AACrE,eAAA;AAAA,MACT;AAEA,YAAM,UAAU,KAAK,SAAS,IAAI,WAAW,QAAQ,WAAW,IAAI;AACpE,UACE,WAAW,OAAO,QAAQ,WAAW,WAAW,SAAS,QAAQ,KACjE,WAAW,WAAW,SAAS,IAAI,GACnC;AACM,cAAA,KAAK,OAAO,OAAO,GAAG,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AAC5D,eAAA;AAAA,MACT;AACA,UAAI,QAAQ,cAAc;AAAgC,+BAAA,WAAW,QAAQ,OAAO;AACpF,YAAM,QAAQ,MAAM,KAAK,mBAAmB,SAAS,WAAW,MAAM;AAChE,YAAA,cAAc,WAAW,OAAO,QAClC,MAAM,KAAK,iBAAiB,WAAW,OAAO,KAAK,IACnD;AACJ,YAAM,SAAS,iBAAiB,SAAS,WAAW,YAAY,WAAW;AAC3E,UAAI,MAAM,SAAS,WAAW,SAAS,CAAC,QAAQ,mBAAmB;AACjE,cAAM,IAAI;AAAA,UACR;AAAA,UACA,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAAA;AAAA,MAErC;AACM,YAAA,UAAU,QAAQ,kBACpB,MAAM,KAAK,eAAe,MAAM,QAAQ,IACxC;AACJ,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,QACA,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,IAAI,gBAAkB,EAAA;AAAA,MAAA;AAAA,aAEjB,OAAO;AACR,YAAA,aAAa,eAAe,KAAK;AACjC,YAAA,WAAW,cAAc,YAAY,EAAE,SAAS,QAAQ,UAAU,iBAAiB;AACzF,YAAM,KAAK,OAAO,OAAO,GAAG,YAAY,UAAU,MAAM,CAAC;AAAA,CAAI;AAC7D,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,QAAuB,QAAiB,MAAgC;AAC5F,QAAI,UAAU,MAAM;AACZ,YAAA,IAAI,WAAW,qBAAqB,gDAAgD;AAAA,IAC5F;AACA,QAAI,OAAO,gBAAgB;AACnB,YAAA,IAAI,WAAW,qBAAqB,wCAAwC;AAAA,IACpF;AAEQ,eAAA,CAAC,MAAM,KAAK,KAAK;AAAA,MACrB,CAAC,SAAS,OAAO,KAAK;AAAA,MACtB,CAAC,WAAW,OAAO,OAAO;AAAA,MAC1B,CAAC,YAAY,OAAO,OAAO;AAAA,MAC3B,CAAC,mBAAmB,OAAO,cAAc;AAAA,MACzC,CAAC,QAAQ,OAAO,IAAI;AAAA,MACpB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,GAEpB;AACA,UAAI,UAAU,QAAW;AACvB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,KAAK,IAAI;AAAA,QAAA;AAAA,MAEb;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,cAAc,QAAQ,KAAK,cAAc;AAAA,MAC3D,aAAa;AAAA,MACb,KAAK,KAAK;AAAA,MACV,SAAS,KAAK;AAAA,IAAA,CACf;AACD,UAAM,WAAW,MAAM,4BAA4B,MAAM,UAAU,KAAK,YAAY;AACpF,UAAM,UAAU,MAAM,KAAK,eAAe,MAAM,QAAQ;AACxD,UAAM,KAAK,MAAM;AAAA,MACf,UAAU,KAAK;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM;AAAA,MACnB;AAAA,MACA,SAAS,OAAO,QAAQ,WACtB,MAAM,KAAK,wBAAwB,QAAQ,QAAQ,MAAM,UAAU,MAAM,OAAO,OAAO;AAAA,IAAA,CAC1F;AACM,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,wBACJ,QACA,QACA,QACA,OACA,SACe;AACf,QAAI,OAAO,SAAS;AAAS,YAAA,IAAI,WAAW,oBAAoB,uBAAuB;AACjF,UAAA,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAChD,UAAA,aAAa,OAAO,MAAM,CAAC;AACjC,QAAI,WAAW,SAAS,QAAQ,KAAK,WAAW,SAAS,IAAI,GAAG;AACxD,YAAA,KAAK,OAAO,OAAO,GAAG,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AACnE;AAAA,IACF;AACA,UAAM,cAAc,iBAAiB,SAAS,YAAY,QAAW,MAAM,IAAI;AAC3E,QAAA,YAAY,OAAO,UAAU,KAAK;AAC9B,YAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,IACrF;AACM,UAAA,cAAc,YAAY,OAAO,QACnC,MAAM,KAAK,iBAAiB,YAAY,OAAO,KAAK,IACpD;AACJ,UAAM,SAAS,iBAAiB,SAAS,YAAY,aAAa,IAAI;AACtE,UAAM,SAAyB;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,OAAO,OAAO,UAAU,OAAO;AAAA,MACvC,WAAW,OAAO,OAAO,UAAU,cAAc,OAAO,OAAO,OAAO,IAAI,OAAO;AAAA,MACjF,SAAS,OAAO,OAAO;AAAA,MACvB,gBAAgB,OAAO,OAAO;AAAA,MAC9B,MAAM,OAAO,OAAO,QAAQ;AAAA,MAC5B,KAAK,OAAO,OAAO,OAAO;AAAA,IAAA;AAE5B,QAAI,OAAO,WAAW,SAAS,CAAC,QAAQ,mBAAmB;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,MAAA;AAAA,IAErC;AACM,UAAA,KAAK,gBAAgB,SAAS,OAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,MAAM;AAAA,EACxF;AAAA,EAEA,MAAM,gBACJ,SACA,OACA,QACA,OACA,SACA,aACA,QACiB;AACjB,UAAM,UAAU,OAAO,WAAW,OAAO,WAAW;AAC9C,UAAA,YAAY,KAAK;AACnB,QAAA;AACE,UAAA,QAAQ,mBAAmB,CAAC,SAAS;AACvC,cAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AAAA,MAC7E;AACA,UAAI,QAAQ;AAAuB,cAAA,QAAS,eAAe;AAC3D,YAAM,YAAY,SAAS,eAAe,QAAA,EAAU,aAAa;AAAA,QAC/D,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,gBAAgB;AAAA,MAAA;AAElB,YAAM,UAA0B;AAAA,QAC9B,SAAS,EAAE,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,KAAK;AAAA,QACtD,YAAY;AAAA,QACZ,YAAY,SAAS,cAAc;AAAA,UACjC,MAAM,OAAO,QAAQ;AAAA,UACrB,UAAU,OAAO,YAAY;AAAA,UAC7B,iBAAiB,OAAO;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,SAAS,SAAS,WAAW;AAAA,QAC7B,QAAQ,EAAE,QAAQ,OAAO,OAAO;AAAA,QAChC;AAAA,QACA,gBAAgB,OAAO;AAAA,QACvB,UAAU,KAAK,IAAI,IAAI,OAAO;AAAA,QAC9B;AAAA,QACA,KAAK,KAAK;AAAA,QACV,IAAI;AAAA,UACF,QAAQ,CAAC,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,UAC3C,QAAQ,CAAC,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,UAC3C,QAAQ,CAAC,YAAY,KAAK,OAAO,SAAS,OAAO,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAC1E,iBAAiB,KAAK,OAAO,kBAAuB,KAAA;AAAA,QACtD;AAAA,QACA;AAAA,QACA,WAAW,OAAO;AAAA,QAClB;AAAA,QACA,aAAa;AAAA,QACb,SAAS,SAAS;AAAA,MAAA;AAEpB,YAAM,OAAO,MAAM,QAAQ,QAAQ,SAAS,KAAK;AAC7C,UAAA;AACa,uBAAA,MAAM,QAAQ,cAAc,QAAQ;AAAA,eAC5C,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UACrD;AAAA,QAAA;AAAA,MAEJ;AACM,YAAA,WAAW,gBAAgB,MAAM;AAAA,QACrC,SAAS,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAC1C,UAAU;AAAA,QACV,aAAa,KAAK,IAAA,IAAQ;AAAA,MAAA,CAC3B;AACD,YAAM,KAAK,OAAO;AAAA,QAChB,GAAG,cAAc,UAAU,OAAO,MAAM,CAAC,GAAG,OAAO,WAAW,QAAQ,KAAK,IAAI;AAAA,MAAA;AAE1E,aAAA;AAAA,aACA,OAAO;AACR,YAAA,aAAa,eAAe,KAAK;AACjC,YAAA,WAAW,cAAc,YAAY;AAAA,QACzC,SAAS,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAC1C,UAAU;AAAA,QACV,aAAa,KAAK,IAAA,IAAQ;AAAA,MAAA,CAC3B;AACK,YAAA,KAAK,OAAO,OAAO,GAAG,YAAY,UAAU,OAAO,MAAM,CAAC;AAAA,CAAI;AACpE,UAAI,OAAO;AAAS,cAAM,KAAK,OAAO,OAAO,eAAe,WAAW,IAAI;AAAA,CAAI;AAC/E,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,SACA,QAC2D;AAC3D,QAAI,QAAQ,mBAAoB,QAAQ,WAAW,YAAY,QAAQ,SAAS,SAAU;AACxF,YAAM,QAAQ,MAAM,cAAc,QAAQ,KAAK,cAAc;AAAA,QAC3D,KAAK,KAAK;AAAA,QACV,SAAS,KAAK;AAAA,MAAA,CACf;AACD,UAAI,QAAQ,iBAAiB;AAC3B,cAAM,WAAW,MAAM,4BAA4B,MAAM,UAAU,KAAK,YAAY;AAAA,MACtF;AACO,aAAA;AAAA,IACT;AACO,WAAA,oBAAoB,QAAQ,KAAK,cAAc;AAAA,MACpD,KAAK,KAAK;AAAA,MACV,SAAS,KAAK;AAAA,IAAA,CACf;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,QAAqD;AAClE,UAAA,KAAK,+BAA+B,MAAM;AAC1C,UAAA,iBAAiB,KAAK,sBAAsB,MAAM;AACxD,WAAO,MAAM,mBAAmB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,KAAK,eAAe,QAAQ,cAAc;AAAA,IAAA;AAAA,EAE9C;AAAA,EAEA,MAAM,+BAA+B,QAAuC;AAC1E,UAAM,WAAW,OAAO;AACpB,QAAA,CAAC,YAAY,OAAO;AAAK;AAC7B,QAAI,OAAO,gBAAgB;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAE7B;AACA,QAAI,CAAC,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAChD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAE7B;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,MAAgD;AACjE,QAAA;AACA,QAAA;AACI,YAAA,SAAS,MAAM,MAAM,KAAK,OAAO,UAAU,IAAI,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,aAC/E,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yBAAyB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MAAA;AAAA,IAEnF;AACI,QAAA;AACA,QAAA;AACO,eAAA,KAAK,MAAM,GAAG;AAAA,IAAA,QACjB;AACA,YAAA,IAAI,WAAW,sBAAsB,yBAAyB;AAAA,IACtE;AACI,QAAA,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAC5D,YAAA,IAAI,WAAW,sBAAsB,8BAA8B;AAAA,IAC3E;AACO,WAAA;AAAA,EACT;AACF;AAEO,SAAS,eACd,kBACA,iBACA,iBACA,wBACA,uBACiB;AACX,QAAA,WAAW,IAAI;AACV,aAAA,UAAU,kBAAkB,QAAQ;AAAG,aAAS,SAAS,MAAM;AACjE,WAAA,SAAS,kBAAkB;AAC3B,WAAA,SAAS,iBAAiB,gBAAgB,CAAC;AAC3C,WAAA,SAAS,oBAAoB;AAC7B,WAAA,SAAS,0BAA0B;AACnC,WAAA,SAAS,gBAAgB,eAAe,CAAC;AACzC,WAAA,SAAS,kBAAkB;AAC3B,WAAA,SAAS,gBAAgB,eAAe,CAAC;AACzC,WAAA,SAAS,uBAAuB,sBAAsB,CAAC;AACvD,WAAA,SAAS,sBAAsB,qBAAqB,CAAC;AACrD,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,gBAAgB;AACzB,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,sBAAsB;AAC/B,WAAA,SAAS,kBAAkB;AAC7B,SAAA;AACT;AAIA,SAAS,uBAAuB,QAAuB,SAAkC;AAE/E,aAAA,CAAC,MAAM,KAAK,KAAK;AAAA,IACrB,CAAC,WAAW,OAAO,OAAO;AAAA,IAC1B,CAAC,QAAQ,OAAO,IAAI;AAAA,IACpB,CAAC,YAAY,OAAO,QAAQ;AAAA,IAC5B,CAAC,YAAY,OAAO,QAAQ;AAAA,IAC5B,CAAC,iBAAiB,OAAO,YAAY;AAAA,IACrC,CAAC,sBAAsB,OAAO,gBAAgB;AAAA,EAAA,GAEhD;AACA,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,KAAK,IAAI,8CAA8C,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,MAAA;AAAA,IAEzF;AAAA,EACF;AACF;AAEA,MAAM,qBAA4C;AAAA,EAChD,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,kBAAkB,mCAAmC,CAAC,CAAC;AAClG;AAEA,SAAS,aAAa,UAAmC;AAChD,SAAA;AAAA,IACL,gBAAgB,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,SAAS,QAAU,EAAA,IAAI,CAAC,WAAW,KAAK,OAAO,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,OAAO,EAAE;AAAA,IACrF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,IAAI;AACb;AAEA,SAAS,WAAW,UAA2B,YAA4B;AACnE,QAAA,SAAS,SAAS,UAAU,KAAK,CAAC,cAAc,UAAU,SAAS,UAAU;AACnF,MAAI,CAAC;AAAQ,UAAM,IAAI,WAAW,kBAAkB,mBAAmB,UAAU,EAAE;AAC5E,SAAA;AAAA,IACL,GAAG,OAAO,IAAI,KAAK,OAAO,OAAO;AAAA,IACjC;AAAA,IACA;AAAA,IACA,GAAG,OAAO,SAAS,IAAI,CAAC,YAAY,KAAK,QAAQ,KAAK,OAAO,EAAE,CAAC,IAAI,QAAQ,OAAO,EAAE;AAAA,EAAA,EACrF,KAAK,IAAI;AACb;AAEA,SAAS,YAAY,UAA2B,SAAoC;AAC3E,SAAA;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,UAAU,SAAS,OAAO,OAAO,CAAC;AAAA,IAClC,GAAI,QAAQ,cAAc,CAAC,IAAI,QAAQ,WAAW,IAAI,CAAC;AAAA,IACvD,IAAK,QAAQ,aAAa,UAAU,KAAK,IACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,YAAa;AAAA,QAAI,CAAC,aAC3B,KAAK,SAAS,KAAK,OAAO,EAAE,CAAC,IAAI,SAAS,WAAW;AAAA,MACvD;AAAA,IAAA,IAEA,CAAC;AAAA,IACL,IAAK,QAAQ,SAAS,UAAU,KAAK,IACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,QAAS,IAAI,CAAC,WAAW,OAAO,OAAO,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,WAAW,EAAE;AAAA,IAAA,IAEzF,CAAC;AAAA,IACL,IAAK,QAAQ,UAAU,UAAU,KAAK,IAClC,CAAC,IAAI,aAAa,GAAG,QAAQ,SAAU,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC,IACvE,CAAC;AAAA,EAAA,EACL,KAAK,IAAI;AACb;AAEA,SAAS,eAA0B;AAC1B,SAAA;AAAA,IACL,QAAQ,OAAO,UAAU,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,IACrD,QAAQ,OAAO,UAAU,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,IACrD,WAAW,YAAY,MAAM,UAAU,UAAU;AAAA,IACjD,QAAQ,OAAO,YAAY,MAAM,QAAQ,EAAE,SAAS,OAAO;AAAA,IAC3D,iBAAiB,MAAM,QAAQ,EAAE,gBAAgB;AAAA,EAAA;AAErD;AAEA,eAAe,sBAAsB,UAAoD;AACvF,MAAI,CAAC,UAAU,mBAAmB;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,UAAU,SAAS,IAAI;AAAA,IAAA;AAAA,EAE7B;AACA,QAAM,SAAS,+BAA+B,SAAS,IAAI,KAAK,SAAS,GAAG;AAEtE,QAAA,UAAU,MAAM,QAAQ,EAAE,SAAS,MAAM,IAAI,KAAU,KAAA;AAC7D,SAAO,OAAO,kBAAkB,OAAO,OAAO,YAAkB,MAAA;AAClE;ACxlBsB,eAAA,OAAOrD,OAAgB,MAAiC;AAC5E,cAAYA,KAAI;AAChB,SAAO,MAAM,IAAI,uBAAuB,EAAE,IAAI,IAAI;AACpD;ACLA,eAAsB,iBACpB8C,SACA,MACA,UACA,WACAK,YACA,eAAe,MACA;AACf,QAAM,QAAQA,eAAc,SAASL,QAAO,YAAYA,QAAO;AACzD,QAAA,WAAW,KAAK,QAAQ,SAAS;AACvC,QAAM,gBAA0B,CAAA;AAChC,aAAW,QAAQ,OAAO;AACpB,QAAA;AACF,oBAAc,KAAK,MAAM,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,aAC9C,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,UAAU,KAAK,CAAC,YAAY,OAAO,kBAAkB;AAAS,cAAA;AAAA,IACxF;AAAA,EACF;AACI,MAAA,CAAC,UAAU,UAAU,OAAO,IAAI,KAAK,CAAC,UAAU,UAAU,eAAe,IAAI,GAAG;AAClF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAGK,UAAS,sBAAsBL,QAAO,IAAI,KAAK,QAAQ;AAAA,MAC1D;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,CAAC;AAAc;AACf,MAAA;AACI,UAAA,WAAW,MAAM,SAAS,QAAQ;AACxC,QAAI,CAAC,UAAU,UAAU,eAAe,IAAI,GAAG;AAC7C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAGK,UAAS,mBAAmBL,QAAO,IAAI,KAAK,QAAQ;AAAA,QACvD;AAAA,MAAA;AAAA,IAEJ;AAAA,WACO,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,SAAS,UAAU,WAAmB,OAA0B,MAAyB;AAChF,SAAA,MAAM,KAAK,CAAC,SAAS;AAC1B,UAAMzB,YAAW,KAAK,SAAS,KAAK,QAAQ,IAAI,GAAG,SAAS;AAC5D,WAAOA,cAAa,MAAMA,cAAa,QAAQ,CAACA,UAAS,WAAW,KAAK,KAAK,GAAG,EAAE,KAC/E,CAAC,KAAK,WAAWA,SAAQ;AAAA,EAAA,CAC9B;AACH;ACZO,MAAM,SAA6B;AAAA,EAYxC,YAAYyB,SAA4B;AAXxC,SAAS,OAAO;AAChB,SAAS,cAAc;AACd,SAAA,iBAAiB,QAAQ,SAAS;AAClC,SAAA,WAAW,kBAAkB,QAAQ,QAAQ;AAC7C,SAAA,OAAO,cAAc,QAAQ,IAAI;AAC1C,SAAS,MAAM,QAAQ;AACvB,SAAS,aAAa,QAAQ,KAAK,CAAC,IAAI,SAAS,QAAQ,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ;AACpF,SAAS,oBAAoB,QAAQ;AACrC,SAAS,OAAO;AAId,SAAK,SAASA;AAAA,EAChB;AAAA,EAEA,MAAc;AACZ,WAAO,QAAQ;EACjB;AAAA,EAEA,UAAkB;AAChB,WAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe,QAAQ;EAChE;AAAA,EAEA,IAAI,MAAkC;AACpC,QAAI,CAAC,KAAK,OAAO,YAAY,SAAS,IAAI,GAAG;AAC3C,YAAM,IAAI,UAAU,oBAAoB,sCAAsC,IAAI,EAAE;AAAA,IACtF;AACO,WAAA,QAAQ,IAAI,IAAI;AAAA,EACzB;AAAA,EAEA,KAAK,MAAqB;AACxB,YAAQ,KAAK,IAAI;AAAA,EACnB;AAAA,EAEA,YAAY,MAAoB;AAC9B,YAAQ,WAAW;AAAA,EACrB;AAAA,EAEA,MAAM,aAAa,MAA+B;AAC1C,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACK,aAAA,MAAM,SAAS,MAAM,MAAM;AAAA,aAC3B,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAmC;AAC1C,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACF,aAAO,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC;AAAA,aACnC,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,MACA,OACA,UAAkD,CAAA,GACnC;AACT,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,UAAU,MAAM,OAAO;AAAA,QAC3B,MAAM,QAAQ,YAAY,OAAO;AAAA,QACjC,MAAM,QAAQ;AAAA,MAAA,CACf;AAAA,aACM,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,MACA,OACA,UAAkD,CAAA,GACnC;AACT,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,UAAU,MAAM,OAAO;AAAA,QAC3B,MAAM,QAAQ,YAAY,OAAO;AAAA,QACjC,MAAM,QAAQ;AAAA,MAAA,CACf;AAAA,aACM,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAAc;AACpB,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACM,cAAA,MAAM,QAAQ,MAAM,EAAE,eAAe,MAAM,GAAG,IAAI,CAAC,WAAW;AAAA,QACpE,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM,OAAO;AAAA,QACrB,aAAa,MAAM,YAAY;AAAA,QAC/B,WAAW,MAAM,eAAe;AAAA,MAChC,EAAA;AAAA,aACK,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,MAAqC;AACxC,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACF,aAAO,SAAS,MAAM,KAAK,IAAI,CAAC;AAAA,aACzB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAqC;AAC/C,UAAM,KAAK,WAAW,MAAM,QAAQ,KAAK;AACrC,QAAA;AACF,aAAO,SAAS,MAAM,MAAM,IAAI,CAAC;AAAA,aAC1B,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAA+B;AACtC,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACK,aAAA,MAAM,SAAS,IAAI;AAAA,aACnB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,UAA6C,IAAqB;AAC5E,UAAA,YAAY,QAAQ,OAAO,OAAO;AAClC,UAAA,KAAK,WAAW,WAAW,OAAO;AACpC,QAAA;AACK,aAAA,MAAM,QAAQ,SAAS,KAAK,WAAW,QAAQ,UAAU,UAAU,CAAC;AAAA,aACpE,OAAO;AACR,YAAA,mBAAmB,OAAO,SAAS;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,UAA6C,IAAqB;AAC7E,UAAA,YAAY,MAAM,KAAK,YAAY,EAAE,KAAK,QAAQ,KAAK,QAAQ,QAAQ,OAAQ,CAAA;AACrF,UAAM,OAAO,SAAS,KAAK,WAAW,MAAM;AACtC,UAAA,KAAK,UAAU,MAAM,IAAI,WAAA,GAAc,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AACtE,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,MAAc,IAA2B;AAC9C,UAAA,KAAK,WAAW,MAAM,OAAO;AAC7B,UAAA,KAAK,WAAW,IAAI,OAAO;AAC7B,QAAA;AACI,YAAA,OAAO,MAAM,EAAE;AAAA,aACd,OAAO;AACd,YAAM,mBAAmB,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAc,UAAmC,IAAmB;AAC/E,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACF,YAAM,GAAG,MAAM,EAAE,WAAW,QAAQ,aAAa,OAAO;AAAA,aACjD,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAc,UAAkD,IAAmB;AAC7F,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACI,YAAA,MAAM,MAAM,EAAE,WAAW,QAAQ,WAAW,MAAM,QAAQ,KAAA,CAAM;AAAA,aAC/D,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAc,MAA6B;AAC/C,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,MAAM,MAAM,IAAI;AAAA,aACf,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAgB,MAA6B;AACnD,UAAA,KAAK,WAAW,QAAQ,MAAM;AACpC,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACI,YAAA,QAAQ,QAAQ,IAAI;AAAA,aACnB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAc,IAA2B;AAChD,UAAA,KAAK,WAAW,MAAM,MAAM;AAClC,UAAM,KAAK,WAAW,IAAI,SAAS,KAAK;AACpC,QAAA;AACI,YAAA,SAAS,MAAM,EAAE;AAAA,aAChB,OAAO;AACd,YAAM,mBAAmB,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,KACJ,MACA,SACmB;AACb,UAAA,KAAK,WAAW,MAAM,QAAQ,QAAQ,UAAU,QAAQ,CAAC,QAAQ,SAAS;AAC1E,UAAA,QAAQ,QAAQ,QAAQ,QAAQ,QAClC,OACA,QAAQ,QACR,QAAQ,YAAY,OAAO,MAC3B;AACA,QAAA;AACK,aAAA,IAAI,aAAa,MAAM,KAAK,MAAM,OAAO,QAAQ,IAAI,CAAC;AAAA,aACtD,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAcK,YAA4C;AACrE,UAAA,KAAK,WAAW,MAAMA,UAAS;AAAA,EACvC;AAAA,EAEA,WAAW,YAAsB;AACzB,UAAA,OAAOG,WAAe,QAAQ;AAC7B,WAAA;AAAA,MACL,OAAO,OAAmB;AACxB,aAAK,OAAO,KAAK;AAAA,MACnB;AAAA,MACA,YAAY;AACH,eAAA,KAAK,OAAO,KAAK;AAAA,MAC1B;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,SAAS,QAAgB,aAAoC;AAC3D,UAAA,KAAK,WAAW,QAAQ,MAAM;AACpC,UAAM,KAAK,WAAW,aAAa,SAAS,KAAK;AAC7C,QAAA;AACI,YAAA;AAAA,QACJ,SAAS,KAAK,YAAY,iBAAiB,MAAM,CAAC,CAAC;AAAA,QACnD,WAAW,EAAE,OAAO,GAAG,UAAUC,UAAc,OAAO;AAAA,QACtD,kBAAkB,aAAa,EAAE,OAAO,MAAM,MAAM,KAAO;AAAA,MAAA;AAAA,aAEtD,OAAO;AACR,YAAA,mBAAmB,OAAO,WAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,SAAiB,MAAgB;AACzC,SAAK,cAAc,OAAO;AACnB,WAAA,MAAM,QAAQ,SAAS,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,QAAQ,SAAiB,MAAgB,aAAqB;AAClE,SAAK,cAAc,OAAO;AAC1B,UAAM,KAAK,WAAW,aAAa,SAAS,KAAK;AACjD,UAAM,QAAQ,MAAM,SAAS,MAAM,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,GAAG,OAAO,MAAO,CAAA;AACtF,UAAM,SAAuB,CAAA;AACvB,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AACjE,QAAA;AACI,YAAA;AAAA,QACJ,SAAS,KAAK,YAAY,MAAM,MAAM,CAAC;AAAA,QACvC,WAAW,EAAE,OAAO,GAAG,UAAUA,UAAc,OAAO;AAAA,QACtD,kBAAkB,aAAa,EAAE,OAAO,MAAM,MAAM,KAAO;AAAA,MAAA;AAEvD,YAAA,OAAO,MAAM,YAAY,KAAK;AACpC,aAAO,EAAE,SAAS,SAAS,GAAG,MAAM,QAAQ,IAAI,WAAc,GAAA,QAAQ,OAAO,MAAM,EAAE;AAAA,aAC9E,OAAO;AACd,YAAM,KAAK;AACL,YAAA,mBAAmB,OAAO,WAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAA2C;AAChD,UAAA,YAAY,QAAQ,QAAQ,KAAK;AAAA,EACzC;AAAA,EAEA,MAAM,OAAO,OAA2C;AAChD,UAAA,YAAY,QAAQ,QAAQ,KAAK;AAAA,EACzC;AAAA,EAEA,MAAM,YAA6B;AACjC,UAAM,SAAuB,CAAA;AAC7B,qBAAiB,SAAS,QAAQ;AAAO,aAAO,KAAK,IAAI,WAAW,KAAK,CAAC;AAC1E,WAAO,IAAI,YAAY,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,QAAwC;AAC/C,UAAA,SAAS,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAA,CAAQ;AAC3E,QAAA;AACK,aAAA,MAAM,OAAO,SAAS,MAAM;AAAA,IAAA,QAC7B;AACC,aAAA;AAAA,IAAA,UACP;AACA,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAiC;AAC5C,QAAA,CAAC,KAAK,gBAAgB,KAAK,OAAO,QAAQ,MAAM,eAAe,YAAY;AACvE,YAAA,IAAI,UAAU,oBAAoB,kCAAkC;AAAA,IAC5E;AACM,UAAA,KAAK,OAAO,MAAM;AAChB,YAAA,MAAM,WAAW,IAAI;AAC7B,YAAQ,MAAM;AACd,UAAM,QAAkB,CAAA;AACpB,QAAA;AACF,aAAO,MAAM;AACL,cAAA,QAAQ,MAAM;AACpB,YAAI,UAAU;AAAM;AACd,cAAA,OAAO,MAAM,CAAC;AAChB,YAAA,SAAS,MAAM,SAAS;AAAI;AAChC,YAAI,SAAS;AAAS,gBAAA,IAAI,UAAU,oBAAoB,uBAAuB;AAC3E,YAAA,SAAS,KAAK,SAAS;AAAK,gBAAM,IAAI;AAAA;AACrC,gBAAM,KAAK,IAAI;AAAA,MACtB;AAAA,IAAA,UACA;AACQ,cAAA,MAAM,WAAW,KAAK;AAC9B,cAAQ,MAAM;AACR,YAAA,KAAK,OAAO,IAAI;AAAA,IACxB;AACA,WAAO,IAAI,YAAY,EAAE,OAAO,WAAW,KAAK,KAAK,CAAC;AAAA,EACxD;AAAA,EAEA,kBAA2B;AAClB,WAAA,QAAQ,QAAQ,MAAM,KAAK;AAAA,EACpC;AAAA,EAEA,iBAAiB,SAKE;AACjB,UAAM,SAAS,gBAAgB;AAAA,MAC7B,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,aAAa,QAAQ;AAAA,MACrB,WAAW,QAAQ;AAAA,IAAA,CACpB;AACM,WAAA,GAAG,UAAU,QAAQ,QAAQ;AAC7B,WAAA;AAAA,MACL,CAAC,OAAO,aAAa,GAAG,MAAM,OAAO,OAAO,aAAa,EAAE;AAAA,MAC3D,OAAO,CAAC,UAAU,QAAQ,OAAO,MAAM,KAAK;AAAA,MAC5C,WAAW,CAAC,UAAU,OAAO,UAAU,KAAK;AAAA,MAC5C,QAAQ,MAAM,OAAO,OAAO;AAAA,MAC5B,OAAO,MAAM,OAAO,MAAM;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEQ,cAAc,SAAuB;AAC3C,QAAI,CAAC,KAAK,OAAO,aAAa,SAAS,OAAO,GAAG;AAC/C,YAAM,IAAI,UAAU,oBAAoB,8BAA8B,OAAO,EAAE;AAAA,IACjF;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,WACAJ,YACA,eAAe,MACA;AACT,UAAA;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AACV,YAAA;AACK,iBAAA,MAAM,SAAS,IAAI;AAAA,iBACnB,OAAO;AACR,gBAAA,mBAAmB,OAAO,IAAI;AAAA,QACtC;AAAA,MACF;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,gBAAgB,YACd,QAC4B;AAC5B,QAAM,OAAO,KAAK;AACd,MAAA,UAAU,IAAI,WAAW,IAAI;AACjC,MAAI,OAAO;AACX,mBAAiB,SAAS,QAAQ;AAChC,QAAI,SAAS;AACN,WAAA,SAAS,MAAM,YAAY;AAChC,YAAM,SAAS,KAAK,IAAI,OAAO,MAAM,MAAM,aAAa,MAAM;AAC9D,cAAQ,IAAI,MAAM,SAAS,QAAQ,SAAS,MAAM,GAAG,IAAI;AACjD,cAAA;AACE,gBAAA;AACV,UAAI,SAAS,MAAM;AACX,cAAA;AACI,kBAAA,IAAI,WAAW,IAAI;AACtB,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO;AAAS,UAAA,QAAQ,MAAM,GAAG,IAAI;AAC3C;AAEA,MAAM,aAAiC;AAAA,EAIrC,YAAY,QAA0C;AAF1C,SAAA,YAAA;AAGV,SAAK,SAAS;AAAA,EAChB;AAAA,EAJA;AAAA,EAMA,MAAM,KAAK,QAA4C;AAC/C,UAAA,SAAS,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,OAAO,QAAQ,KAAK,SAAS;AAC9E,QAAI,OAAO,cAAc;AAAU,aAAA;AACnC,SAAK,aAAa,OAAO;AACzB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,MAAM,QAAqC;AACzC,UAAA,SAAS,MAAM,KAAK,OAAO,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,SAAS;AAC/E,SAAK,aAAa,OAAO;AACzB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,KAAK,QAAiC;AACpC,SAAK,YAAY;AACV,WAAA,QAAQ,QAAQ,MAAM;AAAA,EAC/B;AAAA,EAEA,MAAM,OAA8B;AAClC,WAAO,SAAS,MAAM,KAAK,OAAO,KAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,OAAsB;AACpB,UAAA,KAAK,OAAO;EACpB;AAAA,EAEA,QAAuB;AACd,WAAA,KAAK,OAAO;EACrB;AACF;AAEA,SAAS,SAAS,OASD;AACR,SAAA;AAAA,IACL,QAAQ,MAAM,OAAO;AAAA,IACrB,aAAa,MAAM,YAAY;AAAA,IAC/B,WAAW,MAAM,eAAe;AAAA,IAChC,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM,QAAQ;AAAA,IACpB,OAAO,MAAM,SAAS;AAAA,IACtB,KAAK,MAAM,OAAO;AAAA,IAClB,KAAK,MAAM,OAAO;AAAA,EAAA;AAEtB;AAEA,eAAe,QAAQ,SAAiB,MAAgB;AACtD,SAAO,MAAM,IAAI,QAKd,CAAC5C,UAAS,WAAW;AACtB,UAAM,QAAQ,MAAM,SAAS,MAAM,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,GAAG,OAAO,MAAO,CAAA;AACtF,UAAM,SAAuB,CAAA;AAC7B,UAAM,SAAuB,CAAA;AACvB,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/D,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/D,UAAA,KAAK,SAAS,MAAM;AAC1B,UAAM,KAAK,SAAS,CAAC,SACnBA,SAAQ;AAAA,MACN,SAAS,SAAS;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,QAAQ,OAAO,MAAM;AAAA,MACrB,QAAQ,OAAO,MAAM;AAAA,IACtB,CAAA,CAAC;AAAA,EAAA,CACL;AACH;AAEA,eAAe,YAAY,OAAkD;AAC3E,MAAI,MAAM,aAAa;AAAM,WAAO,MAAM;AAC1C,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AACtC,UAAA,KAAK,SAAS,MAAM;AAC1B,UAAM,KAAK,SAAS,CAAC,SAASA,SAAQ,QAAQ,CAAC,CAAC;AAAA,EAAA,CACjD;AACH;AAEA,SAAS,OAAO,QAAkC;AAChD,QAAM,SAAS,IAAI,WAAW,OAAO,OAAO,CAAC,MAAM,UAAU,OAAO,MAAM,QAAQ,CAAC,CAAC;AACpF,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACO,SAAA;AACT;AAEA,eAAe,YACb,QACA,OACe;AACf,QAAM,IAAI,QAAc,CAACA,UAAS,WAAW;AACpC,WAAA,MAAM,OAAO,CAAC,UAAyB,QAAQ,OAAO,KAAK,IAAIA,SAAA,CAAS;AAAA,EAAA,CAChF;AACH;AAEA,eAAe,iBAA6C;AAC1D,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AAC5C,UAAM,SAAS,CAAC,UAAsB,KAAK,IAAI,WAAW,KAAK,CAAC;AAC1D,UAAA,QAAQ,MAAM,KAAK,IAAI;AACvB,UAAA,UAAU,CAAC,UAAiB;AACxB;AACR,aAAO,KAAK;AAAA,IAAA;AAEd,UAAM,UAAU,MAAM;AACZ,cAAA,MAAM,IAAI,QAAQ,MAAM;AACxB,cAAA,MAAM,IAAI,OAAO,KAAK;AACtB,cAAA,MAAM,IAAI,SAAS,OAAO;AAAA,IAAA;AAE9B,UAAA,OAAO,CAAC,UAA6B;AACjC;AACR,MAAAA,SAAQ,KAAK;AAAA,IAAA;AAEP,YAAA,MAAM,KAAK,QAAQ,MAAM;AACzB,YAAA,MAAM,KAAK,OAAO,KAAK;AACvB,YAAA,MAAM,KAAK,SAAS,OAAO;AAAA,EAAA,CACpC;AACH;AAEA,SAAS,mBAAmB,OAAgB,MAA0B;AACpE,MAAI,iBAAiB;AAAkB,WAAA;AACvC,QAAM,OAAQ,MAA4B;AAC1C,QAAM,OAAO,SAAS,WAClB,aACA,SAAS,YAAY,SAAS,UAC9B,qBACA,SAAS,WACT,kBACA,SAAS,WACT,iBACA;AACG,SAAA,IAAI,UAAU,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,MAAM,KAAK;AAChG;AAEA,SAAS,kBAAkB,OAAuB;AAChD,SAAO,UAAU,UAAU,YAAY,UAAU,WAAW,UAAU;AACxE;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,UAAU,QAAQ,WAAW,UAAU,UAAU,YAAY;AACtE;AC9kBA,MAAM,cAAcA,UAAQH,UAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,OAAO;AAC5E,MAAM,cAAc,OAAO;AAAA,EACzB,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,IAAI,IAAI,CAAC,CAAC;AAChE;AACA,MAAM,SAAS,wBAAwB;AAAA,EACrC,cAAc;AAAA,EACd,MAAM,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC1B,KAAK,QAAQ,IAAI;AAAA,EACjB;AAAA,EACA,SAAS,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe,QAAQ,IAAI;AAAA,EACpE;AAAA,EACA,MAAM,MAAM,OAAO,WAAW;AAChC,CAAC;AACD,MAAM,OAAO,IAAI,SAAS,MAAM;AAChC,YAAY,IAAI;AAChB,KAAK,YAAY,MAAM,OAAO,MAAM,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC;"}
1
+ {"version":3,"file":"cli.mjs","sources":["../core/command.ts","../core/errors.ts","../core/argv.ts","../runtime/host.ts","../core/config.ts","../core/runtime.ts","../core/development_mode.ts","../core/identity.ts","../core/auth.ts","../core/output.ts","../core/registry.ts","../core/history.ts","../core/repl.ts","../modules/auth.ts","../modules/core.ts","../core/service.ts","../modules/system.ts","../modules/system_config.ts","../modules/pikg_archive.ts","../modules/pikg_protocol.ts","../version.ts","../modules/pikg.ts","../core/task.ts","../modules/app.ts","../core/download.ts","../modules/diagnostic.ts","../modules/log.ts","../modules/task.ts","../modules/provision.ts","../modules/skill.ts","../modules/agent.ts","../modules/ai.ts","../modules/share.ts","../modules/executor.ts","../modules/aiws.ts","../core/app.ts","../main.ts","../runtime/path_policy.ts","../runtime/host_node.ts","../runtime/node_entry.ts"],"sourcesContent":["import type { CommandContext } from './context.ts'\n\nexport type JsonSchema = {\n type?: 'object' | 'array' | 'string' | 'boolean' | 'integer' | 'number' | 'null'\n title?: string\n description?: string\n properties?: Record<string, JsonSchema>\n required?: string[]\n additionalProperties?: boolean\n items?: JsonSchema\n enum?: unknown[]\n minLength?: number\n minimum?: number\n default?: unknown\n secret?: boolean\n}\n\nexport interface PositionalDefinition {\n name: string\n description: string\n required?: boolean\n}\n\nexport interface OptionDefinition {\n name: string\n property?: string\n description: string\n type: 'string' | 'boolean' | 'integer' | 'number'\n required?: boolean\n secret?: boolean\n enum?: string[]\n}\n\nexport type AccessLevel = 'read' | 'write' | 'destructive' | 'privileged'\n\nexport type AccessPolicy =\n | { mode: 'fixed'; level: AccessLevel }\n | { mode: 'operation'; operationIdField: string; possibleLevels: AccessLevel[] }\n\nexport interface CommandDefinition {\n verb: string\n summary: string\n description?: string\n positionals?: PositionalDefinition[]\n options?: OptionDefinition[]\n inputSchema: JsonSchema\n outputSchema: JsonSchema\n resultSchemaVersion: number\n access: AccessPolicy\n asyncMode: 'sync' | 'task' | 'either' | 'stream'\n requiresSession: boolean\n execution?: 'local' | 'service'\n networkAccess?: boolean\n examples?: string[]\n supportsRawOutput?: boolean\n handler(ctx: CommandContext, input: Record<string, unknown>): Promise<unknown>\n}\n\nexport interface CommandModule {\n name: string\n summary: string\n commands: CommandDefinition[]\n}\n\nexport interface RegisteredCommand extends CommandDefinition {\n module: string\n moduleSummary: string\n}\n\nexport function optionProperty(option: OptionDefinition): string {\n return option.property ?? option.name.replaceAll('-', '_')\n}\n","export const EXIT_SUCCESS = 0\nexport const EXIT_USAGE = 2\nexport const EXIT_AUTH = 3\nexport const EXIT_PERMISSION = 4\nexport const EXIT_UNAVAILABLE = 5\nexport const EXIT_OPERATION = 6\nexport const EXIT_PARTIAL = 7\nexport const EXIT_TIMEOUT = 8\nexport const EXIT_INTERNAL = 9\n\nexport class ToolError extends Error {\n readonly code: string\n readonly exitCode: number\n readonly retryable: boolean\n readonly details: Record<string, unknown>\n\n constructor(\n code: string,\n message: string,\n exitCode = EXIT_OPERATION,\n retryable = false,\n details: Record<string, unknown> = {},\n ) {\n super(message)\n this.name = 'ToolError'\n this.code = code\n this.exitCode = exitCode\n this.retryable = retryable\n this.details = details\n }\n}\n\nexport class UsageError extends ToolError {\n constructor(code: string, message: string, details: Record<string, unknown> = {}) {\n super(code, message, EXIT_USAGE, false, details)\n }\n}\n\nconst JWT_PATTERN = /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\b/g\nconst URL_CREDENTIAL_PATTERN = /(\\w+:\\/\\/)[^\\s/@:]+:[^\\s/@]+@/g\nconst DATABASE_URI_PATTERN =\n /\\b(?:postgres(?:ql)?|mysql|mariadb|mongodb(?:\\+srv)?|redis|rediss|sqlite):\\/\\/[^\\s,;]+/gi\n\nexport function sanitizeMessage(message: string): string {\n return message\n .replaceAll(JWT_PATTERN, '[REDACTED_TOKEN]')\n .replaceAll(URL_CREDENTIAL_PATTERN, '$1[REDACTED]@')\n .replaceAll(DATABASE_URI_PATTERN, '[REDACTED_DATABASE_URI]')\n .replace(\n /(session[_-]?token|refresh[_-]?token|access[_-]?token|private[_-]?key|password|passwd|api[_-]?key|client[_-]?secret|secret)\\s*[=:]\\s*[^\\s,;]+/gi,\n '$1=[REDACTED]',\n )\n}\n\nexport function normalizeError(error: unknown): ToolError {\n if (error instanceof ToolError) {\n return new ToolError(\n error.code,\n sanitizeMessage(error.message),\n error.exitCode,\n error.retryable,\n error.details,\n )\n }\n\n const raw = error instanceof Error ? error.message : String(error)\n const message = sanitizeMessage(raw)\n const lower = message.toLowerCase()\n\n if (lower.includes('abort') || lower.includes('cancel')) {\n return new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT)\n }\n if (lower.includes('timeout') || lower.includes('timed out')) {\n return new ToolError('TIMEOUT', 'operation timed out', EXIT_TIMEOUT, true)\n }\n if (\n lower.includes('permission denied') || lower.includes('no permission') ||\n lower.includes('rpc call error: 403')\n ) {\n return new ToolError('PERMISSION_DENIED', message, EXIT_PERMISSION)\n }\n if (\n lower.includes('rpc call error: 401') || lower.includes('unauthorized') ||\n lower.includes('token expired') || lower.includes('session expired') ||\n lower.includes('invalid token')\n ) {\n return new ToolError(\n lower.includes('expired') ? 'SESSION_EXPIRED' : 'INVALID_SESSION',\n lower.includes('expired') ? 'the session token has expired' : message,\n EXIT_AUTH,\n )\n }\n if (\n lower.includes('fetch failed') || lower.includes('connection refused') ||\n lower.includes('rpc call error: 502') || lower.includes('rpc call error: 503') ||\n lower.includes('rpc call error: 504')\n ) {\n return new ToolError('SERVICE_UNAVAILABLE', message, EXIT_UNAVAILABLE, true)\n }\n if (lower.includes('not found') || lower.includes('key not exist')) {\n return new ToolError('RESOURCE_NOT_FOUND', message, EXIT_OPERATION)\n }\n if (lower.includes('rpc call error:')) {\n return new ToolError('OPERATION_FAILED', message, EXIT_OPERATION)\n }\n return new ToolError('INTERNAL_ERROR', message || 'internal error', EXIT_INTERNAL)\n}\n","import type { JsonSchema, RegisteredCommand } from './command.ts'\nimport { optionProperty } from './command.ts'\nimport { UsageError } from './errors.ts'\n\nexport const OUTPUT_FORMATS = ['json', 'jsonl', 'table', 'text', 'raw'] as const\nexport type OutputFormat = typeof OUTPUT_FORMATS[number]\n\nexport interface GlobalOptions {\n configDir?: string\n allowRead?: string[]\n profile?: string\n zone?: string\n endpoint?: string\n identity?: string\n sessionToken?: string\n sessionTokenFile?: string\n cli?: boolean\n output?: OutputFormat\n input?: string\n timeout?: string\n traceId?: string\n idempotencyKey?: string\n wait?: boolean\n nonInteractive?: boolean\n yes?: boolean\n noColor?: boolean\n verbose?: boolean\n help?: boolean\n version?: boolean\n}\n\nexport interface Invocation {\n global: GlobalOptions\n module?: string\n verb?: string\n actionArgv: string[]\n}\n\nexport interface ParsedCommandArgs {\n input: Record<string, unknown>\n scoped: GlobalOptions\n help: boolean\n}\n\nconst STRING_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['config-dir', 'configDir'],\n ['profile', 'profile'],\n ['zone', 'zone'],\n ['endpoint', 'endpoint'],\n ['identity', 'identity'],\n ['session-token', 'sessionToken'],\n ['session-token-file', 'sessionTokenFile'],\n ['output', 'output'],\n ['input', 'input'],\n ['timeout', 'timeout'],\n ['trace-id', 'traceId'],\n ['idempotency-key', 'idempotencyKey'],\n])\n\nconst REPEATABLE_STRING_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['allow-read', 'allowRead'],\n])\n\nconst BOOLEAN_GLOBALS = new Map<string, keyof GlobalOptions>([\n ['cli', 'cli'],\n ['wait', 'wait'],\n ['non-interactive', 'nonInteractive'],\n ['yes', 'yes'],\n ['no-color', 'noColor'],\n ['verbose', 'verbose'],\n ['help', 'help'],\n ['version', 'version'],\n])\n\nconst REPL_SCOPED_STRING_GLOBALS = new Set([\n 'input',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'output',\n])\nconst REPL_SCOPED_BOOLEAN_GLOBALS = new Set(['wait', 'yes'])\n\nexport function parseInvocation(argv: string[]): Invocation {\n const global: GlobalOptions = {}\n let index = 0\n while (index < argv.length) {\n const token = argv[index]\n if (token === '-h') {\n setGlobal(global, 'help', true)\n index += 1\n continue\n }\n if (token === '--') {\n index += 1\n break\n }\n if (!token.startsWith('--')) break\n const parsed = splitLongOption(token)\n const booleanProperty = BOOLEAN_GLOBALS.get(parsed.name)\n if (booleanProperty) {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n setGlobal(global, booleanProperty, true)\n index += 1\n continue\n }\n const stringProperty = STRING_GLOBALS.get(parsed.name)\n const repeatableStringProperty = REPEATABLE_STRING_GLOBALS.get(parsed.name)\n if (!stringProperty && !repeatableStringProperty) {\n throw new UsageError('UNKNOWN_OPTION', `unknown global option: --${parsed.name}`)\n }\n const { value, consumed } = readOptionValue(argv, index, parsed)\n if (repeatableStringProperty === 'allowRead') {\n global.allowRead = [...(global.allowRead ?? []), value]\n } else {\n setGlobal(global, stringProperty!, normalizeGlobalValue(parsed.name, value))\n }\n index += consumed\n }\n\n const module = argv[index]\n const verb = argv[index + 1]\n const actionArgv = module ? argv.slice(index + (verb ? 2 : 1)) : []\n if (module?.startsWith('-')) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `global options must appear before the module: ${module}`,\n )\n }\n return { global, module, verb, actionArgv }\n}\n\nexport function parseCommandArgs(\n command: RegisteredCommand,\n argv: string[],\n inputObject: Record<string, unknown> | undefined,\n allowReplScopedGlobals = false,\n deferValidation = false,\n): ParsedCommandArgs {\n const cliInput: Record<string, unknown> = {}\n const scoped: GlobalOptions = {}\n const positionals = command.positionals ?? []\n const optionByName = new Map((command.options ?? []).map((option) => [option.name, option]))\n let positionalIndex = 0\n let help = false\n\n for (let index = 0; index < argv.length;) {\n const token = argv[index]\n if (token === '--help' || token === '-h') {\n help = true\n index += 1\n continue\n }\n if (token === '--') {\n for (const positionalValue of argv.slice(index + 1)) {\n positionalIndex = assignPositional(\n cliInput,\n positionals,\n positionalIndex,\n positionalValue,\n )\n }\n break\n }\n if (!token.startsWith('--')) {\n positionalIndex = assignPositional(cliInput, positionals, positionalIndex, token)\n index += 1\n continue\n }\n\n const parsed = splitLongOption(token)\n if (allowReplScopedGlobals && REPL_SCOPED_BOOLEAN_GLOBALS.has(parsed.name)) {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n const property = BOOLEAN_GLOBALS.get(parsed.name)!\n setGlobal(scoped, property, true)\n index += 1\n continue\n }\n if (allowReplScopedGlobals && REPL_SCOPED_STRING_GLOBALS.has(parsed.name)) {\n const property = STRING_GLOBALS.get(parsed.name)!\n const { value, consumed } = readOptionValue(argv, index, parsed)\n setGlobal(scoped, property, normalizeGlobalValue(parsed.name, value))\n index += consumed\n continue\n }\n if (\n allowReplScopedGlobals &&\n (STRING_GLOBALS.has(parsed.name) || REPEATABLE_STRING_GLOBALS.has(parsed.name) ||\n BOOLEAN_GLOBALS.has(parsed.name))\n ) {\n throw new UsageError(\n 'SESSION_OPTION_FROZEN',\n `--${parsed.name} is frozen for the interactive session`,\n )\n }\n\n const option = optionByName.get(parsed.name)\n if (!option) throw new UsageError('UNKNOWN_OPTION', `unknown option: --${parsed.name}`)\n const property = optionProperty(option)\n if (Object.hasOwn(cliInput, property)) {\n throw new UsageError('DUPLICATE_ARGUMENT', `argument provided more than once: ${property}`)\n }\n if (option.type === 'boolean') {\n if (parsed.inlineValue !== undefined) {\n throw new UsageError('INVALID_ARGUMENT', `--${parsed.name} does not accept a value`)\n }\n cliInput[property] = true\n index += 1\n continue\n }\n const { value, consumed } = readOptionValue(argv, index, parsed)\n cliInput[property] = parseOptionValue(option.type, value, parsed.name)\n index += consumed\n }\n\n for (let index = positionalIndex; !deferValidation && index < positionals.length; index++) {\n if (\n positionals[index].required !== false &&\n !Object.hasOwn(inputObject ?? {}, positionals[index].name)\n ) {\n throw new UsageError(\n 'MISSING_ARGUMENT',\n `missing positional argument: ${positionals[index].name}`,\n )\n }\n }\n\n const input = mergeCommandInput(inputObject, cliInput)\n if (!deferValidation) validateSchema(input, command.inputSchema, 'input')\n return { input, scoped, help }\n}\n\nexport function parseDuration(value: string): number {\n const match = /^(\\d+)(ms|s|m|h)$/.exec(value.trim())\n if (!match) {\n throw new UsageError('INVALID_DURATION', `invalid duration: ${value}`)\n }\n const amount = Number(match[1])\n const scale = match[2] === 'ms'\n ? 1\n : match[2] === 's'\n ? 1_000\n : match[2] === 'm'\n ? 60_000\n : 3_600_000\n const result = amount * scale\n if (!Number.isSafeInteger(result) || result <= 0) {\n throw new UsageError('INVALID_DURATION', `invalid duration: ${value}`)\n }\n return result\n}\n\nexport function parseShellLine(line: string): string[] {\n const tokens: string[] = []\n let current = ''\n let quote: 'single' | 'double' | null = null\n let escaped = false\n let started = false\n\n for (const character of line) {\n if (escaped) {\n current += character\n escaped = false\n started = true\n continue\n }\n if (character === '\\\\' && quote !== 'single') {\n escaped = true\n started = true\n continue\n }\n if (quote === 'single') {\n if (character === \"'\") quote = null\n else current += character\n continue\n }\n if (quote === 'double') {\n if (character === '\"') quote = null\n else current += character\n continue\n }\n if (character === \"'\") {\n quote = 'single'\n started = true\n continue\n }\n if (character === '\"') {\n quote = 'double'\n started = true\n continue\n }\n if (/\\s/.test(character)) {\n if (started) {\n tokens.push(current)\n current = ''\n started = false\n }\n continue\n }\n current += character\n started = true\n }\n if (escaped) throw new UsageError('INVALID_COMMAND_LINE', 'unfinished escape sequence')\n if (quote) throw new UsageError('INVALID_COMMAND_LINE', `unterminated ${quote} quote`)\n if (started) tokens.push(current)\n return tokens\n}\n\nexport function validateSchema(value: unknown, schema: JsonSchema, path: string): void {\n if (schema.enum && !schema.enum.some((candidate) => Object.is(candidate, value))) {\n throw new UsageError(\n 'SCHEMA_VALIDATION_FAILED',\n `${path} must be one of ${schema.enum.join(', ')}`,\n )\n }\n if (schema.type === 'object') {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an object`)\n }\n const object = value as Record<string, unknown>\n for (const required of schema.required ?? []) {\n if (!Object.hasOwn(object, required)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path}.${required} is required`)\n }\n }\n if (schema.additionalProperties === false) {\n for (const key of Object.keys(object)) {\n if (!Object.hasOwn(schema.properties ?? {}, key)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path}.${key} is not allowed`)\n }\n }\n }\n for (const [key, propertyValue] of Object.entries(object)) {\n const propertySchema = schema.properties?.[key]\n if (propertySchema) validateSchema(propertyValue, propertySchema, `${path}.${key}`)\n }\n return\n }\n if (schema.type === 'array') {\n if (!Array.isArray(value)) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an array`)\n }\n if (schema.items) {\n value.forEach((item, index) => validateSchema(item, schema.items!, `${path}[${index}]`))\n }\n return\n }\n if (schema.type === 'string') {\n if (typeof value !== 'string') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a string`)\n }\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} is too short`)\n }\n return\n }\n if (schema.type === 'boolean' && typeof value !== 'boolean') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a boolean`)\n }\n if (schema.type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be an integer`)\n }\n if (schema.type === 'number' && typeof value !== 'number') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${path} must be a number`)\n }\n}\n\nfunction assignPositional(\n input: Record<string, unknown>,\n positionals: NonNullable<RegisteredCommand['positionals']>,\n index: number,\n value: string,\n): number {\n const positional = positionals[index]\n if (!positional) {\n throw new UsageError('TOO_MANY_ARGUMENTS', `unexpected positional argument: ${value}`)\n }\n input[positional.name] = value\n return index + 1\n}\n\nfunction splitLongOption(token: string): { name: string; inlineValue?: string } {\n const content = token.slice(2)\n const equalIndex = content.indexOf('=')\n return equalIndex < 0\n ? { name: content }\n : { name: content.slice(0, equalIndex), inlineValue: content.slice(equalIndex + 1) }\n}\n\nfunction readOptionValue(\n argv: string[],\n index: number,\n option: { name: string; inlineValue?: string },\n): { value: string; consumed: number } {\n if (option.inlineValue !== undefined) {\n if (!option.inlineValue) {\n throw new UsageError('MISSING_ARGUMENT', `--${option.name} requires a value`)\n }\n return { value: option.inlineValue, consumed: 1 }\n }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n throw new UsageError('MISSING_ARGUMENT', `--${option.name} requires a value`)\n }\n return { value, consumed: 2 }\n}\n\nfunction parseOptionValue(type: string, value: string, name: string): unknown {\n if (type === 'string') return value\n const number = Number(value)\n if (!Number.isFinite(number) || (type === 'integer' && !Number.isInteger(number))) {\n throw new UsageError('INVALID_ARGUMENT', `--${name} requires a ${type}`)\n }\n return number\n}\n\nfunction mergeCommandInput(\n inputObject: Record<string, unknown> | undefined,\n cliInput: Record<string, unknown>,\n): Record<string, unknown> {\n const result = { ...(inputObject ?? {}) }\n for (const [key, value] of Object.entries(cliInput)) {\n if (Object.hasOwn(result, key)) {\n throw new UsageError('ARGUMENT_CONFLICT', `${key} is present in both --input and argv`)\n }\n result[key] = value\n }\n return result\n}\n\nfunction normalizeGlobalValue(name: string, value: string): string | OutputFormat {\n if (name === 'output') {\n if (!OUTPUT_FORMATS.includes(value as OutputFormat)) {\n throw new UsageError('INVALID_OUTPUT_FORMAT', `invalid output format: ${value}`)\n }\n return value as OutputFormat\n }\n return value\n}\n\nfunction setGlobal<K extends keyof GlobalOptions>(\n target: GlobalOptions,\n property: K,\n value: GlobalOptions[K],\n): void {\n if (target[property] !== undefined) {\n throw new UsageError('DUPLICATE_ARGUMENT', `option provided more than once: ${property}`)\n }\n target[property] = value\n}\n","export type HostKind = 'node' | 'deno'\nexport type DistributionKind = 'developer' | 'system'\nexport type HostErrorCode =\n | 'NotFound'\n | 'PermissionDenied'\n | 'AlreadyExists'\n | 'InvalidInput'\n | 'Unknown'\n\nexport class HostError extends Error {\n readonly code: HostErrorCode\n readonly path?: string\n\n constructor(code: HostErrorCode, message: string, path?: string, cause?: unknown) {\n super(message, { cause })\n this.name = 'HostError'\n this.code = code\n this.path = path\n }\n}\n\nexport function isHostError(error: unknown, code: HostErrorCode): error is HostError {\n return error instanceof HostError && error.code === code\n}\n\nexport interface HostFileInfo {\n isFile: boolean\n isDirectory: boolean\n isSymlink: boolean\n size: number\n mode: number | null\n mtime: Date | null\n dev: number | null\n ino: number | null\n}\n\nexport interface HostDirEntry {\n name: string\n isFile: boolean\n isDirectory: boolean\n isSymlink: boolean\n}\n\nexport interface HostFile {\n read(buffer: Uint8Array): Promise<number | null>\n write(buffer: Uint8Array): Promise<number>\n seek(offset: number): Promise<number>\n stat(): Promise<HostFileInfo>\n sync(): Promise<void>\n close(): Promise<void>\n}\n\nexport interface HostHash {\n update(bytes: Uint8Array): void\n digestHex(): string\n}\n\nexport interface HostCommandOutput {\n success: boolean\n code: number\n stdout: Uint8Array\n stderr: Uint8Array\n}\n\nexport interface HostPath {\n readonly sep: string\n basename(path: string): string\n dirname(path: string): string\n isAbsolute(path: string): boolean\n join(...parts: string[]): string\n relative(from: string, to: string): string\n resolve(...parts: string[]): string\n parse(path: string): { root: string; dir: string; base: string; ext: string; name: string }\n}\n\nexport interface DistributionPolicy {\n readonly name: 'developer-default' | 'system-default'\n readonly distribution: DistributionKind\n readonly packageRoot: string\n readonly readPaths: readonly string[]\n readonly writePaths: readonly string[]\n readonly environment: readonly string[]\n readonly subprocesses: readonly string[]\n readonly network: boolean\n readonly buckyosRoot?: string\n}\n\nexport interface ToolHost {\n readonly kind: HostKind\n readonly runtimeName: string\n readonly runtimeVersion: string\n readonly platform: string\n readonly arch: string\n readonly pid: number\n readonly executable: string\n readonly runtimeExecutable: string\n readonly policy: DistributionPolicy\n readonly path: HostPath\n\n cwd(): string\n homeDir(): string\n env(name: string): string | undefined\n exit(code: number): never\n setExitCode(code: number): void\n\n readTextFile(path: string): Promise<string>\n readFile(path: string): Promise<Uint8Array>\n writeTextFile(\n path: string,\n value: string,\n options?: { createNew?: boolean; mode?: number },\n ): Promise<void>\n writeFile(\n path: string,\n value: Uint8Array,\n options?: { createNew?: boolean; mode?: number },\n ): Promise<void>\n readDir(path: string): Promise<HostDirEntry[]>\n stat(path: string): Promise<HostFileInfo>\n lstat(path: string): Promise<HostFileInfo>\n realPath(path: string): Promise<string>\n makeTempDir(options?: { dir?: string; prefix?: string }): Promise<string>\n makeTempFile(options?: { dir?: string; prefix?: string }): Promise<string>\n rename(from: string, to: string): Promise<void>\n remove(path: string, options?: { recursive?: boolean }): Promise<void>\n mkdir(path: string, options?: { recursive?: boolean; mode?: number }): Promise<void>\n chmod(path: string, mode: number): Promise<void>\n symlink(target: string, path: string): Promise<void>\n copyFile(from: string, to: string): Promise<void>\n open(\n path: string,\n options: { read?: boolean; write?: boolean; createNew?: boolean; mode?: number },\n ): Promise<HostFile>\n\n // Policy check without a filesystem side effect: rejects paths outside the\n // distribution policy (or escaping it through symlinks) with PermissionDenied.\n assertAccess(path: string, operation: 'read' | 'write'): Promise<void>\n\n createHash(algorithm: 'sha256'): HostHash\n gzipFile(source: string, destination: string): Promise<void>\n run(command: string, args: string[]): Promise<HostCommandOutput>\n runGzip(command: string, args: string[], destination: string): Promise<HostCommandOutput>\n\n stdout(value: string | Uint8Array): Promise<void>\n stderr(value: string | Uint8Array): Promise<void>\n readStdin(): Promise<string>\n readLine(prompt: string): Promise<string | null>\n readSecret(prompt: string): Promise<string>\n inputIsTerminal(): boolean\n createLineReader(options: {\n history: string[]\n historySize: number\n completer(line: string): [string[], string]\n onSigint(): void\n }): HostLineReader\n}\n\nexport interface HostLineReader extends AsyncIterable<string> {\n write(value: string): void\n setPrompt(value: string): void\n prompt(): void\n close(): void\n}\n\nlet activeHost: ToolHost | undefined\n\nexport function installHost(host: ToolHost): void {\n if (activeHost && activeHost !== host) throw new Error('CLI host is already installed')\n activeHost = host\n}\n\nexport function getHost(): ToolHost {\n if (!activeHost) throw new Error('CLI host was not injected by a launcher')\n return activeHost\n}\n\nexport function resetHostForTest(): void {\n activeHost = undefined\n}\n\nexport const TOOL_ENVIRONMENT_NAMES = [\n 'HOME',\n 'USERPROFILE',\n 'APPDATA',\n 'BUCKYOS_TOOL_CONFIG_DIR',\n 'BUCKYOS_TOOL_PROFILE',\n 'BUCKYOS_TOOL_ZONE',\n 'BUCKYOS_TOOL_ENDPOINT',\n 'BUCKYOS_TOOL_IDENTITY',\n 'BUCKYOS_TOOL_OUTPUT',\n 'BUCKYOS_APPCLIENT_SESSION_TOKEN',\n 'BUCKYOS_ROOT',\n 'SOURCE_DATE_EPOCH',\n] as const\n\ninterface PolicyOptions {\n distribution: DistributionKind\n argv: string[]\n cwd: string\n packageRoot: string\n homeDir: string\n environment: Record<string, string | undefined>\n path: HostPath\n buckyosRoot?: string\n}\n\nexport function buildDistributionPolicy(options: PolicyOptions): DistributionPolicy {\n const { argv, cwd, packageRoot, homeDir, environment, path } = options\n const buckyosRoot = path.resolve(\n options.buckyosRoot ?? environment.BUCKYOS_ROOT ?? defaultBuckyosRoot(options),\n )\n const configRoot = path.resolve(\n environment.BUCKYOS_TOOL_CONFIG_DIR ?? path.join(homeDir, '.buckyos_tool'),\n )\n const readPaths = new Set([\n path.resolve(packageRoot),\n path.resolve(cwd),\n configRoot,\n path.resolve(path.join(homeDir, '.buckyos')),\n path.resolve(path.join(homeDir, '.buckycli')),\n ])\n const writePaths = new Set([path.resolve(cwd), configRoot])\n if (options.distribution === 'system') readPaths.add(buckyosRoot)\n\n const parsed = collectArgumentPaths(argv)\n if (\n options.distribution === 'system' && parsed.module === 'app' &&\n ['fetch', 'install'].includes(parsed.verb ?? '')\n ) {\n writePaths.add(path.join(buckyosRoot, 'cache', 'control_panel', 'pikg_staging', 'incoming'))\n }\n for (const candidate of parsed.read) readPaths.add(resolveInputPath(candidate, cwd, path))\n for (const candidate of parsed.readParents) {\n readPaths.add(path.dirname(resolveInputPath(candidate, cwd, path)))\n }\n for (const candidate of parsed.write) writePaths.add(resolveInputPath(candidate, cwd, path))\n for (const candidate of parsed.writeParents) {\n writePaths.add(path.dirname(resolveInputPath(candidate, cwd, path)))\n }\n const subprocesses = parsed.module === 'pikg' && ['init', 'build'].includes(parsed.verb ?? '')\n ? ['docker']\n : []\n const network = parsed.module !== undefined &&\n !['pikg', 'command', 'completion', 'config', 'provision'].includes(parsed.module)\n const allowedEnvironment = options.distribution === 'developer'\n ? TOOL_ENVIRONMENT_NAMES.filter((name) => name !== 'BUCKYOS_ROOT')\n : TOOL_ENVIRONMENT_NAMES\n\n return Object.freeze({\n name: options.distribution === 'system' ? 'system-default' : 'developer-default',\n distribution: options.distribution,\n packageRoot: path.resolve(packageRoot),\n readPaths: Object.freeze([...readPaths]),\n writePaths: Object.freeze([...writePaths]),\n environment: Object.freeze(allowedEnvironment),\n subprocesses: Object.freeze(subprocesses),\n network,\n ...(options.distribution === 'system' ? { buckyosRoot } : {}),\n })\n}\n\nfunction defaultBuckyosRoot(options: PolicyOptions): string {\n if (options.path.sep === '\\\\') {\n return options.environment.APPDATA\n ? options.path.join(options.environment.APPDATA, 'buckyos')\n : options.path.join(options.homeDir, 'AppData', 'Roaming', 'buckyos')\n }\n return '/opt/buckyos'\n}\n\nfunction resolveInputPath(value: string, cwd: string, path: HostPath): string {\n return path.isAbsolute(value) ? path.resolve(value) : path.resolve(cwd, value)\n}\n\nfunction collectArgumentPaths(argv: string[]): {\n read: string[]\n readParents: string[]\n write: string[]\n writeParents: string[]\n module?: string\n verb?: string\n} {\n const read: string[] = []\n const readParents: string[] = []\n const write: string[] = []\n const writeParents: string[] = []\n let module: string | undefined\n let verb: string | undefined\n let positional = 0\n const valueOptions = new Set([\n 'profile',\n 'zone',\n 'endpoint',\n 'identity',\n 'session-token',\n 'output',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'from',\n 'app-class',\n 'owner',\n 'policy',\n 'data',\n 'strategy',\n 'kind',\n 'source',\n 'version',\n 'name',\n ])\n const booleanOptions = new Set([\n 'replace',\n 'cli',\n 'wait',\n 'non-interactive',\n 'yes',\n 'no-color',\n 'verbose',\n 'help',\n 'version',\n ])\n for (let index = 0; index < argv.length; index++) {\n const token = argv[index]\n if (!module && !token.startsWith('-')) {\n module = token\n continue\n }\n if (module && !verb && !token.startsWith('-')) {\n verb = token\n continue\n }\n if (token.startsWith('--')) {\n const equal = token.indexOf('=')\n const name = token.slice(2, equal < 0 ? undefined : equal)\n if (booleanOptions.has(name)) continue\n const inline = equal < 0 ? undefined : token.slice(equal + 1)\n const value = inline ?? argv[index + 1]\n if (inline === undefined && value !== undefined && !value.startsWith('--')) index++\n if (value === undefined) continue\n if (name === 'config-dir') {\n read.push(value)\n write.push(value)\n } else if (name === 'allow-read') {\n read.push(value)\n } else if (['input', 'session-token-file', 'pikg'].includes(name)) {\n if (value !== '-') read.push(value)\n } else if (name === 'source' && module === 'pikg') {\n read.push(value)\n } else if (name === 'plan') {\n read.push(value)\n if (module === 'app' && verb === 'fetch') write.push(value)\n } else if (name === 'path') write.push(value)\n else if (name === 'app-doc' && module === 'app' && verb === 'publish') read.push(value)\n else if (name === 'file' && module === 'system-config' && verb === 'set-file') {\n read.push(value)\n } else if (name === 'root' && module === 'provision') {\n // status/check read the target root; activate also writes it.\n read.push(value)\n if (verb === 'activate') write.push(value)\n } else if (name === 'owner-key-backup' && module === 'provision') {\n // check inspects the backup location; activate creates the file there.\n readParents.push(value)\n if (verb === 'activate') writeParents.push(value)\n } else if (!valueOptions.has(name)) continue\n continue\n }\n if (module === 'app' && ['fetch', 'install'].includes(verb ?? '') && positional++ === 0) {\n if (!/^https?:\\/\\//i.test(token)) read.push(token)\n } else if (module === 'skill' && verb === 'install' && positional++ === 0) {\n read.push(token)\n } else if (module === 'pikg' && positional++ === 0) {\n read.push(token)\n if (verb === 'init' || verb === 'pack') write.push(token)\n else if (verb === 'build' || verb === 'clean') writeParents.push(token)\n }\n }\n return { read, readParents, write, writeParents, module, verb }\n}\n\nexport function policyView(host: ToolHost): Record<string, unknown> {\n return {\n executable: host.executable,\n runtime_executable: host.runtimeExecutable,\n distribution: host.policy.distribution,\n policy: host.policy.name,\n host: host.kind,\n runtime: host.runtimeName,\n runtime_version: host.runtimeVersion,\n platform: host.platform,\n arch: host.arch,\n package_root: host.policy.packageRoot,\n read_paths: [...host.policy.readPaths],\n write_paths: [...host.policy.writePaths],\n environment: [...host.policy.environment],\n subprocesses: [...host.policy.subprocesses],\n network: host.policy.network,\n }\n}\n\nexport async function readDistributionManifest(\n host: ToolHost = getHost(),\n): Promise<Record<string, unknown> | null> {\n const path = host.path.join(host.policy.packageRoot, 'distribution.json')\n try {\n const value = JSON.parse(await host.readTextFile(path)) as unknown\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n } catch (error) {\n if (isHostError(error, 'NotFound')) return null\n throw error\n }\n}\n\nexport function distributionManifestView(\n manifest: Record<string, unknown> | null,\n): Record<string, unknown> | null {\n if (!manifest) return null\n const { npm_files: files, ...summary } = manifest\n return {\n ...summary,\n npm_file_count: Array.isArray(files) ? files.length : null,\n }\n}\n","import type { GlobalOptions, OutputFormat } from './argv.ts'\nimport { parseDuration } from './argv.ts'\nimport { ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nexport interface ToolConfig {\n schema_version: 1\n default_profile?: string\n output?: OutputFormat\n}\n\nexport interface ProfileConfig {\n schema_version: 1\n zone?: string\n endpoint?: string\n identity?: string\n default_protocol?: 'http://' | 'https://'\n output?: OutputFormat\n}\n\nexport interface ImplicitDeviceIdentity {\n did: string\n name: string\n zoneDid: string\n buckyosRoot: string\n nodeIdentityPath: string\n publicRoot: string\n securityRoot: string\n}\n\nexport interface ResolvedConfig {\n configDir: string\n profileName?: string\n zone?: string\n endpoint?: string\n identity?: string\n identityRoot?: string\n securityRoot?: string\n sessionToken?: string\n sessionTokenFile?: string\n output: OutputFormat\n defaultProtocol: 'http://' | 'https://'\n timeoutMs: number\n traceId?: string\n idempotencyKey?: string\n wait: boolean\n nonInteractive: boolean\n yes: boolean\n noColor: boolean\n verbose: boolean\n implicitDeviceIdentity?: ImplicitDeviceIdentity\n sources: Record<string, string>\n}\n\nexport type Environment = Record<string, string | undefined>\n\nexport const ENVIRONMENT_NAMES = [\n 'HOME',\n 'USERPROFILE',\n 'APPDATA',\n 'BUCKYOS_TOOL_CONFIG_DIR',\n 'BUCKYOS_TOOL_PROFILE',\n 'BUCKYOS_TOOL_ZONE',\n 'BUCKYOS_TOOL_ENDPOINT',\n 'BUCKYOS_TOOL_IDENTITY',\n 'BUCKYOS_TOOL_OUTPUT',\n 'BUCKYOS_APPCLIENT_SESSION_TOKEN',\n 'BUCKYOS_ROOT',\n] as const\n\nconst PROFILE_NAME = /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/\nconst DEFAULT_TIMEOUT_MS = 30_000\n\nexport class ConfigStore {\n readonly root: string\n\n constructor(root: string) {\n this.root = resolve(root)\n }\n\n async readConfig(): Promise<ToolConfig> {\n return await this.#readJson<ToolConfig>(join(this.root, 'config.json'), {\n schema_version: 1,\n })\n }\n\n async readProfile(name: string): Promise<ProfileConfig | undefined> {\n validateProfileName(name)\n return await this.#readJson<ProfileConfig>(this.profilePath(name), undefined)\n }\n\n async listProfiles(): Promise<string[]> {\n const directory = join(this.root, 'profiles')\n try {\n const names: string[] = []\n for (const entry of await getHost().readDir(directory)) {\n if (entry.isFile && entry.name.endsWith('.json')) {\n const name = entry.name.slice(0, -5)\n if (PROFILE_NAME.test(name)) names.push(name)\n }\n }\n return names.sort()\n } catch (error) {\n if (isHostError(error, 'NotFound')) return []\n throw error\n }\n }\n\n async writeConfig(config: ToolConfig): Promise<void> {\n validateToolConfig(config, 'config.json')\n await this.#atomicWrite(join(this.root, 'config.json'), config)\n }\n\n async writeProfile(name: string, profile: ProfileConfig): Promise<void> {\n validateProfileName(name)\n validateProfileConfig(profile, `profiles/${name}.json`)\n await this.#atomicWrite(this.profilePath(name), profile)\n }\n\n profilePath(name: string): string {\n validateProfileName(name)\n return join(this.root, 'profiles', `${name}.json`)\n }\n\n historyPath(): string {\n return join(this.root, 'state', 'repl_history')\n }\n\n async #readJson<T>(path: string, missing: T | undefined): Promise<T> {\n try {\n const parsed = JSON.parse(await getHost().readTextFile(path)) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new UsageError('INVALID_CONFIG', `${path} must contain a JSON object`)\n }\n if ((parsed as Record<string, unknown>).schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${path} has an unsupported schema_version`,\n )\n }\n if (path.endsWith('config.json') && !path.includes('/profiles/')) {\n validateToolConfig(parsed as ToolConfig, path)\n } else {\n validateProfileConfig(parsed as ProfileConfig, path)\n }\n return parsed as T\n } catch (error) {\n if (isHostError(error, 'NotFound') && missing !== undefined) return missing\n if (error instanceof SyntaxError) {\n throw new UsageError('INVALID_CONFIG', `${path} is not valid JSON`)\n }\n throw error\n }\n }\n\n async #atomicWrite(path: string, value: unknown): Promise<void> {\n const host = getHost()\n await host.mkdir(dirname(path), { recursive: true, mode: 0o700 })\n const temporary = `${path}.tmp-${host.pid}-${crypto.randomUUID()}`\n const body = `${JSON.stringify(value, null, 2)}\\n`\n try {\n await host.writeTextFile(temporary, body, { mode: 0o600, createNew: true })\n await host.rename(temporary, path)\n if (host.platform !== 'windows') await host.chmod(path, 0o600)\n } catch (error) {\n try {\n await host.remove(temporary)\n } catch (cleanupError) {\n void cleanupError\n }\n throw error\n }\n }\n}\n\nexport async function resolveConfig(\n explicit: GlobalOptions,\n environment: Environment = readEnvironment(),\n options: { interactive?: boolean; cwd?: string; homeDir?: string } = {},\n): Promise<{ resolved: ResolvedConfig; store: ConfigStore }> {\n const cwd = options.cwd ?? getHost().cwd()\n const homeDir = options.homeDir ?? environment.HOME ?? environment.USERPROFILE ??\n getHost().homeDir()\n const configDir = resolveConfigRoot(explicit, environment, cwd, homeDir)\n const store = new ConfigStore(configDir)\n const config = await store.readConfig()\n const profileName = explicit.profile ?? environment.BUCKYOS_TOOL_PROFILE ?? config.default_profile\n const profile = profileName ? await store.readProfile(profileName) : undefined\n if (profileName && !profile) {\n throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n }\n\n const sources: Record<string, string> = {\n config_dir: sourceOf(\n explicit.configDir,\n environment.BUCKYOS_TOOL_CONFIG_DIR,\n undefined,\n 'default',\n ),\n }\n const zone = select(\n 'zone',\n explicit.zone,\n environment.BUCKYOS_TOOL_ZONE,\n profile?.zone,\n undefined,\n sources,\n )\n const endpoint = select(\n 'endpoint',\n explicit.endpoint,\n environment.BUCKYOS_TOOL_ENDPOINT,\n profile?.endpoint,\n undefined,\n sources,\n )\n const identity = select(\n 'identity',\n explicit.identity,\n environment.BUCKYOS_TOOL_IDENTITY,\n profile?.identity,\n undefined,\n sources,\n )\n let output: OutputFormat\n if (options.interactive && explicit.output === undefined) {\n output = 'table'\n sources.output = 'interactive-default'\n } else {\n output = select(\n 'output',\n explicit.output,\n asOutput(environment.BUCKYOS_TOOL_OUTPUT),\n profile?.output,\n config.output ?? 'json',\n sources,\n )!\n }\n const defaultProtocol = profile?.default_protocol ?? inferProtocol(endpoint) ?? 'https://'\n const timeoutMs = explicit.timeout ? parseDuration(explicit.timeout) : DEFAULT_TIMEOUT_MS\n\n if (endpoint) validateEndpoint(endpoint)\n const sessionToken = explicit.sessionToken ?? environment.BUCKYOS_APPCLIENT_SESSION_TOKEN\n if (sessionToken) sources.session_token = explicit.sessionToken ? 'argument' : 'environment'\n if (profileName) {\n sources.profile = explicit.profile\n ? 'argument'\n : environment.BUCKYOS_TOOL_PROFILE\n ? 'environment'\n : 'config'\n }\n\n return {\n store,\n resolved: {\n configDir,\n profileName,\n zone,\n endpoint,\n identity,\n sessionToken,\n sessionTokenFile: explicit.sessionTokenFile,\n output,\n defaultProtocol,\n timeoutMs,\n traceId: explicit.traceId,\n idempotencyKey: explicit.idempotencyKey,\n wait: explicit.wait ?? false,\n nonInteractive: explicit.nonInteractive ?? false,\n yes: explicit.yes ?? false,\n noColor: explicit.noColor ?? false,\n verbose: explicit.verbose ?? false,\n sources,\n },\n }\n}\n\nexport function resolveConfigRoot(\n explicit: GlobalOptions,\n environment: Environment,\n cwd = getHost().cwd(),\n homeDir = environment.HOME ?? environment.USERPROFILE ?? getHost().homeDir(),\n): string {\n const value = explicit.configDir ?? environment.BUCKYOS_TOOL_CONFIG_DIR ??\n join(homeDir, '.buckyos_tool')\n return isAbsolute(value) ? value : resolve(cwd, value)\n}\n\nexport function localResolvedConfig(\n explicit: GlobalOptions,\n environment: Environment = readEnvironment(),\n options: { cwd?: string; homeDir?: string; interactive?: boolean } = {},\n): { resolved: ResolvedConfig; store: ConfigStore } {\n const cwd = options.cwd ?? getHost().cwd()\n const homeDir = options.homeDir ?? environment.HOME ?? environment.USERPROFILE ??\n getHost().homeDir()\n const configDir = resolveConfigRoot(explicit, environment, cwd, homeDir)\n const output = options.interactive && explicit.output === undefined\n ? 'table'\n : explicit.output ?? asOutput(environment.BUCKYOS_TOOL_OUTPUT) ?? 'json'\n return {\n store: new ConfigStore(configDir),\n resolved: {\n configDir,\n profileName: explicit.profile ?? environment.BUCKYOS_TOOL_PROFILE,\n zone: explicit.zone ?? environment.BUCKYOS_TOOL_ZONE,\n endpoint: explicit.endpoint ?? environment.BUCKYOS_TOOL_ENDPOINT,\n identity: explicit.identity ?? environment.BUCKYOS_TOOL_IDENTITY,\n sessionToken: explicit.sessionToken ?? environment.BUCKYOS_APPCLIENT_SESSION_TOKEN,\n sessionTokenFile: explicit.sessionTokenFile,\n output,\n defaultProtocol: inferProtocol(explicit.endpoint ?? environment.BUCKYOS_TOOL_ENDPOINT) ??\n 'https://',\n timeoutMs: explicit.timeout ? parseDuration(explicit.timeout) : DEFAULT_TIMEOUT_MS,\n traceId: explicit.traceId,\n idempotencyKey: explicit.idempotencyKey,\n wait: explicit.wait ?? false,\n nonInteractive: explicit.nonInteractive ?? false,\n yes: explicit.yes ?? false,\n noColor: explicit.noColor ?? false,\n verbose: explicit.verbose ?? false,\n sources: {\n config_dir: sourceOf(\n explicit.configDir,\n environment.BUCKYOS_TOOL_CONFIG_DIR,\n undefined,\n 'default',\n ),\n output: explicit.output\n ? 'argument'\n : environment.BUCKYOS_TOOL_OUTPUT\n ? 'environment'\n : 'default',\n },\n },\n }\n}\n\nexport function readEnvironment(): Environment {\n const allowed = getHost().policy.environment\n return Object.fromEntries(\n ENVIRONMENT_NAMES.map((\n name,\n ) => [name, allowed.includes(name) ? getHost().env(name) : undefined]),\n )\n}\n\nexport function effectiveConfigView(config: ResolvedConfig): Record<string, unknown> {\n return {\n schema_version: 1,\n config_dir: config.configDir,\n profile: config.profileName ?? null,\n zone: config.zone ?? null,\n endpoint: redactUrl(config.endpoint),\n identity: config.identity ?? null,\n identity_root: config.identityRoot ?? null,\n security_root: config.securityRoot ? '[CONFIGURED]' : null,\n output: config.output,\n default_protocol: config.defaultProtocol,\n timeout_ms: config.timeoutMs,\n session_token: config.sessionToken || config.sessionTokenFile\n ? {\n present: true,\n source: config.sources.session_token ?? (config.sessionTokenFile ? 'file' : 'unknown'),\n summary: '[REDACTED]',\n }\n : { present: false },\n sources: config.sources,\n }\n}\n\nexport function validateProfileName(name: string): void {\n if (!PROFILE_NAME.test(name)) {\n throw new UsageError('INVALID_PROFILE_NAME', `invalid profile name: ${name}`)\n }\n}\n\nfunction validateToolConfig(config: ToolConfig, source: string): void {\n if (config.schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${source} has an unsupported schema_version`,\n )\n }\n if (config.default_profile !== undefined) validateProfileName(config.default_profile)\n if (config.output !== undefined) asOutput(config.output, source)\n rejectUnknownKeys(config as unknown as Record<string, unknown>, [\n 'schema_version',\n 'default_profile',\n 'output',\n ], source)\n}\n\nfunction validateProfileConfig(profile: ProfileConfig, source: string): void {\n if (profile.schema_version !== 1) {\n throw new UsageError(\n 'UNSUPPORTED_CONFIG_VERSION',\n `${source} has an unsupported schema_version`,\n )\n }\n if (profile.output !== undefined) asOutput(profile.output, source)\n if (\n profile.default_protocol !== undefined &&\n !['http://', 'https://'].includes(profile.default_protocol)\n ) {\n throw new UsageError('INVALID_CONFIG', `${source}.default_protocol must be http:// or https://`)\n }\n if (profile.endpoint) validateEndpoint(profile.endpoint)\n rejectUnknownKeys(\n profile as unknown as Record<string, unknown>,\n ['schema_version', 'zone', 'endpoint', 'identity', 'default_protocol', 'output'],\n source,\n )\n}\n\nfunction rejectUnknownKeys(\n value: Record<string, unknown>,\n allowed: string[],\n source: string,\n): void {\n const allowedSet = new Set(allowed)\n const unknown = Object.keys(value).filter((key) => !allowedSet.has(key))\n if (unknown.length > 0) {\n throw new UsageError(\n 'INVALID_CONFIG',\n `${source} contains unsupported fields: ${unknown.join(', ')}`,\n )\n }\n}\n\nfunction asOutput(\n value: string | undefined,\n source = 'BUCKYOS_TOOL_OUTPUT',\n): OutputFormat | undefined {\n if (value === undefined) return undefined\n if (!['json', 'jsonl', 'table', 'text', 'raw'].includes(value)) {\n throw new UsageError('INVALID_OUTPUT_FORMAT', `${source} has invalid output format: ${value}`)\n }\n return value as OutputFormat\n}\n\nfunction select<T>(\n name: string,\n explicit: T | undefined,\n environment: T | undefined,\n profile: T | undefined,\n fallback: T | undefined,\n sources: Record<string, string>,\n): T | undefined {\n if (explicit !== undefined) {\n sources[name] = 'argument'\n return explicit\n }\n if (environment !== undefined) {\n sources[name] = 'environment'\n return environment\n }\n if (profile !== undefined) {\n sources[name] = 'profile'\n return profile\n }\n if (fallback !== undefined) sources[name] = 'default'\n return fallback\n}\n\nfunction sourceOf(\n explicit: unknown,\n environment: unknown,\n profile: unknown,\n fallback: string,\n): string {\n return explicit !== undefined\n ? 'argument'\n : environment !== undefined\n ? 'environment'\n : profile !== undefined\n ? 'profile'\n : fallback\n}\n\nfunction validateEndpoint(value: string): void {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new UsageError('INVALID_ENDPOINT', `invalid endpoint URL: ${value}`)\n }\n if (!['http:', 'https:'].includes(url.protocol)) {\n throw new UsageError('INVALID_ENDPOINT', 'endpoint must use http or https')\n }\n}\n\nfunction inferProtocol(endpoint: string | undefined): 'http://' | 'https://' | undefined {\n if (!endpoint) return undefined\n return endpoint.startsWith('http://')\n ? 'http://'\n : endpoint.startsWith('https://')\n ? 'https://'\n : undefined\n}\n\nfunction redactUrl(value: string | undefined): string | null {\n if (!value) return null\n try {\n const url = new URL(value)\n if (url.username || url.password) {\n url.username = '[REDACTED]'\n url.password = '[REDACTED]'\n }\n return url.toString()\n } catch {\n return '[INVALID_URL]'\n }\n}\n\nexport function configValueError(message: string): ToolError {\n return new ToolError('INVALID_CONFIG_VALUE', message, 2)\n}\n","import { buckyos, BuckyOSSDK, namelib, RuntimeType } from 'buckyos/node'\nimport type { SessionController } from './auth.ts'\nimport type { ResolvedConfig } from './config.ts'\nimport type { ResolvedConnection } from './context.ts'\nimport { ToolError, UsageError } from './errors.ts'\n\nexport interface RuntimeAdapter {\n initialize(config: ResolvedConfig, session: SessionController): Promise<ResolvedConnection>\n}\n\nexport interface RpcCallOptions {\n traceId: string\n timeoutMs: number\n signal?: AbortSignal\n}\n\nexport interface ServiceClientRegistry {\n call<T>(\n service: string,\n method: string,\n params: Record<string, unknown>,\n options: RpcCallOptions,\n ): Promise<T>\n createEventReader?(pattern: string, signal?: AbortSignal): Promise<EventReader>\n}\n\nexport interface EventReader {\n pullEvent(timeoutMs?: number): Promise<unknown | null>\n close(): Promise<void>\n}\n\ninterface RpcClient {\n call<T>(\n method: string,\n params: Record<string, unknown>,\n options: { traceId: string },\n ): Promise<T>\n}\n\ntype RpcClientConstructor = new (\n url: string,\n token?: string | null,\n sequence?: number | null,\n options?: { sessionTokenProvider?: () => Promise<string | null> },\n) => RpcClient\n\nexport class BuckyOSRuntimeAdapter implements RuntimeAdapter {\n #sdk = new BuckyOSSDK('node')\n\n async initialize(\n config: ResolvedConfig,\n session: SessionController,\n ): Promise<ResolvedConnection> {\n const authenticated = session.current()\n const zoneHost = resolveZoneHost(config)\n const initialize = this.#sdk.initBuckyOS as unknown as (\n appId: string,\n config: Record<string, unknown>,\n ) => Promise<void>\n await initialize.call(this.#sdk, authenticated.principal.appId, {\n appId: authenticated.principal.appId,\n ownerUserId: authenticated.principal.id,\n runtimeType: RuntimeType.AppClient,\n zoneHost,\n defaultProtocol: config.defaultProtocol,\n sessionToken: authenticated.token,\n privateKeySearchPaths: [],\n autoRenew: false,\n verifyHubServiceUrl: resolveServiceUrl(config, 'verify-hub'),\n })\n return {\n zone: config.zone ?? zoneHost,\n endpoint: config.endpoint ?? `${config.defaultProtocol}${zoneHost}`,\n defaultProtocol: config.defaultProtocol,\n }\n }\n}\n\nexport class BuckyOSServiceClientRegistry implements ServiceClientRegistry {\n readonly #config: ResolvedConfig\n readonly #session: SessionController\n readonly #clients = new Map<string, RpcClient>()\n\n constructor(config: ResolvedConfig, session: SessionController) {\n this.#config = config\n this.#session = session\n }\n\n async call<T>(\n service: string,\n method: string,\n params: Record<string, unknown>,\n options: RpcCallOptions,\n ): Promise<T> {\n let client = this.#clients.get(service)\n if (!client) {\n const RpcClient = buckyos.kRPCClient as unknown as RpcClientConstructor\n client = new RpcClient(resolveServiceUrl(this.#config, service), null, null, {\n sessionTokenProvider: async () => (await this.#session.ensureValid()).token,\n })\n this.#clients.set(service, client)\n }\n const request = client.call(method, params, { traceId: options.traceId }) as Promise<T>\n return await withDeadline(request, options.timeoutMs, options.signal)\n }\n\n async createEventReader(pattern: string, signal?: AbortSignal): Promise<EventReader> {\n return await buckyos.createEventReader(pattern, { keepaliveMs: 5_000, signal })\n }\n}\n\nexport class InteractiveSession {\n readonly authentication: SessionController\n readonly clients: ServiceClientRegistry\n readonly connection: ResolvedConnection\n readonly startedAt: number\n\n private constructor(\n authentication: SessionController,\n clients: ServiceClientRegistry,\n connection: ResolvedConnection,\n ) {\n this.authentication = authentication\n this.clients = clients\n this.connection = connection\n this.startedAt = Date.now()\n }\n\n static async create(\n config: ResolvedConfig,\n authentication: SessionController,\n runtime: RuntimeAdapter = new BuckyOSRuntimeAdapter(),\n clients?: ServiceClientRegistry,\n ): Promise<InteractiveSession> {\n await authentication.connect()\n const connection = await runtime.initialize(config, authentication)\n return new InteractiveSession(\n authentication,\n clients ?? new BuckyOSServiceClientRegistry(config, authentication),\n connection,\n )\n }\n\n async reconnect(): Promise<void> {\n await this.authentication.reconnect()\n }\n}\n\nexport function resolveServiceUrl(config: ResolvedConfig, service: string): string {\n if (config.endpoint) {\n const endpoint = new URL(config.endpoint)\n const marker = endpoint.pathname.indexOf('/kapi/')\n if (marker >= 0) endpoint.pathname = `${endpoint.pathname.slice(0, marker)}/kapi/${service}`\n else if (endpoint.pathname.endsWith('/kapi')) {\n endpoint.pathname = `${endpoint.pathname}/${service}`\n } else endpoint.pathname = `${endpoint.pathname.replace(/\\/$/, '')}/kapi/${service}`\n endpoint.search = ''\n endpoint.hash = ''\n return endpoint.toString().replace(/\\/$/, '')\n }\n const host = resolveZoneHost(config)\n return `${config.defaultProtocol}${host}/kapi/${service}`\n}\n\nexport function resolveZoneHost(config: ResolvedConfig): string {\n if (config.zone) {\n try {\n return namelib.DID.fromStr(config.zone).toRawHostName()\n } catch {\n throw new UsageError('INVALID_ZONE', `invalid zone host or DID: ${config.zone}`)\n }\n }\n if (config.endpoint) return new URL(config.endpoint).host\n throw new UsageError('CONNECTION_REQUIRED', 'an endpoint or zone is required for online commands')\n}\n\nexport async function withDeadline<T>(\n promise: Promise<T>,\n timeoutMs: number,\n signal?: AbortSignal,\n): Promise<T> {\n if (signal?.aborted) throw new ToolError('CANCELED', 'operation canceled', 8)\n let timer: ReturnType<typeof setTimeout> | undefined\n let abortHandler: (() => void) | undefined\n const guards: Promise<never>[] = [\n new Promise((_, reject) => {\n timer = setTimeout(\n () => reject(new ToolError('TIMEOUT', 'operation timed out', 8, true)),\n timeoutMs,\n )\n }),\n ]\n if (signal) {\n guards.push(\n new Promise((_, reject) => {\n abortHandler = () => reject(new ToolError('CANCELED', 'operation canceled', 8))\n signal.addEventListener('abort', abortHandler, { once: true })\n }),\n )\n }\n try {\n return await Promise.race([promise, ...guards])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n if (signal && abortHandler) signal.removeEventListener('abort', abortHandler)\n }\n}\n","import { buckyos } from 'buckyos/node'\nimport type { ResolvedConfig } from './config.ts'\nimport { resolveServiceUrl } from './runtime.ts'\n\nexport const BUCKYOS_DEV_CONFIG_KEY = 'system/buckyos_dev_config'\nexport const BUCKYOS_DEV_CONFIG_SCHEMA_VERSION = 1\n\nexport interface BuckyOSDevConfig {\n schema_version: 1\n enabled: boolean\n enabled_at: number | null\n enabled_by: string | null\n}\n\nexport type DevelopmentModeDecision =\n | { state: 'enabled'; config: BuckyOSDevConfig }\n | { state: 'disabled'; config: BuckyOSDevConfig }\n | { state: 'unavailable'; reason: string }\n\nexport type DevelopmentModeReader = (\n config: ResolvedConfig,\n) => Promise<DevelopmentModeDecision>\n\ninterface PublicRpcClient {\n call<T>(method: string, params: Record<string, unknown>): Promise<T>\n}\n\n/**\n * Read the target Zone's public developer-mode setting.\n *\n * This deliberately uses control-panel's unauthenticated `system.dev_mode.get`\n * endpoint: developer mode must be known before a local identity is touched or\n * exchanged at verify-hub. Every error is converted to `unavailable`, which is\n * a fail-closed result for the identity resolver.\n */\nexport async function readTargetDevelopmentMode(\n config: ResolvedConfig,\n): Promise<DevelopmentModeDecision> {\n try {\n const url = resolveServiceUrl(config, 'control-panel')\n const client = new buckyos.kRPCClient(url) as unknown as PublicRpcClient\n const value = await withTimeout(\n client.call<unknown>('system.dev_mode.get', {}),\n config.timeoutMs,\n )\n const parsed = parseBuckyOSDevConfig(value)\n return parsed.enabled\n ? { state: 'enabled', config: parsed }\n : { state: 'disabled', config: parsed }\n } catch (error) {\n return {\n state: 'unavailable',\n reason: error instanceof Error ? error.message : String(error),\n }\n }\n}\n\nexport function parseBuckyOSDevConfig(value: unknown): BuckyOSDevConfig {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new Error('BuckyOSDevConfig must be an object')\n }\n const config = value as Record<string, unknown>\n const keys = Object.keys(config).sort()\n const expectedKeys = ['enabled', 'enabled_at', 'enabled_by', 'schema_version']\n if (JSON.stringify(keys) !== JSON.stringify(expectedKeys)) {\n throw new Error('BuckyOSDevConfig contains missing or unsupported fields')\n }\n if (config.schema_version !== BUCKYOS_DEV_CONFIG_SCHEMA_VERSION) {\n throw new Error(`unsupported BuckyOSDevConfig schema_version ${String(config.schema_version)}`)\n }\n if (typeof config.enabled !== 'boolean') {\n throw new Error('BuckyOSDevConfig enabled must be a boolean')\n }\n const enabledAt = config.enabled_at\n const enabledBy = config.enabled_by\n const hasAuditFields = Number.isSafeInteger(enabledAt) && (enabledAt as number) > 0 &&\n typeof enabledBy === 'string' && enabledBy.trim().length > 0\n const hasNoAuditFields = enabledAt === null && enabledBy === null\n if (!hasAuditFields && !hasNoAuditFields) {\n throw new Error('BuckyOSDevConfig enabled_at and enabled_by must be valid and present together')\n }\n if (config.enabled && !hasAuditFields) {\n throw new Error('enabled BuckyOSDevConfig requires enable audit fields')\n }\n return {\n schema_version: 1,\n enabled: config.enabled,\n enabled_at: enabledAt as number | null,\n enabled_by: enabledBy as string | null,\n }\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error('developer-mode lookup timed out')), timeoutMs)\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n","import { namelib } from 'buckyos/node'\nimport { type Environment, readEnvironment, type ResolvedConfig } from './config.ts'\nimport { EXIT_AUTH, EXIT_PERMISSION, ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nconst join = (...parts: string[]) => getHost().path.join(...parts)\n\nconst LOCAL_NODE_GATEWAY_ENDPOINT = 'http://127.0.0.1:3180'\n\nexport interface IdentityMaterial {\n did: string\n subject: string\n issuer: string\n principalKind: 'user' | 'device'\n publicRoot: string\n securityRoot: string\n documentPath: string\n privateKeyPath: string\n privateKeyPem: string\n source: IdentityRootPair['source']\n}\n\nexport interface IdentityRootPair {\n publicRoot: string\n securityRoot: string\n source: 'buckyos-home' | 'buckycli-home' | 'current-device'\n}\n\nexport interface IdentityRootOptions {\n includeOperations?: boolean\n includeDeveloper?: boolean\n}\n\nexport const IDENTITY_CANDIDATE_LIMIT = 8\nexport const IDENTITY_REJECTION_CODES = Object.freeze([\n 'IDENTITY_KIND_NOT_ACCEPTED',\n 'AUTHENTICATION_REJECTED',\n])\n\nexport interface IdentityCandidate {\n material: IdentityMaterial\n source: IdentityRootPair['source']\n directory: string\n}\n\nexport interface IdentityCandidateScan {\n order: readonly IdentityRootPair['source'][]\n limit: number\n candidates: IdentityCandidate[]\n skipped: Array<{\n source: IdentityRootPair['source']\n identity?: string\n path: string\n reason: string\n }>\n}\n\nexport async function applyImplicitDeviceIdentity(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n): Promise<ResolvedConfig> {\n if (\n config.sessionToken || config.sessionTokenFile || config.identity || config.zone ||\n config.endpoint\n ) {\n return config\n }\n const device = await readCurrentDeviceIdentity(environment)\n if (!device) return config\n return {\n ...config,\n identity: device.did,\n zone: device.zoneDid,\n endpoint: LOCAL_NODE_GATEWAY_ENDPOINT,\n identityRoot: device.publicRoot,\n securityRoot: device.securityRoot,\n defaultProtocol: 'http://',\n implicitDeviceIdentity: device,\n sources: {\n ...config.sources,\n identity: 'current-device',\n zone: 'current-device',\n endpoint: 'local-node-gateway',\n identity_root: 'current-device',\n security_root: 'current-device',\n },\n }\n}\n\nexport async function readCurrentDeviceIdentity(\n environment: Environment = readEnvironment(),\n): Promise<NonNullable<ResolvedConfig['implicitDeviceIdentity']> | undefined> {\n if (\n getHost().policy.distribution === 'developer' && environment.BUCKYOS_ROOT === undefined\n ) return undefined\n const buckyosRoot = environment.BUCKYOS_ROOT ?? defaultBuckyOSRoot(environment)\n const nodeIdentityPath = join(buckyosRoot, 'etc', 'node_identity.json')\n let value: unknown\n try {\n value = JSON.parse(await getHost().readTextFile(nodeIdentityPath))\n } catch (error) {\n if (isHostError(error, 'NotFound')) return undefined\n if (isHostError(error, 'PermissionDenied')) {\n throw new ToolError(\n 'DEVICE_IDENTITY_READ_FAILED',\n `permission denied reading current device identity: ${nodeIdentityPath}`,\n EXIT_PERMISSION,\n )\n }\n throw new ToolError(\n 'DEVICE_IDENTITY_READ_FAILED',\n `failed to read current device identity: ${nodeIdentityPath}`,\n EXIT_AUTH,\n )\n }\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n const document = value as Record<string, unknown>\n const did = nonEmptyString(document.device_did)\n const name = nonEmptyString(document.device_name)\n const zoneDid = nonEmptyString(document.zone_did)\n if (document.schema !== 'buckyos.node_identity.v2' || !did || !name || !zoneDid) {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n try {\n namelib.DID.fromStr(did)\n namelib.DID.fromStr(zoneDid)\n } catch {\n throw invalidDeviceIdentity(nodeIdentityPath)\n }\n return {\n did,\n name,\n zoneDid,\n buckyosRoot,\n nodeIdentityPath,\n publicRoot: join(buckyosRoot, 'local', 'identity'),\n securityRoot: join(buckyosRoot, 'security'),\n }\n}\n\nexport function identityRootPairs(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): IdentityRootPair[] {\n const device = config.implicitDeviceIdentity\n if (device) {\n return [{\n publicRoot: device.publicRoot,\n securityRoot: device.securityRoot,\n source: 'current-device',\n }]\n }\n\n const home = environment.HOME ?? environment.USERPROFILE ?? getHost().homeDir()\n const pairs: IdentityRootPair[] = []\n if (options.includeOperations ?? true) {\n pairs.push({\n publicRoot: join(home, '.buckyos', 'local', 'identity'),\n securityRoot: join(home, '.buckyos', 'security'),\n source: 'buckyos-home',\n })\n }\n if (options.includeDeveloper ?? false) {\n pairs.push({\n publicRoot: join(home, '.buckycli', 'local', 'identity'),\n securityRoot: join(home, '.buckycli', 'security'),\n source: 'buckycli-home',\n })\n }\n return deduplicatePairs(pairs)\n}\n\nexport async function resolveIdentityMaterial(\n selectedIdentity: string,\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): Promise<IdentityMaterial> {\n const selected = selectedIdentity.trim()\n if (!selected) throw new UsageError('IDENTITY_REQUIRED', 'identity is empty')\n\n for (const roots of identityRootPairs(config, environment, options)) {\n for (const directory of await candidateDirectories(roots.publicRoot, selected)) {\n const material = await loadIdentityMaterial(roots, directory, selected)\n if (material) return material\n }\n }\n\n throw new ToolError(\n 'IDENTITY_NOT_FOUND',\n `no usable authentication material found for identity ${selected}`,\n EXIT_AUTH,\n )\n}\n\nexport async function scanIdentityCandidates(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n options: IdentityRootOptions = {},\n): Promise<IdentityCandidateScan> {\n const candidates: IdentityCandidate[] = []\n const skipped: IdentityCandidateScan['skipped'] = []\n const seen = new Set<string>()\n const roots = identityRootPairs(config, environment, options)\n for (const pair of roots) {\n let directories: string[]\n try {\n directories = await candidateDirectories(pair.publicRoot, '')\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n skipped.push({ source: pair.source, path: pair.publicRoot, reason: 'policy-denied' })\n continue\n }\n throw error\n }\n for (const directory of directories) {\n if (candidates.length >= IDENTITY_CANDIDATE_LIMIT) break\n const documentPath = join(pair.publicRoot, directory, 'did.json')\n try {\n const material = await loadIdentityMaterial(pair, directory)\n if (!material) {\n skipped.push({ source: pair.source, path: documentPath, reason: 'not-usable' })\n continue\n }\n if (seen.has(material.did)) {\n skipped.push({\n source: pair.source,\n identity: material.did,\n path: documentPath,\n reason: 'duplicate',\n })\n continue\n }\n seen.add(material.did)\n candidates.push({ material, source: pair.source, directory })\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n skipped.push({ source: pair.source, path: documentPath, reason: 'policy-denied' })\n continue\n }\n if (error instanceof ToolError && error.code === 'IDENTITY_KEYREF_UNSUPPORTED') {\n skipped.push({\n source: pair.source,\n identity: typeof error.details.identity === 'string'\n ? error.details.identity\n : undefined,\n path: documentPath,\n reason: 'key-reference-unsupported',\n })\n continue\n }\n throw error\n }\n }\n if (candidates.length >= IDENTITY_CANDIDATE_LIMIT) break\n }\n return {\n order: Object.freeze(roots.map((pair) => pair.source)),\n limit: IDENTITY_CANDIDATE_LIMIT,\n candidates,\n skipped,\n }\n}\n\nexport async function identityCandidateView(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n developerModeEnabled = false,\n): Promise<Record<string, unknown>> {\n if (config.identity) {\n try {\n const material = await resolveIdentityMaterial(config.identity, config, environment, {\n includeDeveloper: developerModeEnabled,\n })\n return {\n mode: 'explicit',\n order: [material.did],\n limit: 1,\n candidates: [{\n identity: material.did,\n source: config.sources.identity ?? 'explicit',\n document_path: material.documentPath,\n }],\n skipped: [],\n }\n } catch (error) {\n return {\n mode: 'explicit',\n order: [config.identity],\n limit: 1,\n candidates: [],\n skipped: [{\n identity: config.identity,\n reason: error instanceof ToolError ? error.code : 'unavailable',\n }],\n }\n }\n }\n const scan = await scanIdentityCandidates(config, environment, {\n includeDeveloper: developerModeEnabled,\n })\n return {\n mode: 'search',\n order: scan.order,\n limit: scan.limit,\n candidates: scan.candidates.map((candidate) => ({\n identity: candidate.material.did,\n source: candidate.source,\n document_path: candidate.material.documentPath,\n })),\n skipped: scan.skipped,\n }\n}\n\nasync function loadIdentityMaterial(\n roots: IdentityRootPair,\n directory: string,\n selected?: string,\n): Promise<IdentityMaterial | undefined> {\n const documentPath = join(roots.publicRoot, directory, 'did.json')\n const document = await readIdentityDocument(documentPath)\n if (!document || selected && !identityMatches(document, selected)) return undefined\n const did = typeof document.id === 'string' ? document.id : ''\n const subject = typeof document.name === 'string' && document.name.trim()\n ? document.name.trim()\n : did\n if (!did || !subject) return undefined\n\n const privateKeyPath = join(roots.securityRoot, directory, 'authentication.private.pem')\n try {\n const privateKeyPem = (await getHost().readTextFile(privateKeyPath)).trim()\n if (!privateKeyPem) return undefined\n return {\n did,\n subject,\n issuer: subject,\n principalKind: typeof document.device_type === 'string' ? 'device' : 'user',\n publicRoot: roots.publicRoot,\n securityRoot: roots.securityRoot,\n documentPath,\n privateKeyPath,\n privateKeyPem,\n source: roots.source,\n }\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n\n const keyrefPath = join(roots.securityRoot, directory, 'authentication.keyref.json')\n try {\n await getHost().stat(keyrefPath)\n throw new ToolError(\n 'IDENTITY_KEYREF_UNSUPPORTED',\n 'the selected identity uses a key reference unsupported by this runtime',\n EXIT_AUTH,\n false,\n { identity: did, keyref_path: keyrefPath },\n )\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n return undefined\n}\n\nasync function candidateDirectories(publicRoot: string, identity: string): Promise<string[]> {\n if (identity.startsWith('did:')) {\n try {\n return [namelib.DID.fromStr(identity).toFilename()]\n } catch {\n throw new UsageError('INVALID_IDENTITY', `invalid DID: ${identity}`)\n }\n }\n const directories: string[] = []\n try {\n for (const entry of await getHost().readDir(publicRoot)) {\n if (entry.isDirectory) directories.push(entry.name)\n }\n } catch (error) {\n if (isHostError(error, 'NotFound')) return []\n throw error\n }\n return directories.sort()\n}\n\nasync function readIdentityDocument(path: string): Promise<Record<string, unknown> | null> {\n try {\n const value = JSON.parse(await getHost().readTextFile(path)) as unknown\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null\n } catch (error) {\n if (isHostError(error, 'NotFound') || error instanceof SyntaxError) return null\n throw error\n }\n}\n\nfunction identityMatches(document: Record<string, unknown>, selected: string): boolean {\n if (typeof document.id === 'string' && document.id === selected) return true\n return typeof document.name === 'string' && document.name === selected\n}\n\nexport function defaultBuckyOSRoot(environment: Environment = readEnvironment()): string {\n if (getHost().platform === 'windows') {\n const appData = environment.APPDATA\n return appData ? join(appData, 'buckyos') : 'C:\\\\BuckyOS'\n }\n return '/opt/buckyos'\n}\n\nfunction invalidDeviceIdentity(path: string): ToolError {\n return new ToolError(\n 'INVALID_DEVICE_IDENTITY',\n `current device identity is invalid: ${path}`,\n EXIT_AUTH,\n )\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction deduplicatePairs(pairs: IdentityRootPair[]): IdentityRootPair[] {\n const seen = new Set<string>()\n return pairs.filter((pair) => {\n const key = `${pair.publicRoot}\\0${pair.securityRoot}`\n if (seen.has(key)) return false\n seen.add(key)\n return true\n })\n}\n","import {\n buckyos,\n createAppInstanceId,\n parseSessionTokenClaims,\n VerifyHubClient,\n} from 'buckyos/node'\nimport { type Environment, readEnvironment, type ResolvedConfig } from './config.ts'\nimport {\n type DevelopmentModeDecision,\n type DevelopmentModeReader,\n readTargetDevelopmentMode,\n} from './development_mode.ts'\nimport { EXIT_AUTH, sanitizeMessage, ToolError } from './errors.ts'\nimport {\n IDENTITY_CANDIDATE_LIMIT,\n IDENTITY_REJECTION_CODES,\n type IdentityCandidate,\n type IdentityMaterial,\n resolveIdentityMaterial,\n scanIdentityCandidates,\n} from './identity.ts'\nimport { resolveServiceUrl } from './runtime.ts'\nimport { getHost } from '../runtime/host.ts'\n\ntype AuthTarget =\n | { kind: 'app'; app_instance_id: string }\n | { kind: 'system'; service_id: string }\n\nexport type AuthenticationKind =\n | 'session-token'\n | 'session-token-file'\n | 'environment'\n | 'identity'\n | 'password'\n | 'mock'\n\nexport interface ResolvedPrincipal {\n id: string\n appId: string\n appInstanceId?: string\n authentication: AuthenticationKind\n tokenExpiresAt?: string\n}\n\nexport interface AuthenticatedSession {\n token: string\n principal: ResolvedPrincipal\n claims: Record<string, unknown>\n renewable: boolean\n}\n\nexport interface AuthenticationTransport {\n loginByJwt(url: string, jwt: string, target: AuthTarget, timeoutMs: number): Promise<string>\n loginByPassword(\n url: string,\n username: string,\n password: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string>\n}\n\nexport interface AuthenticationDependencies {\n transport?: AuthenticationTransport\n readPassword?: (prompt: string) => Promise<string>\n readUsername?: (prompt: string) => Promise<string>\n readDevelopmentMode?: DevelopmentModeReader\n now?: () => number\n}\n\nexport interface SessionController {\n readonly config: ResolvedConfig\n connect(): Promise<AuthenticatedSession>\n ensureValid(): Promise<AuthenticatedSession>\n reconnect(): Promise<AuthenticatedSession>\n current(): AuthenticatedSession\n status(): Record<string, unknown>\n}\n\nconst LOGIN_APP_ID = 'buckycli'\nconst LOGIN_TOKEN_TTL_SECONDS = 10 * 60\n\nexport class AuthenticationSession implements SessionController {\n readonly config: ResolvedConfig\n readonly #environment: Environment\n readonly #transport: AuthenticationTransport\n readonly #readPassword: (prompt: string) => Promise<string>\n readonly #readUsername: (prompt: string) => Promise<string>\n readonly #readDevelopmentMode: DevelopmentModeReader\n readonly #now: () => number\n #session?: AuthenticatedSession\n #acceptedIdentity?: IdentityMaterial\n #developmentMode?: DevelopmentModeDecision\n #identityAttempts: Array<{ identity: string; code: string; message: string }> = []\n\n constructor(\n config: ResolvedConfig,\n environment: Environment = readEnvironment(),\n dependencies: AuthenticationDependencies = {},\n ) {\n this.config = config\n this.#environment = environment\n this.#transport = dependencies.transport ?? new SdkAuthenticationTransport()\n this.#readPassword = dependencies.readPassword ?? readSecret\n this.#readUsername = dependencies.readUsername ?? readVisible\n this.#readDevelopmentMode = dependencies.readDevelopmentMode ?? readTargetDevelopmentMode\n this.#now = dependencies.now ?? Date.now\n }\n\n async connect(): Promise<AuthenticatedSession> {\n if (this.#session) return this.#session\n this.#session = await this.#authenticate(false)\n return this.#session\n }\n\n async ensureValid(): Promise<AuthenticatedSession> {\n const session = await this.connect()\n const exp = numberClaim(session.claims.exp)\n const nowSeconds = Math.floor(this.#now() / 1_000)\n if (exp === undefined || exp > nowSeconds + 15) return session\n if (!session.renewable) {\n throw new ToolError(\n 'SESSION_EXPIRED',\n 'the externally supplied session token has expired',\n EXIT_AUTH,\n )\n }\n this.#session = await this.#authenticate(true)\n return this.#session\n }\n\n async reconnect(): Promise<AuthenticatedSession> {\n this.#session = await this.#authenticate(true)\n return this.#session\n }\n\n current(): AuthenticatedSession {\n if (!this.#session) {\n throw new ToolError('AUTH_REQUIRED', 'session is not initialized', EXIT_AUTH)\n }\n return this.#session\n }\n\n status(): Record<string, unknown> {\n const session = this.current()\n const expiresAt = session.principal.tokenExpiresAt\n const exp = numberClaim(session.claims.exp)\n const remainingSeconds = exp === undefined\n ? null\n : Math.max(0, exp - Math.floor(this.#now() / 1_000))\n return {\n authenticated: true,\n principal: session.principal.id,\n appid: session.principal.appId,\n app_instance_id: session.principal.appInstanceId ?? null,\n authentication: session.principal.authentication,\n renewable: session.renewable,\n expires_at: expiresAt ?? null,\n remaining_seconds: remainingSeconds,\n developer_mode: this.#developmentMode?.state ?? null,\n identity_attempts: this.#identityAttempts,\n }\n }\n\n async #authenticate(reconnect: boolean): Promise<AuthenticatedSession> {\n if (this.config.sessionToken) {\n const source = this.config.sources.session_token === 'environment'\n ? 'environment'\n : 'session-token'\n return externalSession(this.config.sessionToken, source, this.#now())\n }\n\n if (this.config.sessionTokenFile) {\n let token: string\n try {\n token = (await getHost().readTextFile(this.config.sessionTokenFile)).trim()\n } catch (error) {\n throw new ToolError(\n 'SESSION_TOKEN_FILE_ERROR',\n `failed to read session token file: ${\n error instanceof Error ? error.message : String(error)\n }`,\n EXIT_AUTH,\n )\n }\n if (!token) {\n throw new ToolError('INVALID_SESSION_TOKEN', 'session token file is empty', EXIT_AUTH)\n }\n return externalSession(token, 'session-token-file', this.#now())\n }\n\n const injected = this.#environment.BUCKYOS_APPCLIENT_SESSION_TOKEN?.trim()\n if (injected) return externalSession(injected, 'environment', this.#now())\n\n if (this.#acceptedIdentity) {\n if (this.#acceptedIdentity.source === 'buckycli-home') {\n await this.#requireDeveloperIdentityAccess()\n }\n return await this.#loginWithIdentity(this.#acceptedIdentity)\n }\n\n if (this.config.identity) {\n const material = await this.#resolveExplicitIdentity(this.config.identity)\n const session = await this.#loginWithIdentity(material)\n this.#acceptedIdentity = material\n return session\n }\n\n this.#identityAttempts = []\n const operations = await scanIdentityCandidates(this.config, this.#environment)\n const operationsSession = await this.#tryIdentityCandidates(operations.candidates)\n if (operationsSession) return operationsSession\n\n const developmentMode = await this.#checkDevelopmentMode()\n if (\n developmentMode.state === 'enabled' &&\n operations.candidates.length < IDENTITY_CANDIDATE_LIMIT\n ) {\n const operationsDids = new Set(\n operations.candidates.map((candidate) => candidate.material.did),\n )\n const developer = await scanIdentityCandidates(this.config, this.#environment, {\n includeOperations: false,\n includeDeveloper: true,\n })\n const remaining = IDENTITY_CANDIDATE_LIMIT - operations.candidates.length\n const candidates = developer.candidates.filter((candidate) =>\n !operationsDids.has(candidate.material.did)\n ).slice(0, remaining)\n const developerSession = await this.#tryIdentityCandidates(candidates)\n if (developerSession) return developerSession\n }\n if (this.#identityAttempts.length > 0) {\n throw new ToolError(\n 'IDENTITY_CANDIDATES_REJECTED',\n `all ${this.#identityAttempts.length} identity candidates were rejected`,\n EXIT_AUTH,\n false,\n { attempts: this.#identityAttempts },\n )\n }\n\n if (this.config.nonInteractive) {\n throw new ToolError(\n 'AUTH_REQUIRED',\n 'no session token or usable identity is available in non-interactive mode',\n EXIT_AUTH,\n )\n }\n const username = this.config.identity?.startsWith('did:')\n ? await this.#readUsername('Username: ')\n : this.config.identity ?? await this.#readUsername('Username: ')\n if (!username.trim()) throw new ToolError('AUTH_REQUIRED', 'username is required', EXIT_AUTH)\n const password = await this.#readPassword(reconnect ? 'Password (reconnect): ' : 'Password: ')\n const token = await this.#transport.loginByPassword(\n resolveServiceUrl(this.config, 'verify-hub'),\n username.trim(),\n password,\n appAuthTarget(username.trim()),\n this.config.timeoutMs,\n )\n return authenticatedSession(token, 'password', true, this.#now())\n }\n\n async #resolveExplicitIdentity(selectedIdentity: string): Promise<IdentityMaterial> {\n if (this.config.implicitDeviceIdentity) {\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment)\n }\n\n try {\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment)\n } catch (error) {\n if (!(error instanceof ToolError) || error.code !== 'IDENTITY_NOT_FOUND') throw error\n }\n\n await this.#requireDeveloperIdentityAccess()\n return await resolveIdentityMaterial(selectedIdentity, this.config, this.#environment, {\n includeOperations: false,\n includeDeveloper: true,\n })\n }\n\n async #tryIdentityCandidates(\n candidates: readonly IdentityCandidate[],\n ): Promise<AuthenticatedSession | undefined> {\n for (const candidate of candidates) {\n try {\n const session = await this.#loginWithIdentity(candidate.material)\n this.#acceptedIdentity = candidate.material\n return session\n } catch (error) {\n if (!isIdentityRejection(error)) throw error\n this.#identityAttempts.push({\n identity: candidate.material.did,\n code: error.code,\n message: sanitizeMessage(error.message),\n })\n }\n }\n return undefined\n }\n\n async #loginWithIdentity(material: IdentityMaterial): Promise<AuthenticatedSession> {\n const loginJwt = await createLoginJwt(\n material.subject,\n material.issuer,\n material.privateKeyPem,\n this.#now(),\n )\n const token = await this.#transport.loginByJwt(\n resolveServiceUrl(this.config, 'verify-hub'),\n loginJwt,\n identityAuthTarget(material.principalKind, material.subject),\n this.config.timeoutMs,\n )\n return authenticatedSession(token, 'identity', true, this.#now())\n }\n\n async #checkDevelopmentMode(): Promise<DevelopmentModeDecision> {\n this.#developmentMode = await this.#readDevelopmentMode(this.config)\n return this.#developmentMode\n }\n\n async #requireDeveloperIdentityAccess(): Promise<void> {\n const decision = await this.#checkDevelopmentMode()\n if (decision.state === 'enabled') return\n this.#acceptedIdentity = undefined\n if (decision.state === 'disabled') {\n throw new ToolError(\n 'DEVELOPER_IDENTITY_DISABLED',\n 'the target Zone has developer mode disabled; local developer identities are unavailable',\n EXIT_AUTH,\n )\n }\n throw new ToolError(\n 'DEVELOPER_MODE_UNAVAILABLE',\n 'the target Zone developer-mode configuration could not be verified',\n EXIT_AUTH,\n true,\n { reason: sanitizeMessage(decision.reason) },\n )\n }\n}\n\nfunction isIdentityRejection(error: unknown): error is ToolError {\n return error instanceof ToolError && IDENTITY_REJECTION_CODES.includes(error.code)\n}\n\nexport class SdkAuthenticationTransport implements AuthenticationTransport {\n async loginByJwt(\n url: string,\n jwt: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string> {\n const client = new buckyos.kRPCClient(url)\n const response = await withLocalTimeout(\n new VerifyHubClient(client).loginByJwt({ jwt, target }),\n timeoutMs,\n )\n if (!response.session_token) throw new Error('verify-hub returned no session token')\n return response.session_token\n }\n\n async loginByPassword(\n url: string,\n username: string,\n password: string,\n target: AuthTarget,\n timeoutMs: number,\n ): Promise<string> {\n const client = new buckyos.kRPCClient(url)\n const verifyHub = new VerifyHubClient(client)\n const nonce = Date.now()\n verifyHub.setSeq(nonce)\n const response = await withLocalTimeout(\n verifyHub.loginByPassword({\n username,\n password: (buckyos.hashPassword as unknown as (\n username: string,\n password: string,\n nonce?: number | null,\n ) => string)(username, password, nonce),\n target,\n login_nonce: nonce,\n }),\n timeoutMs,\n )\n if (!response.session_token) throw new Error('verify-hub returned no session token')\n return response.session_token\n }\n}\n\nfunction identityAuthTarget(\n principalKind: 'user' | 'device',\n subject: string,\n): AuthTarget {\n return principalKind === 'device'\n ? { kind: 'system', service_id: LOGIN_APP_ID }\n : appAuthTarget(subject)\n}\n\nfunction appAuthTarget(ownerUserId: string): AuthTarget {\n return {\n kind: 'app',\n app_instance_id: createAppInstanceId(LOGIN_APP_ID, ownerUserId),\n }\n}\n\nexport function authenticatedSession(\n token: string,\n authentication: AuthenticationKind,\n renewable: boolean,\n nowMs = Date.now(),\n): AuthenticatedSession {\n const claims = parseClaims(token)\n const exp = numberClaim(claims.exp)\n const nowSeconds = Math.floor(nowMs / 1_000)\n if (exp !== undefined && exp <= nowSeconds) {\n throw new ToolError('SESSION_EXPIRED', 'the session token has expired', EXIT_AUTH)\n }\n const id = stringClaim(claims.sub) ?? stringClaim(claims.userid)\n const appId = stringClaim(claims.appid) ?? stringClaim(claims.aud)\n if (!id || !appId) {\n throw new ToolError(\n 'INVALID_SESSION_TOKEN',\n 'session token is missing principal or appid claims',\n EXIT_AUTH,\n )\n }\n const appInstanceId = stringClaim(claims.app_instance_id) ??\n stringClaim((claims.extra as Record<string, unknown> | undefined)?.app_instance_id)\n return {\n token,\n claims,\n renewable,\n principal: {\n id,\n appId,\n appInstanceId,\n authentication,\n tokenExpiresAt: exp === undefined ? undefined : new Date(exp * 1_000).toISOString(),\n },\n }\n}\n\nfunction externalSession(\n token: string,\n authentication: Extract<\n AuthenticationKind,\n 'session-token' | 'session-token-file' | 'environment'\n >,\n nowMs: number,\n): AuthenticatedSession {\n return authenticatedSession(token, authentication, false, nowMs)\n}\n\nfunction parseClaims(token: string): Record<string, unknown> {\n const claims = parseSessionTokenClaims(token)\n if (!claims) {\n throw new ToolError('INVALID_SESSION_TOKEN', 'session token is not a valid JWT', EXIT_AUTH)\n }\n return claims as Record<string, unknown>\n}\n\nasync function createLoginJwt(\n subject: string,\n issuer: string,\n privateKeyPem: string,\n nowMs: number,\n): Promise<string> {\n const now = Math.floor(nowMs / 1_000)\n const header = { alg: 'EdDSA', kid: issuer, typ: 'JWT' }\n const payload = {\n token_type: 'Normal',\n appid: LOGIN_APP_ID,\n jti: crypto.randomUUID(),\n session: now,\n sub: subject,\n userid: subject,\n iss: issuer,\n exp: now + LOGIN_TOKEN_TTL_SECONDS,\n sudo: false,\n extra: {},\n }\n const signingInput = `${base64Url(JSON.stringify(header))}.${base64Url(JSON.stringify(payload))}`\n const keyBytes = pemBytes(privateKeyPem)\n let key: CryptoKey\n try {\n key = await crypto.subtle.importKey(\n 'pkcs8',\n keyBytes.slice().buffer as ArrayBuffer,\n { name: 'Ed25519' },\n false,\n ['sign'],\n )\n } catch {\n throw new ToolError(\n 'INVALID_PRIVATE_KEY',\n 'identity authentication key is not a valid Ed25519 PKCS8 key',\n EXIT_AUTH,\n )\n }\n const signature = await crypto.subtle.sign('Ed25519', key, new TextEncoder().encode(signingInput))\n return `${signingInput}.${base64Url(new Uint8Array(signature))}`\n}\n\nfunction pemBytes(pem: string): Uint8Array {\n const encoded = pem.replace(/-----[^-]+-----/g, '').replaceAll(/\\s/g, '')\n const binary = atob(encoded)\n return Uint8Array.from(binary, (character) => character.charCodeAt(0))\n}\n\nfunction base64Url(value: string | Uint8Array): string {\n const bytes = typeof value === 'string' ? new TextEncoder().encode(value) : value\n let binary = ''\n for (const byte of bytes) binary += String.fromCharCode(byte)\n return btoa(binary).replaceAll('+', '-').replaceAll('/', '_').replaceAll('=', '')\n}\n\nfunction stringClaim(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction numberClaim(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nasync function withLocalTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new ToolError('TIMEOUT', 'authentication timed out', 8, true)),\n timeoutMs,\n )\n })\n try {\n return await Promise.race([promise, timeout])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n}\n\nasync function readVisible(prompt: string): Promise<string> {\n return (await getHost().readLine(prompt))?.trim() ?? ''\n}\n\nasync function readSecret(prompt: string): Promise<string> {\n if (!getHost().inputIsTerminal()) {\n throw new ToolError(\n 'INTERACTIVE_AUTH_UNAVAILABLE',\n 'password input requires a terminal',\n EXIT_AUTH,\n )\n }\n try {\n return await getHost().readSecret(prompt)\n } catch (error) {\n throw new ToolError(\n 'INTERACTIVE_AUTH_UNAVAILABLE',\n error instanceof Error ? error.message : String(error),\n EXIT_AUTH,\n )\n }\n}\n","import type { OutputFormat } from './argv.ts'\nimport type { ToolError } from './errors.ts'\n\nexport interface EnvelopeMeta {\n command: string\n trace_id: string\n duration_ms: number\n}\n\nexport interface SuccessEnvelope {\n schema_version: 1\n ok: true\n data: unknown\n meta: EnvelopeMeta\n}\n\nexport interface ErrorEnvelope {\n schema_version: 1\n ok: false\n error: {\n code: string\n message: string\n retryable: boolean\n details: Record<string, unknown>\n }\n meta: Omit<EnvelopeMeta, 'duration_ms'> & { duration_ms?: number }\n}\n\nexport function successEnvelope(data: unknown, meta: EnvelopeMeta): SuccessEnvelope {\n return { schema_version: 1, ok: true, data, meta }\n}\n\nexport function errorEnvelope(\n error: ToolError,\n meta: Omit<EnvelopeMeta, 'duration_ms'> & { duration_ms?: number },\n): ErrorEnvelope {\n return {\n schema_version: 1,\n ok: false,\n error: {\n code: error.code,\n message: error.message,\n retryable: error.retryable,\n details: error.details,\n },\n meta,\n }\n}\n\nexport function renderSuccess(envelope: SuccessEnvelope, format: OutputFormat): string {\n if (format === 'json' || format === 'jsonl') return JSON.stringify(envelope)\n if (format === 'raw') {\n if (typeof envelope.data !== 'string') throw new Error('raw output requires a string result')\n return envelope.data\n }\n if (format === 'text') return renderText(envelope.data)\n return renderTable(envelope.data)\n}\n\nexport function renderError(envelope: ErrorEnvelope, format: OutputFormat): string {\n if (format === 'json' || format === 'jsonl' || format === 'raw') return JSON.stringify(envelope)\n const retryable = envelope.error.retryable ? ' (retryable)' : ''\n return `${envelope.error.code}${retryable}: ${envelope.error.message}`\n}\n\nfunction renderText(data: unknown): string {\n if (typeof data === 'string') return data\n if (data && typeof data === 'object' && !Array.isArray(data)) {\n const object = data as Record<string, unknown>\n if (typeof object.script === 'string') return object.script\n if (typeof object.text === 'string') return object.text\n }\n return JSON.stringify(data, null, 2)\n}\n\nfunction renderTable(data: unknown): string {\n if (Array.isArray(data)) return renderRows(data)\n if (data && typeof data === 'object') {\n const object = data as Record<string, unknown>\n const arrayEntry = Object.entries(object).find(([, value]) => Array.isArray(value))\n if (arrayEntry) return renderRows(arrayEntry[1] as unknown[])\n const rows = Object.entries(object).map(([key, value]) => ({ key, value: displayValue(value) }))\n return renderRows(rows)\n }\n return String(data ?? '')\n}\n\nfunction renderRows(rows: unknown[]): string {\n if (rows.length === 0) return '(empty)'\n const objects = rows.map((row) =>\n row && typeof row === 'object' && !Array.isArray(row)\n ? row as Record<string, unknown>\n : { value: row }\n )\n const columns = [...new Set(objects.flatMap((row) => Object.keys(row)))]\n const rendered = objects.map((row) => columns.map((column) => displayValue(row[column])))\n const widths = columns.map((column, index) =>\n Math.max(column.length, ...rendered.map((row) => row[index].length))\n )\n const header = columns.map((column, index) => column.padEnd(widths[index])).join(' ')\n const separator = widths.map((width) => '-'.repeat(width)).join(' ')\n const body = rendered.map((row) =>\n row.map((value, index) => value.padEnd(widths[index])).join(' ')\n )\n return [header, separator, ...body].join('\\n')\n}\n\nfunction displayValue(value: unknown): string {\n if (value === null || value === undefined) return ''\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return JSON.stringify(value)\n}\n","import type { CommandDefinition, CommandModule, JsonSchema, RegisteredCommand } from './command.ts'\nimport { optionProperty } from './command.ts'\nimport { UsageError } from './errors.ts'\n\nconst KEBAB_CASE = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/\n\nconst GLOBAL_OPTIONS = [\n { name: 'config-dir', property: 'configDir', type: 'string', scope: 'process' },\n {\n name: 'allow-read',\n property: 'allowRead',\n type: 'string',\n scope: 'process',\n repeatable: true,\n },\n { name: 'profile', property: 'profile', type: 'string', scope: 'session' },\n { name: 'zone', property: 'zone', type: 'string', scope: 'session' },\n { name: 'endpoint', property: 'endpoint', type: 'string', scope: 'session' },\n { name: 'identity', property: 'identity', type: 'string', scope: 'session' },\n {\n name: 'session-token',\n property: 'sessionToken',\n type: 'string',\n scope: 'session',\n secret: true,\n },\n {\n name: 'session-token-file',\n property: 'sessionTokenFile',\n type: 'string',\n scope: 'session',\n secret: true,\n },\n { name: 'cli', property: 'cli', type: 'boolean', scope: 'process' },\n {\n name: 'output',\n property: 'output',\n type: 'string',\n scope: 'command',\n enum: ['json', 'jsonl', 'table', 'text', 'raw'],\n },\n { name: 'input', property: 'input', type: 'string', scope: 'command' },\n { name: 'timeout', property: 'timeout', type: 'duration', scope: 'command' },\n { name: 'trace-id', property: 'traceId', type: 'string', scope: 'command' },\n {\n name: 'idempotency-key',\n property: 'idempotencyKey',\n type: 'string',\n scope: 'command',\n },\n { name: 'wait', property: 'wait', type: 'boolean', scope: 'command' },\n {\n name: 'non-interactive',\n property: 'nonInteractive',\n type: 'boolean',\n scope: 'process',\n },\n { name: 'yes', property: 'yes', type: 'boolean', scope: 'command' },\n { name: 'no-color', property: 'noColor', type: 'boolean', scope: 'process' },\n { name: 'verbose', property: 'verbose', type: 'boolean', scope: 'process' },\n { name: 'help', property: 'help', type: 'boolean', scope: 'process' },\n { name: 'version', property: 'version', type: 'boolean', scope: 'process' },\n]\n\nconst REPL_COMMAND_OPTION_NAMES = new Set([\n 'output',\n 'input',\n 'timeout',\n 'trace-id',\n 'idempotency-key',\n 'wait',\n 'yes',\n])\n\nexport class CommandRegistry {\n #modules = new Map<string, CommandModule>()\n #commands = new Map<string, RegisteredCommand>()\n\n register(module: CommandModule): void {\n if (!KEBAB_CASE.test(module.name)) {\n throw new Error(`invalid module name: ${module.name}`)\n }\n if (this.#modules.has(module.name)) {\n throw new Error(`duplicate module: ${module.name}`)\n }\n for (const definition of module.commands) {\n this.#validateDefinition(module.name, definition)\n const key = `${module.name}.${definition.verb}`\n if (this.#commands.has(key)) throw new Error(`duplicate command: ${key}`)\n this.#commands.set(key, {\n ...definition,\n module: module.name,\n moduleSummary: module.summary,\n })\n }\n this.#modules.set(module.name, module)\n }\n\n get(module: string, verb: string): RegisteredCommand {\n const command = this.#commands.get(`${module}.${verb}`)\n if (!command) {\n if (!this.#modules.has(module)) {\n throw new UsageError('UNKNOWN_MODULE', `unknown module: ${module}`)\n }\n throw new UsageError('UNKNOWN_COMMAND', `unknown command: ${module} ${verb}`)\n }\n return command\n }\n\n modules(): CommandModule[] {\n return [...this.#modules.values()].sort((a, b) => a.name.localeCompare(b.name))\n }\n\n commands(): RegisteredCommand[] {\n return [...this.#commands.values()].sort((a, b) =>\n `${a.module}.${a.verb}`.localeCompare(`${b.module}.${b.verb}`)\n )\n }\n\n describe(module: string, verb: string): Record<string, unknown> {\n const command = this.get(module, verb)\n return {\n schema_version: 1,\n module: command.module,\n verb: command.verb,\n summary: command.summary,\n description: command.description ?? command.summary,\n syntax: this.syntax(command),\n global_options: GLOBAL_OPTIONS,\n repl_command_options: GLOBAL_OPTIONS.filter((option) =>\n REPL_COMMAND_OPTION_NAMES.has(option.name)\n ),\n positionals: command.positionals ?? [],\n options: (command.options ?? []).map((option) => ({\n ...option,\n property: optionProperty(option),\n })),\n input_schema: command.inputSchema,\n output_schema: command.outputSchema,\n result_schema_version: command.resultSchemaVersion,\n access: command.access,\n async_mode: command.asyncMode,\n requires_session: command.requiresSession,\n execution: command.execution ?? (command.requiresSession ? 'service' : 'local'),\n network_access: command.networkAccess ?? command.requiresSession,\n examples: command.examples ?? [],\n }\n }\n\n syntax(command: RegisteredCommand): string {\n const positionals = (command.positionals ?? []).map((position) =>\n position.required === false ? `[${position.name}]` : `<${position.name}>`\n )\n const options = (command.options ?? []).map((option) =>\n option.type === 'boolean'\n ? `[--${option.name}]`\n : `[--${option.name} <${option.property ?? option.name}>]`\n )\n return ['buckyos', command.module, command.verb, ...positionals, ...options].join(' ')\n }\n\n completionCandidates(tokens: string[]): string[] {\n if (tokens.length <= 1) return this.modules().map((module) => module.name)\n const module = this.#modules.get(tokens[0])\n if (!module) return this.modules().map((candidate) => candidate.name)\n if (tokens.length === 2 && !tokens[1].startsWith('--')) {\n return module.commands.map((command) => command.verb).sort()\n }\n const verb = tokens[1]\n const command = this.#commands.get(`${module.name}.${verb}`)\n if (!command) return module.commands.map((candidate) => candidate.verb).sort()\n return [\n ...(command.options ?? []).map((option) => `--${option.name}`),\n '--input',\n '--timeout',\n '--trace-id',\n '--idempotency-key',\n '--output',\n '--wait',\n '--yes',\n '--help',\n ].sort()\n }\n\n #validateDefinition(module: string, definition: CommandDefinition): void {\n if (!KEBAB_CASE.test(definition.verb)) {\n throw new Error(`invalid verb name: ${module} ${definition.verb}`)\n }\n const positionals = definition.positionals ?? []\n const positionalNames = new Set<string>()\n for (const positional of positionals) {\n if (positionalNames.has(positional.name)) {\n throw new Error(`duplicate positional ${positional.name} in ${module}.${definition.verb}`)\n }\n positionalNames.add(positional.name)\n }\n const optionNames = new Set<string>()\n for (const option of definition.options ?? []) {\n if (!KEBAB_CASE.test(option.name) || optionNames.has(option.name)) {\n throw new Error(\n `invalid or duplicate option --${option.name} in ${module}.${definition.verb}`,\n )\n }\n optionNames.add(option.name)\n }\n this.#assertObjectSchema(definition.inputSchema, `${module}.${definition.verb} input`)\n this.#assertObjectSchema(definition.outputSchema, `${module}.${definition.verb} output`)\n }\n\n #assertObjectSchema(schema: JsonSchema, label: string): void {\n if (schema.type !== 'object') throw new Error(`${label} schema must be an object`)\n }\n}\n","import type { RegisteredCommand } from './command.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\nimport { optionProperty } from './command.ts'\nimport { parseShellLine } from './argv.ts'\n\nconst SECRET_WORDS =\n /(?:session[-_]?token|refresh[-_]?token|password|private[-_]?key|sudo[-_]?token)/i\n\nexport class ReplHistory {\n readonly path: string\n readonly limit: number\n #entries: string[] = []\n\n constructor(path: string, limit = 500) {\n this.path = path\n this.limit = limit\n }\n\n async load(): Promise<string[]> {\n try {\n this.#entries = (await getHost().readTextFile(this.path))\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter(Boolean)\n .slice(-this.limit)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n this.#entries = []\n }\n return [...this.#entries]\n }\n\n entries(): string[] {\n return [...this.#entries]\n }\n\n async add(line: string, command?: RegisteredCommand): Promise<void> {\n if (!shouldPersistHistory(line, command)) return\n if (this.#entries.at(-1) !== line) this.#entries.push(line)\n this.#entries = this.#entries.slice(-this.limit)\n const host = getHost()\n await host.mkdir(host.path.dirname(this.path), { recursive: true, mode: 0o700 })\n await host.writeTextFile(this.path, `${this.#entries.join('\\n')}\\n`, { mode: 0o600 })\n if (host.platform !== 'windows') await host.chmod(this.path, 0o600)\n }\n}\n\nexport function shouldPersistHistory(line: string, command?: RegisteredCommand): boolean {\n if (SECRET_WORDS.test(line)) return false\n if (!command) return true\n if (Object.values(command.inputSchema.properties ?? {}).some((schema) => schema.secret)) {\n return false\n }\n let tokens: string[]\n try {\n tokens = parseShellLine(line)\n } catch {\n return false\n }\n const secretOptions = new Set(\n (command.options ?? []).filter((option) => option.secret).flatMap((option) => [\n `--${option.name}`,\n optionProperty(option),\n ]),\n )\n return !tokens.some((token) => secretOptions.has(token.split('=', 1)[0]))\n}\n","import type { CommandRegistry } from './registry.ts'\nimport type { ConfigStore, ResolvedConfig } from './config.ts'\nimport { effectiveConfigView } from './config.ts'\nimport { parseShellLine } from './argv.ts'\nimport { normalizeError } from './errors.ts'\nimport { ReplHistory } from './history.ts'\nimport type { InteractiveSession } from './runtime.ts'\nimport { getHost, type HostLineReader } from '../runtime/host.ts'\n\nexport interface ReplOptions {\n registry: CommandRegistry\n config: ResolvedConfig\n configStore: ConfigStore\n session: InteractiveSession\n execute(tokens: string[], signal: AbortSignal): Promise<void>\n}\n\nexport async function runRepl(options: ReplOptions): Promise<void> {\n const history = new ReplHistory(options.configStore.historyPath())\n const savedHistory = await history.load()\n const completer = (line: string): [string[], string] => {\n const fragment = line.match(/[^\\s]*$/)?.[0] ?? ''\n const prefix = line.slice(0, line.length - fragment.length)\n let tokens: string[]\n try {\n tokens = parseShellLine(prefix)\n } catch {\n tokens = prefix.trim().split(/\\s+/).filter(Boolean)\n }\n tokens.push(fragment)\n const candidates = options.registry.completionCandidates(tokens)\n return [candidates.filter((candidate) => candidate.startsWith(fragment)), fragment]\n }\n let running: AbortController | undefined\n const readline: HostLineReader = getHost().createLineReader({\n history: [...savedHistory].reverse(),\n historySize: history.limit,\n completer,\n onSigint: () => {\n if (running) running.abort()\n else {\n readline.write('^C\\n')\n readline.prompt()\n }\n },\n })\n const prompt = replPrompt(options.config)\n readline.write('BuckyOS interactive session. Use :help for commands and :exit to quit.\\n')\n readline.setPrompt(prompt)\n readline.prompt()\n\n try {\n for await (const rawLine of readline) {\n const line = rawLine.trim()\n if (!line) {\n readline.prompt()\n continue\n }\n if (line.startsWith(':')) {\n const shouldExit = await handleBuiltin(line, options, history)\n if (shouldExit) break\n readline.prompt()\n continue\n }\n\n let tokens: string[]\n try {\n tokens = parseShellLine(line)\n } catch (error) {\n const normalized = normalizeError(error)\n readline.write(`${normalized.code}: ${normalized.message}\\n`)\n readline.prompt()\n continue\n }\n let command\n try {\n if (tokens.length >= 2) command = options.registry.get(tokens[0], tokens[1])\n } catch {\n command = undefined\n }\n await history.add(line, command)\n running = new AbortController()\n try {\n await options.execute(tokens, running.signal)\n } catch (error) {\n const normalized = normalizeError(error)\n readline.write(`${normalized.code}: ${normalized.message}\\n`)\n } finally {\n running = undefined\n }\n readline.prompt()\n }\n } finally {\n readline.close()\n }\n}\n\nasync function handleBuiltin(\n line: string,\n options: ReplOptions,\n history: ReplHistory,\n): Promise<boolean> {\n const command = line.split(/\\s+/, 1)[0]\n switch (command) {\n case ':exit':\n case ':quit':\n return true\n case ':help':\n await getHost().stderr(\n [\n 'Enter: <module> <verb> [primary-selector] [action-options]',\n 'Built-ins: :help :context :session :history :reconnect :exit :quit',\n `Modules: ${options.registry.modules().map((module) => module.name).join(', ')}`,\n '',\n ].join('\\n'),\n )\n break\n case ':context':\n await getHost().stderr(`${JSON.stringify(effectiveConfigView(options.config), null, 2)}\\n`)\n break\n case ':session':\n await getHost().stderr(\n `${JSON.stringify(options.session.authentication.status(), null, 2)}\\n`,\n )\n break\n case ':history':\n await getHost().stderr(\n `${history.entries().map((entry, index) => `${index + 1} ${entry}`).join('\\n')}\\n`,\n )\n break\n case ':reconnect':\n try {\n await options.session.reconnect()\n await getHost().stderr('session reconnected\\n')\n } catch (error) {\n const normalized = normalizeError(error)\n await getHost().stderr(`${normalized.code}: ${normalized.message}\\n`)\n }\n break\n default:\n await getHost().stderr(`unknown REPL command: ${command}\\n`)\n }\n return false\n}\n\nfunction replPrompt(config: ResolvedConfig): string {\n const profile = config.profileName ?? 'default'\n const zone = config.zone ?? (config.endpoint ? new URL(config.endpoint).host : 'unresolved')\n const identity = config.identity ?? 'external-session'\n return `buckyos[${profile}|${zone}|${identity}]> `\n}\n","import type { CommandModule } from '../core/command.ts'\nimport { ToolError } from '../core/errors.ts'\n\nconst EMPTY_INPUT = { type: 'object' as const, properties: {}, additionalProperties: false }\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\n\nexport function createAuthModule(): CommandModule {\n return {\n name: 'auth',\n summary: 'Inspect the current authenticated session',\n commands: [\n {\n verb: 'whoami',\n summary: 'Show the effective principal and application identity',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production auth whoami'],\n handler: (ctx) =>\n Promise.resolve({\n principal: ctx.principal.id,\n appid: ctx.principal.appId,\n app_instance_id: ctx.principal.appInstanceId ?? null,\n authentication: ctx.principal.authentication,\n zone: ctx.connection.zone,\n }),\n },\n {\n verb: 'session-status',\n summary: 'Show the in-memory session state without exposing credentials',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production auth session-status'],\n handler: (ctx) => {\n if (!ctx.session) {\n throw new ToolError('INTERNAL_ERROR', 'authenticated session is unavailable', 9)\n }\n return Promise.resolve(ctx.session.status())\n },\n },\n ],\n }\n}\n","import type { CommandModule } from '../core/command.ts'\nimport type { CommandRegistry } from '../core/registry.ts'\nimport {\n configValueError,\n effectiveConfigView,\n type ProfileConfig,\n type ToolConfig,\n validateProfileName,\n} from '../core/config.ts'\nimport { UsageError } from '../core/errors.ts'\n\nconst EMPTY_INPUT = {\n type: 'object' as const,\n properties: {},\n additionalProperties: false,\n}\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\n\nexport function createCoreModules(registry: CommandRegistry): CommandModule[] {\n return [createCommandModule(registry), createConfigModule(), createCompletionModule(registry)]\n}\n\nfunction createCommandModule(registry: CommandRegistry): CommandModule {\n return {\n name: 'command',\n summary: 'Discover the machine-readable command registry',\n commands: [\n {\n verb: 'list',\n summary: 'List registered modules and commands',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos command list'],\n handler: () =>\n Promise.resolve({\n modules: registry.modules().map((module) => ({\n name: module.name,\n summary: module.summary,\n commands: module.commands.map((command) => ({\n verb: command.verb,\n summary: command.summary,\n })),\n })),\n }),\n },\n {\n verb: 'describe',\n summary: 'Describe one command and its complete schemas',\n positionals: [\n { name: 'target_module', description: 'Module name' },\n { name: 'target_verb', description: 'Verb name' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n target_module: { type: 'string', minLength: 1 },\n target_verb: { type: 'string', minLength: 1 },\n },\n required: ['target_module', 'target_verb'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos command describe system status'],\n handler: (_ctx, input) =>\n Promise.resolve(\n registry.describe(String(input.target_module), String(input.target_verb)),\n ),\n },\n ],\n }\n}\n\nfunction createConfigModule(): CommandModule {\n return {\n name: 'config',\n summary: 'Manage local non-secret tool configuration',\n commands: [\n {\n verb: 'list',\n summary: 'List the global configuration and available profiles',\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos config list'],\n handler: async (ctx) => ({\n config: await ctx.configStore.readConfig(),\n profiles: await ctx.configStore.listProfiles(),\n }),\n },\n {\n verb: 'get',\n summary: 'Read a global or profile configuration value',\n positionals: [{ name: 'key', description: 'Configuration key', required: false }],\n options: [\n {\n name: 'profile-name',\n property: 'profile_name',\n description: 'Read a profile',\n type: 'string',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n profile_name: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: [\n 'buckyos config get output',\n 'buckyos config get zone --profile-name production',\n ],\n handler: async (ctx, input) => {\n const profileName = optionalString(input.profile_name)\n const value = profileName\n ? await ctx.configStore.readProfile(profileName)\n : await ctx.configStore.readConfig()\n if (!value) throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n const key = optionalString(input.key)\n if (!key) return { value }\n if (!Object.hasOwn(value, key)) {\n throw new UsageError('CONFIG_KEY_NOT_FOUND', `configuration key not found: ${key}`)\n }\n return { key, value: (value as unknown as Record<string, unknown>)[key] }\n },\n },\n {\n verb: 'set',\n summary: 'Atomically set a global or profile configuration value',\n positionals: [{ name: 'key', description: 'Configuration key' }],\n options: [\n { name: 'value', description: 'Configuration value', type: 'string', required: true },\n {\n name: 'profile-name',\n property: 'profile_name',\n description: 'Write a profile',\n type: 'string',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string' },\n profile_name: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: [\n 'buckyos config set output --value json',\n 'buckyos config set zone --value corp.example.com --profile-name production',\n ],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const rawValue = String(input.value)\n const profileName = optionalString(input.profile_name)\n if (profileName) {\n validateProfileName(profileName)\n const profile = await ctx.configStore.readProfile(profileName) ?? { schema_version: 1 }\n setProfileValue(profile, key, rawValue)\n await ctx.configStore.writeProfile(profileName, profile)\n return {\n profile: profileName,\n key,\n value: (profile as unknown as Record<string, unknown>)[key],\n }\n }\n const config = await ctx.configStore.readConfig()\n setGlobalValue(config, key, rawValue)\n await ctx.configStore.writeConfig(config)\n return { profile: null, key, value: (config as unknown as Record<string, unknown>)[key] }\n },\n },\n {\n verb: 'use',\n summary: 'Select the default profile',\n positionals: [{ name: 'profile_name', description: 'Profile name' }],\n inputSchema: {\n type: 'object',\n properties: { profile_name: { type: 'string', minLength: 1 } },\n required: ['profile_name'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos config use production'],\n handler: async (ctx, input) => {\n const profileName = String(input.profile_name)\n if (!await ctx.configStore.readProfile(profileName)) {\n throw new UsageError('PROFILE_NOT_FOUND', `profile not found: ${profileName}`)\n }\n const config = await ctx.configStore.readConfig()\n config.default_profile = profileName\n await ctx.configStore.writeConfig(config)\n return { default_profile: profileName }\n },\n },\n {\n verb: 'check',\n summary: 'Validate configuration and show a redacted effective view',\n options: [\n {\n name: 'effective',\n description: 'Include the effective merged configuration',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: { effective: { type: 'boolean' } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos --profile production config check --effective'],\n handler: async (ctx, input) => ({\n valid: true,\n profile_count: (await ctx.configStore.listProfiles()).length,\n ...(input.effective ? { effective: effectiveConfigView(ctx.config) } : {}),\n }),\n },\n ],\n }\n}\n\nfunction createCompletionModule(registry: CommandRegistry): CommandModule {\n return {\n name: 'completion',\n summary: 'Generate shell completion scripts from the command registry',\n commands: [\n {\n verb: 'generate',\n summary: 'Generate completion for bash, zsh, or fish',\n options: [\n {\n name: 'shell',\n description: 'Target shell',\n type: 'string',\n required: true,\n enum: ['bash', 'zsh', 'fish'],\n },\n ],\n inputSchema: {\n type: 'object',\n properties: { shell: { type: 'string', enum: ['bash', 'zsh', 'fish'] } },\n required: ['shell'],\n additionalProperties: false,\n },\n outputSchema: {\n type: 'object',\n properties: { shell: { type: 'string' }, script: { type: 'string' } },\n required: ['shell', 'script'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n examples: ['buckyos --output text completion generate --shell bash'],\n handler: (_ctx, input) => {\n const shell = String(input.shell)\n return Promise.resolve({ shell, script: completionScript(registry, shell) })\n },\n },\n ],\n }\n}\n\nfunction setGlobalValue(config: ToolConfig, key: string, value: string): void {\n if (key === 'default_profile') {\n validateProfileName(value)\n config.default_profile = value\n } else if (key === 'output') {\n config.output = outputValue(value)\n } else {\n throw configValueError(`unsupported global configuration key: ${key}`)\n }\n}\n\nfunction setProfileValue(profile: ProfileConfig, key: string, value: string): void {\n if (key === 'zone' || key === 'endpoint' || key === 'identity') profile[key] = value\n else if (key === 'default_protocol') {\n if (value !== 'http://' && value !== 'https://') {\n throw configValueError('default_protocol must be http:// or https://')\n }\n profile.default_protocol = value\n } else if (key === 'output') profile.output = outputValue(value)\n else throw configValueError(`unsupported profile configuration key: ${key}`)\n}\n\nfunction outputValue(value: string): 'json' | 'jsonl' | 'table' | 'text' | 'raw' {\n if (!['json', 'jsonl', 'table', 'text', 'raw'].includes(value)) {\n throw configValueError(`invalid output format: ${value}`)\n }\n return value as 'json' | 'jsonl' | 'table' | 'text' | 'raw'\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value ? value : undefined\n}\n\nfunction completionScript(registry: CommandRegistry, shell: string): string {\n const modules = registry.modules().map((module) => module.name).join(' ')\n const commands = registry.commands().map((command) => `${command.module}:${command.verb}`).join(\n ' ',\n )\n if (shell === 'fish') {\n return `complete -c buckyos -f\\ncomplete -c buckyos -n '__fish_use_subcommand' -a '${modules}'\\n# ${commands}\\n`\n }\n if (shell === 'zsh') {\n return `#compdef buckyos\\n_arguments '1:module:(${modules})' '*::argument:->args'\\n# ${commands}\\n`\n }\n return `_buckyos_complete() {\\n if [ \"${'${COMP_CWORD}'}\" -eq 1 ]; then\\n COMPREPLY=( $(compgen -W '${modules}' -- \"${'${COMP_WORDS[COMP_CWORD]}'}\") )\\n fi\\n}\\ncomplete -F _buckyos_complete buckyos\\n# ${commands}\\n`\n}\n","import type { CommandContext } from './context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from './errors.ts'\n\nexport function rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nexport async function callService<T = unknown>(\n ctx: CommandContext,\n service: string,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n try {\n return await ctx.clients.call<T>(service, method, params, rpcOptions(ctx))\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n const stable = message.match(/\\b((?:TASK|AUDIT|DIAGNOSTIC|LOG)_[A-Z0-9_]+):/)\n if (stable) throw new ToolError(stable[1], message)\n throw error\n }\n}\n\nexport function expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, EXIT_INTERNAL)\n }\n return value as Record<string, unknown>\n}\n\nexport function expectString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be a string`, EXIT_INTERNAL)\n }\n return value\n}\n\nexport function inputString(input: Record<string, unknown>, key: string): string | undefined {\n const value = input[key]\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nexport function requiredInputString(input: Record<string, unknown>, key: string): string {\n const value = inputString(input, key)\n if (!value) throw new UsageError('INVALID_ARGUMENT', `${key} is required`)\n return value\n}\n\nexport function parseTimestamp(value: unknown, key: string): number | undefined {\n if (value === undefined) return undefined\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) return value\n if (typeof value !== 'string' || !value.trim()) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339 or Unix milliseconds`)\n }\n if (/^\\d+$/.test(value)) {\n const milliseconds = Number(value)\n if (Number.isSafeInteger(milliseconds)) return milliseconds\n }\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds)) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339 or Unix milliseconds`)\n }\n return milliseconds\n}\n\nexport function splitServices(value: unknown): string[] {\n const items = Array.isArray(value) ? value : typeof value === 'string' ? value.split(',') : []\n return [...new Set(items.map((item) => String(item).trim()).filter(Boolean))]\n}\n","import type { CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { callService, expectObject } from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst EMPTY_INPUT: JsonSchema = { type: 'object', properties: {}, additionalProperties: false }\nconst BUCKYOS_INFO: JsonSchema = {\n type: 'object',\n properties: {\n version: { type: 'string' },\n build_version: { type: 'string' },\n release_channel: { type: 'string' },\n target: { type: 'string' },\n },\n additionalProperties: true,\n}\n\nexport function createSystemModule(): CommandModule {\n return {\n name: 'system',\n summary: 'Inspect BuckyOS Zone health and version state',\n commands: [\n {\n verb: 'status',\n summary: 'Get host resource state, configured service keys, and the BuckyOS version',\n description:\n 'state and warnings come from CPU/memory/disk/swap of the Control Panel host; services lists the keys under services/ with status unknown (not a per-service health check); buckyos is the system.buckyos_info.get record.',\n inputSchema: EMPTY_INPUT,\n outputSchema: {\n type: 'object',\n properties: { buckyos: BUCKYOS_INFO },\n required: ['buckyos'],\n additionalProperties: true,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --profile production system status'],\n handler: async (ctx) => {\n const [status, buckyos] = await Promise.all([\n callService(ctx, CONTROL_PANEL, 'system.status', {}),\n buckyosInfo(ctx),\n ])\n return { ...expectObject(status, 'system.status'), buckyos }\n },\n },\n {\n verb: 'info',\n summary: 'Get the installed BuckyOS version, build version, and release channel',\n description:\n 'build_version is build<YYMMDD>.<branch>.<commit12>[.dirty]; any authenticated identity may read it.',\n inputSchema: EMPTY_INPUT,\n outputSchema: BUCKYOS_INFO,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system info'],\n handler: async (ctx) => await buckyosInfo(ctx),\n },\n ],\n }\n}\n\nasync function buckyosInfo(ctx: CommandContext): Promise<Record<string, unknown>> {\n return expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.buckyos_info.get', {}),\n 'system.buckyos_info.get',\n )\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst SERVICE_NAME = 'system_config'\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: false }\nconst KEY_INPUT: JsonSchema = {\n type: 'object',\n properties: { key: { type: 'string', minLength: 1 } },\n required: ['key'],\n additionalProperties: false,\n}\n\nexport function createSystemConfigModule(): CommandModule {\n return {\n name: 'system-config',\n summary: 'Read and modify the Zone system-config key-value store',\n commands: [\n {\n verb: 'get',\n summary: 'Get one system-config value',\n positionals: [{ name: 'key', description: 'System-config key' }],\n inputSchema: KEY_INPUT,\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n value: { type: 'string' },\n version: { type: 'integer' },\n text: { type: 'string' },\n },\n required: ['key', 'value', 'version', 'text'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos --profile production system-config get boot/config',\n 'buckyos --output text system-config get services/example/config',\n ],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const result = await callSystemConfig<unknown>(ctx, 'sys_config_get', { key })\n if (result === null) {\n throw new ToolError(\n 'RESOURCE_NOT_FOUND',\n `system-config key not found: ${key}`,\n )\n }\n if (!isConfigValue(result)) invalidResponse('sys_config_get')\n return { key, value: result.value, version: result.version, text: result.value }\n },\n },\n {\n verb: 'list',\n summary: 'List direct child keys under a system-config key',\n positionals: [\n { name: 'key', description: 'Parent key; omit to list the root', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { key: { type: 'string' } },\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n items: { type: 'array', items: { type: 'string' } },\n },\n required: ['key', 'items'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos system-config list',\n 'buckyos system-config list services',\n ],\n handler: async (ctx, input) => {\n const key = typeof input.key === 'string' ? input.key : ''\n const result = await callSystemConfig<unknown>(ctx, 'sys_config_list', { key })\n if (!Array.isArray(result) || !result.every((item) => typeof item === 'string')) {\n invalidResponse('sys_config_list')\n }\n return { key, items: result as string[] }\n },\n },\n setCommand(),\n setFileCommand(),\n mutationCommand({\n verb: 'append',\n summary: 'Append text to an existing system-config value',\n method: 'sys_config_append',\n valueProperty: 'append_value',\n resultProperty: 'appended',\n }),\n ],\n }\n}\n\nfunction setCommand(): CommandDefinition {\n return {\n verb: 'set',\n summary: 'Set one system-config value',\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n { name: 'value', description: 'Value to store', type: 'string', required: true },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: { key: { type: 'string' }, updated: { type: 'boolean' } },\n required: ['key', 'updated'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system-config set services/example/config --value enabled'],\n handler: async (ctx, input) => {\n const key = String(input.key)\n await callSystemConfig(ctx, 'sys_config_set', { key, value: String(input.value) })\n return { key, updated: true }\n },\n }\n}\n\nfunction setFileCommand(): CommandDefinition {\n return {\n verb: 'set-file',\n summary: 'Set one system-config value from a file',\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n {\n name: 'file',\n description: 'File whose content will be stored',\n type: 'string',\n required: true,\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n file: { type: 'string', minLength: 1 },\n },\n required: ['key', 'file'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: { key: { type: 'string' }, updated: { type: 'boolean' } },\n required: ['key', 'updated'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos system-config set-file services/example/config --file ./config.json'],\n handler: async (ctx, input) => {\n const key = String(input.key)\n const value = await readValueFile(String(input.file))\n if (!value) throw new UsageError('INVALID_ARGUMENT', 'system-config value must not be empty')\n await callSystemConfig(ctx, 'sys_config_set', { key, value })\n return { key, updated: true }\n },\n }\n}\n\nfunction mutationCommand(options: {\n verb: string\n summary: string\n method: string\n valueProperty: string\n resultProperty: string\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n positionals: [{ name: 'key', description: 'System-config key' }],\n options: [\n { name: 'value', description: 'Value to append', type: 'string', required: true },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n key: { type: 'string', minLength: 1 },\n value: { type: 'string', minLength: 1 },\n },\n required: ['key', 'value'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n key: { type: 'string' },\n [options.resultProperty]: { type: 'boolean' },\n },\n required: ['key', options.resultProperty],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [`buckyos system-config ${options.verb} system/rbac/policy --value 'p,...'`],\n handler: async (ctx, input) => {\n const key = String(input.key)\n await callSystemConfig(ctx, options.method, {\n key,\n [options.valueProperty]: String(input.value),\n })\n return { key, [options.resultProperty]: true }\n },\n }\n}\n\nasync function callSystemConfig<T = unknown>(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n return await ctx.clients.call<T>(SERVICE_NAME, method, params, {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n })\n}\n\nasync function readValueFile(path: string): Promise<string> {\n try {\n return await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError(\n 'INPUT_READ_FAILED',\n `failed to read value file: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n}\n\nfunction isConfigValue(value: unknown): value is { value: string; version: number } {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false\n const object = value as Record<string, unknown>\n return typeof object.value === 'string' && Number.isSafeInteger(object.version) &&\n Number(object.version) >= 0\n}\n\nfunction invalidResponse(method: string): never {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n `system-config returned an invalid response for ${method}`,\n EXIT_INTERNAL,\n )\n}\n","import { ToolError, UsageError } from '../core/errors.ts'\nimport {\n getHost,\n type HostDirEntry,\n type HostFile,\n type HostFileInfo,\n isHostError,\n} from '../runtime/host.ts'\n\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst relative = (from: string, to: string) => getHost().path.relative(from, to)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst BLOCK_SIZE = 512\nconst ZIP_LOCAL_SIGNATURE = 0x04034b50\nconst ZIP_CENTRAL_SIGNATURE = 0x02014b50\nconst ZIP_EOCD_SIGNATURE = 0x06054b50\nconst ZIP64_EOCD_SIGNATURE = 0x06064b50\nconst ZIP64_LOCATOR_SIGNATURE = 0x07064b50\nconst MAX_CENTRAL_DIRECTORY = 64 * 1024 * 1024\nexport const MAX_PIKG_ENTRIES = 4096\n\nconst CRC_TABLE = new Uint32Array(256)\nfor (let index = 0; index < CRC_TABLE.length; index++) {\n let value = index\n for (let bit = 0; bit < 8; bit++) value = (value >>> 1) ^ (value & 1 ? 0xedb88320 : 0)\n CRC_TABLE[index] = value >>> 0\n}\n\nexport interface FileDigest {\n size: number\n sha256: string\n crc32: number\n}\n\nexport interface ZipEntry {\n name: string\n compressedSize: number\n size: number\n crc32: number\n compression: number\n flags: number\n localOffset: number\n dataOffset: number\n externalAttributes: number\n isDirectory: boolean\n}\n\nexport interface OpenZip {\n path: string\n size: number\n entries: ZipEntry[]\n byName: Map<string, ZipEntry>\n}\n\ninterface TarSource {\n archivePath: string\n physicalPath: string\n kind: 'file' | 'directory'\n size: number\n executable: boolean\n identity: string\n contentDigest?: string\n}\n\ninterface ZipWriteSource {\n name: string\n bytes?: Uint8Array\n path?: string\n}\n\nexport async function digestFile(path: string): Promise<FileDigest> {\n const file = await getHost().open(path, { read: true })\n const sha = getHost().createHash('sha256')\n let crc = 0xffffffff\n let size = 0\n try {\n const buffer = new Uint8Array(256 * 1024)\n while (true) {\n const read = await file.read(buffer)\n if (read === null) break\n const chunk = buffer.subarray(0, read)\n sha.update(chunk)\n crc = updateCrc32(crc, chunk)\n size += read\n if (!Number.isSafeInteger(size)) throw new UsageError('FILE_TOO_LARGE', 'file is too large')\n }\n } finally {\n await file.close()\n }\n return { size, sha256: sha.digestHex(), crc32: (crc ^ 0xffffffff) >>> 0 }\n}\n\nexport function sha256Bytes(bytes: Uint8Array): string {\n const sha = getHost().createHash('sha256')\n sha.update(bytes)\n return sha.digestHex()\n}\n\nexport async function createDeterministicTarGz(\n sourceDir: string,\n destination: string,\n): Promise<void> {\n const root = await getHost().realPath(sourceDir)\n const before = await collectTarSources(root)\n const tarPath = `${destination}.tar-${crypto.randomUUID()}`\n const tar = await getHost().open(tarPath, { createNew: true, write: true, mode: 0o600 })\n try {\n for (const source of before) {\n const header = tarHeader(source)\n await writeAll(tar, header)\n if (source.kind === 'file') {\n await copyFileToWriter(source.physicalPath, tar)\n const padding = (BLOCK_SIZE - source.size % BLOCK_SIZE) % BLOCK_SIZE\n if (padding) await writeAll(tar, new Uint8Array(padding))\n }\n }\n await writeAll(tar, new Uint8Array(BLOCK_SIZE * 2))\n await tar.sync()\n } finally {\n await tar.close()\n }\n\n try {\n const after = await collectTarSources(root)\n if (JSON.stringify(before.map(sourceIdentity)) !== JSON.stringify(after.map(sourceIdentity))) {\n throw new ToolError('SOURCE_CHANGED', 'subpackage source changed while it was archived')\n }\n await gzipFile(tarPath, destination)\n } finally {\n await removeIfExists(tarPath)\n }\n}\n\nexport async function gzipFile(source: string, destination: string): Promise<void> {\n await getHost().gzipFile(source, destination)\n}\n\nexport interface TarFileEntry {\n path: string\n executable: boolean\n bytes: Uint8Array\n}\n\nexport async function readTarGz(bytes: Uint8Array, limit: number): Promise<TarFileEntry[]> {\n const tar = await gunzipBytes(bytes, limit)\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const text = (offset: number, length: number) =>\n decoder.decode(tar.subarray(offset, offset + length)).replace(/\\0.*$/s, '')\n const files: TarFileEntry[] = []\n const seen = new Set<string>()\n let offset = 0\n while (\n offset + BLOCK_SIZE <= tar.length && tar.subarray(offset, offset + BLOCK_SIZE).some(Boolean)\n ) {\n let raw: string\n let size: number\n let mode: number\n try {\n const prefix = text(offset + 257, 6) === 'ustar' ? text(offset + 345, 155) : ''\n raw = prefix ? `${prefix}/${text(offset, 100)}` : text(offset, 100)\n size = Number.parseInt(text(offset + 124, 12).trim() || '0', 8)\n mode = Number.parseInt(text(offset + 100, 8).trim() || '0', 8)\n } catch {\n throw invalidZip('payload', 'tar header is not valid UTF-8')\n }\n const type = String.fromCharCode(tar[offset + 156] || 0x30)\n const path = raw.replace(/^(?:\\.\\/)+/, '').replace(/\\/$/, '')\n const start = offset + BLOCK_SIZE\n if (!Number.isSafeInteger(size) || size < 0 || start + size > tar.length) {\n throw invalidZip('payload', `tar entry is truncated: ${raw}`)\n }\n offset = start + Math.ceil(size / BLOCK_SIZE) * BLOCK_SIZE\n if (type === '5' && (path === '' || path === '.')) continue\n if (\n !path || path.startsWith('/') || /^[A-Za-z]:/.test(path) || path.includes('\\\\') ||\n path.split('/').some((segment) => !segment || segment === '.' || segment === '..')\n ) {\n throw invalidZip('payload', `unsafe tar entry path: ${JSON.stringify(raw)}`)\n }\n if (type === '5') continue\n if (type !== '0') {\n throw invalidZip('payload', `tar entry is not a regular file or directory: ${path}`)\n }\n if (seen.has(path)) throw invalidZip('payload', `duplicate tar entry: ${path}`)\n seen.add(path)\n files.push({ path, executable: (mode & 0o111) !== 0, bytes: tar.slice(start, start + size) })\n }\n return files\n}\n\nasync function gunzipBytes(bytes: Uint8Array, limit: number): Promise<Uint8Array> {\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(bytes)\n controller.close()\n },\n }).pipeThrough(\n new DecompressionStream('gzip') as unknown as ReadableWritablePair<Uint8Array, Uint8Array>,\n )\n const chunks: Uint8Array[] = []\n let size = 0\n try {\n for await (const chunk of stream) {\n size += chunk.length\n if (size > limit) throw invalidZip('limits', 'payload expands beyond the size limit')\n chunks.push(chunk)\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', 'payload is not a valid gzip stream')\n }\n const result = new Uint8Array(size)\n let position = 0\n for (const chunk of chunks) {\n result.set(chunk, position)\n position += chunk.length\n }\n return result\n}\n\nexport async function writeStoredZip(\n destination: string,\n sources: ZipWriteSource[],\n): Promise<void> {\n if (sources.length > MAX_PIKG_ENTRIES) {\n throw new UsageError('TOO_MANY_ENTRIES', 'PIKG contains too many entries')\n }\n const names = new Set<string>()\n const prepared = [] as Array<\n ZipWriteSource & { nameBytes: Uint8Array; digest: FileDigest; offset: number; zip64: boolean }\n >\n for (const source of sources) {\n validateZipEntryName(source.name)\n if (names.has(source.name)) throw invalidZip('structure', `duplicate entry: ${source.name}`)\n names.add(source.name)\n if ((source.bytes === undefined) === (source.path === undefined)) {\n throw new Error(`zip source ${source.name} must provide exactly one body`)\n }\n const digest = source.bytes\n ? {\n size: source.bytes.byteLength,\n sha256: sha256Bytes(source.bytes),\n crc32: crc32(source.bytes),\n }\n : await digestFile(source.path!)\n prepared.push({\n ...source,\n nameBytes: new TextEncoder().encode(source.name),\n digest,\n offset: 0,\n zip64: digest.size > 0xffffffff,\n })\n }\n\n await getHost().mkdir(dirname(destination), { recursive: true })\n const output = await getHost().open(destination, { createNew: true, write: true, mode: 0o600 })\n let offset = 0\n const centralRecords: Uint8Array[] = []\n try {\n for (const source of prepared) {\n source.offset = offset\n source.zip64 ||= offset > 0xffffffff\n const localExtra = source.zip64 ? zip64Extra([source.digest.size, source.digest.size]) : EMPTY\n const local = new Uint8Array(30 + source.nameBytes.length + localExtra.length)\n const view = new DataView(local.buffer)\n view.setUint32(0, ZIP_LOCAL_SIGNATURE, true)\n view.setUint16(4, source.zip64 ? 45 : 20, true)\n view.setUint16(6, 0x0800, true)\n view.setUint16(8, 0, true)\n view.setUint32(14, source.digest.crc32, true)\n view.setUint32(18, source.zip64 ? 0xffffffff : source.digest.size, true)\n view.setUint32(22, source.zip64 ? 0xffffffff : source.digest.size, true)\n view.setUint16(26, source.nameBytes.length, true)\n view.setUint16(28, localExtra.length, true)\n local.set(source.nameBytes, 30)\n local.set(localExtra, 30 + source.nameBytes.length)\n await writeAll(output, local)\n offset += local.length\n if (source.bytes) {\n await writeAll(output, source.bytes)\n } else {\n await copyFileToWriter(source.path!, output)\n }\n offset += source.digest.size\n\n const centralExtra = source.zip64\n ? zip64Extra([source.digest.size, source.digest.size, source.offset])\n : EMPTY\n const central = new Uint8Array(46 + source.nameBytes.length + centralExtra.length)\n const centralView = new DataView(central.buffer)\n centralView.setUint32(0, ZIP_CENTRAL_SIGNATURE, true)\n centralView.setUint16(4, (3 << 8) | 45, true)\n centralView.setUint16(6, source.zip64 ? 45 : 20, true)\n centralView.setUint16(8, 0x0800, true)\n centralView.setUint16(10, 0, true)\n centralView.setUint32(16, source.digest.crc32, true)\n centralView.setUint32(20, source.zip64 ? 0xffffffff : source.digest.size, true)\n centralView.setUint32(24, source.zip64 ? 0xffffffff : source.digest.size, true)\n centralView.setUint16(28, source.nameBytes.length, true)\n centralView.setUint16(30, centralExtra.length, true)\n centralView.setUint32(38, 0o100644 << 16, true)\n centralView.setUint32(42, source.zip64 ? 0xffffffff : source.offset, true)\n central.set(source.nameBytes, 46)\n central.set(centralExtra, 46 + source.nameBytes.length)\n centralRecords.push(central)\n }\n\n const centralOffset = offset\n for (const record of centralRecords) {\n await writeAll(output, record)\n offset += record.length\n }\n const centralSize = offset - centralOffset\n const needsZip64 = prepared.some((source) => source.zip64) || centralOffset > 0xffffffff ||\n centralSize > 0xffffffff\n if (needsZip64) {\n const zip64Offset = offset\n const eocd64 = new Uint8Array(56)\n const view64 = new DataView(eocd64.buffer)\n view64.setUint32(0, ZIP64_EOCD_SIGNATURE, true)\n setUint64(view64, 4, 44)\n view64.setUint16(12, (3 << 8) | 45, true)\n view64.setUint16(14, 45, true)\n setUint64(view64, 24, prepared.length)\n setUint64(view64, 32, prepared.length)\n setUint64(view64, 40, centralSize)\n setUint64(view64, 48, centralOffset)\n await writeAll(output, eocd64)\n offset += eocd64.length\n const locator = new Uint8Array(20)\n const locatorView = new DataView(locator.buffer)\n locatorView.setUint32(0, ZIP64_LOCATOR_SIGNATURE, true)\n setUint64(locatorView, 8, zip64Offset)\n locatorView.setUint32(16, 1, true)\n await writeAll(output, locator)\n offset += locator.length\n }\n const eocd = new Uint8Array(22)\n const view = new DataView(eocd.buffer)\n view.setUint32(0, ZIP_EOCD_SIGNATURE, true)\n view.setUint16(8, needsZip64 ? 0xffff : prepared.length, true)\n view.setUint16(10, needsZip64 ? 0xffff : prepared.length, true)\n view.setUint32(12, needsZip64 ? 0xffffffff : centralSize, true)\n view.setUint32(16, needsZip64 ? 0xffffffff : centralOffset, true)\n await writeAll(output, eocd)\n await output.sync()\n } finally {\n await output.close()\n }\n}\n\nexport async function openZip(path: string): Promise<OpenZip> {\n const stat = await getHost().stat(path)\n if (!stat.isFile || stat.size < 22) throw invalidZip('container', 'PIKG is not a ZIP file')\n const file = await getHost().open(path, { read: true })\n try {\n const magic = await readAt(file, 0, 4)\n if (\n new DataView(magic.buffer, magic.byteOffset, magic.byteLength).getUint32(0, true) !==\n ZIP_LOCAL_SIGNATURE\n ) {\n throw invalidZip('container', 'PIKG magic mismatch')\n }\n const tailLength = Math.min(stat.size, 22 + 65535)\n const tail = await readAt(file, stat.size - tailLength, tailLength)\n const eocdPosition = findLastSignature(tail, ZIP_EOCD_SIGNATURE)\n if (eocdPosition < 0 || eocdPosition + 22 > tail.length) {\n throw invalidZip('container', 'ZIP end-of-central-directory record is missing')\n }\n const eocd = new DataView(\n tail.buffer,\n tail.byteOffset + eocdPosition,\n tail.length - eocdPosition,\n )\n const commentLength = eocd.getUint16(20, true)\n if (eocdPosition + 22 + commentLength !== tail.length) {\n throw invalidZip('container', 'ZIP has trailing data or a truncated comment')\n }\n if (eocd.getUint16(4, true) !== 0 || eocd.getUint16(6, true) !== 0) {\n throw invalidZip('container', 'multi-disk ZIP files are not supported')\n }\n let count = eocd.getUint16(10, true)\n if (eocd.getUint16(8, true) !== count) {\n throw invalidZip('container', 'ZIP entry counts disagree')\n }\n let centralSize = eocd.getUint32(12, true)\n let centralOffset = eocd.getUint32(16, true)\n if (count === 0xffff || centralSize === 0xffffffff || centralOffset === 0xffffffff) {\n const eocdAbsolute = stat.size - tailLength + eocdPosition\n if (eocdAbsolute < 20) throw invalidZip('container', 'ZIP64 locator is missing')\n const locatorBytes = await readAt(file, eocdAbsolute - 20, 20)\n const locator = new DataView(locatorBytes.buffer, locatorBytes.byteOffset, 20)\n if (locator.getUint32(0, true) !== ZIP64_LOCATOR_SIGNATURE) {\n throw invalidZip('container', 'ZIP64 locator signature mismatch')\n }\n if (locator.getUint32(4, true) !== 0 || locator.getUint32(16, true) !== 1) {\n throw invalidZip('container', 'multi-disk ZIP64 files are not supported')\n }\n const recordOffset = uint64(locator, 8)\n const recordBytes = await readAt(file, recordOffset, 56)\n const record = new DataView(recordBytes.buffer, recordBytes.byteOffset, 56)\n if (record.getUint32(0, true) !== ZIP64_EOCD_SIGNATURE) {\n throw invalidZip('container', 'ZIP64 end record signature mismatch')\n }\n if (record.getUint32(16, true) !== 0 || record.getUint32(20, true) !== 0) {\n throw invalidZip('container', 'multi-disk ZIP64 files are not supported')\n }\n if (uint64(record, 24) !== uint64(record, 32)) {\n throw invalidZip('container', 'ZIP64 entry counts disagree')\n }\n count = uint64(record, 32)\n centralSize = uint64(record, 40)\n centralOffset = uint64(record, 48)\n }\n if (count > MAX_PIKG_ENTRIES) throw invalidZip('structure', 'PIKG has too many entries')\n if (centralSize > MAX_CENTRAL_DIRECTORY) {\n throw invalidZip('structure', 'PIKG central directory exceeds the size limit')\n }\n if (centralOffset + centralSize > stat.size) {\n throw invalidZip('container', 'ZIP central directory is out of bounds')\n }\n const central = await readAt(file, centralOffset, centralSize)\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const entries: ZipEntry[] = []\n const byName = new Map<string, ZipEntry>()\n const fileNames = new Set<string>()\n const directories = new Set<string>()\n let position = 0\n for (let index = 0; index < count; index++) {\n if (position + 46 > central.length || u32(central, position) !== ZIP_CENTRAL_SIGNATURE) {\n throw invalidZip('structure', `central directory entry #${index} is truncated`)\n }\n const flags = u16(central, position + 8)\n const compression = u16(central, position + 10)\n const crc = u32(central, position + 16)\n let compressedSize = u32(central, position + 20)\n let size = u32(central, position + 24)\n const nameLength = u16(central, position + 28)\n const extraLength = u16(central, position + 30)\n const commentLength = u16(central, position + 32)\n const externalAttributes = u32(central, position + 38)\n let localOffset = u32(central, position + 42)\n const end = position + 46 + nameLength + extraLength + commentLength\n if (end > central.length) throw invalidZip('structure', 'central directory is truncated')\n let name: string\n try {\n name = decoder.decode(central.subarray(position + 46, position + 46 + nameLength))\n } catch {\n throw invalidZip('structure', `entry #${index} name is not UTF-8`)\n }\n validateZipEntryName(name)\n if (byName.has(name)) throw invalidZip('structure', `duplicate entry: ${name}`)\n if (flags & 0x0001) throw invalidZip('structure', `encrypted entry is not allowed: ${name}`)\n if (![0, 8].includes(compression)) {\n throw invalidZip('structure', `unsupported compression method for ${name}`)\n }\n const extra = central.subarray(\n position + 46 + nameLength,\n position + 46 + nameLength + extraLength,\n )\n if (size === 0xffffffff || compressedSize === 0xffffffff || localOffset === 0xffffffff) {\n const values = parseZip64Extra(extra)\n let valueIndex = 0\n if (size === 0xffffffff) size = requiredZip64(values, valueIndex++, name)\n if (compressedSize === 0xffffffff) {\n compressedSize = requiredZip64(values, valueIndex++, name)\n }\n if (localOffset === 0xffffffff) localOffset = requiredZip64(values, valueIndex++, name)\n }\n const mode = (externalAttributes >>> 16) & 0xffff\n if ((mode & 0xf000) === 0xa000) {\n throw invalidZip('structure', `symlink entry is not allowed: ${name}`)\n }\n const isDirectory = name.endsWith('/')\n const normalized = name.replace(/\\/$/, '')\n if (isDirectory) directories.add(normalized)\n else fileNames.add(name)\n const entry: ZipEntry = {\n name,\n compressedSize,\n size,\n crc32: crc,\n compression,\n flags,\n localOffset,\n dataOffset: 0,\n externalAttributes,\n isDirectory,\n }\n entries.push(entry)\n byName.set(name, entry)\n position = end\n }\n if (position !== central.length) {\n throw invalidZip('structure', 'central directory size mismatch')\n }\n for (const fileName of fileNames) {\n const parts = fileName.split('/')\n let prefix = ''\n for (const part of parts.slice(0, -1)) {\n prefix = prefix ? `${prefix}/${part}` : part\n directories.add(prefix)\n }\n }\n const conflict = [...fileNames].find((name) => directories.has(name))\n if (conflict) throw invalidZip('structure', `path is both file and directory: ${conflict}`)\n\n const intervals: Array<[number, number, string]> = []\n for (const entry of entries) {\n const local = await readAt(file, entry.localOffset, 30)\n if (u32(local, 0) !== ZIP_LOCAL_SIGNATURE) {\n throw invalidZip('structure', `local header is missing for ${entry.name}`)\n }\n const localFlags = u16(local, 6)\n const localCompression = u16(local, 8)\n const localNameLength = u16(local, 26)\n const localExtraLength = u16(local, 28)\n if (localFlags !== entry.flags || localCompression !== entry.compression) {\n throw invalidZip('structure', `local header disagrees for ${entry.name}`)\n }\n const localName = await readAt(file, entry.localOffset + 30, localNameLength)\n let decodedLocalName: string\n try {\n decodedLocalName = decoder.decode(localName)\n } catch {\n throw invalidZip('structure', `local entry name is not UTF-8: ${entry.name}`)\n }\n if (decodedLocalName !== entry.name) {\n throw invalidZip('structure', `local entry name disagrees for ${entry.name}`)\n }\n entry.dataOffset = entry.localOffset + 30 + localNameLength + localExtraLength\n const end = entry.dataOffset + entry.compressedSize\n if (end > centralOffset) {\n throw invalidZip('structure', `entry data is out of bounds: ${entry.name}`)\n }\n intervals.push([entry.localOffset, end, entry.name])\n }\n intervals.sort((left, right) => left[0] - right[0])\n for (let index = 1; index < intervals.length; index++) {\n if (intervals[index][0] < intervals[index - 1][1]) {\n throw invalidZip('structure', `overlapping ZIP entries: ${intervals[index][2]}`)\n }\n }\n return { path: resolve(path), size: stat.size, entries, byName }\n } finally {\n await file.close()\n }\n}\n\nexport async function readZipEntry(\n archive: OpenZip,\n entry: ZipEntry,\n limit: number,\n): Promise<Uint8Array> {\n if (entry.size > limit) throw invalidZip('limits', `entry exceeds size limit: ${entry.name}`)\n const chunks: Uint8Array[] = []\n let size = 0\n const verification = createEntryVerification(entry)\n try {\n for await (const chunk of zipEntryStream(archive.path, entry)) {\n size += chunk.byteLength\n if (size > limit || size > entry.size) {\n throw invalidZip('limits', `entry expands beyond its declared size: ${entry.name}`)\n }\n verification.update(chunk)\n chunks.push(chunk.slice())\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', `failed to read entry ${entry.name}`)\n }\n verification.finish(size)\n const result = new Uint8Array(size)\n let offset = 0\n for (const chunk of chunks) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n return result\n}\n\nexport async function verifyZipEntry(\n archive: OpenZip,\n entry: ZipEntry,\n expectedSha256?: string,\n): Promise<FileDigest> {\n const verification = createEntryVerification(entry)\n try {\n for await (const chunk of zipEntryStream(archive.path, entry)) verification.update(chunk)\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalidZip('compression', `failed to read entry ${entry.name}`)\n }\n const result = verification.finish()\n if (expectedSha256 && result.sha256 !== expectedSha256.toLowerCase()) {\n throw invalidZip('content', `content digest mismatch: ${entry.name}`, entry.name)\n }\n return result\n}\n\nfunction createEntryVerification(entry: ZipEntry): {\n update(chunk: Uint8Array): void\n finish(actualSize?: number): FileDigest\n} {\n const sha = getHost().createHash('sha256')\n let crc = 0xffffffff\n let size = 0\n return {\n update(chunk) {\n size += chunk.length\n if (size > entry.size) {\n throw invalidZip('limits', `entry is larger than declared: ${entry.name}`)\n }\n sha.update(chunk)\n crc = updateCrc32(crc, chunk)\n },\n finish(actualSize = size) {\n if (actualSize !== entry.size || size !== entry.size) {\n throw invalidZip('content', `entry size mismatch: ${entry.name}`, entry.name)\n }\n const actualCrc = (crc ^ 0xffffffff) >>> 0\n if (actualCrc !== entry.crc32) {\n throw invalidZip('content', `entry CRC mismatch: ${entry.name}`, entry.name)\n }\n return { size, sha256: sha.digestHex(), crc32: actualCrc }\n },\n }\n}\n\nfunction zipEntryStream(path: string, entry: ZipEntry): ReadableStream<Uint8Array> {\n let file: HostFile | undefined\n let remaining = entry.compressedSize\n const compressed = new ReadableStream<Uint8Array>({\n async start() {\n file = await getHost().open(path, { read: true })\n await file.seek(entry.dataOffset)\n },\n async pull(controller) {\n if (!file || remaining === 0) {\n void file?.close()\n controller.close()\n return\n }\n const buffer = new Uint8Array(Math.min(256 * 1024, remaining))\n const read = await file.read(buffer)\n if (read === null) {\n void file.close()\n controller.error(invalidZip('container', `truncated entry: ${entry.name}`))\n return\n }\n remaining -= read\n controller.enqueue(buffer.subarray(0, read))\n },\n cancel() {\n void file?.close()\n },\n })\n if (entry.compression === 0) return compressed\n return compressed.pipeThrough(\n new DecompressionStream('deflate-raw') as unknown as ReadableWritablePair<\n Uint8Array,\n Uint8Array\n >,\n )\n}\n\nasync function collectTarSources(root: string): Promise<TarSource[]> {\n const output: TarSource[] = []\n const activeDirectories = new Set<string>()\n async function walk(physicalDirectory: string, archivePrefix: string): Promise<void> {\n const realDirectory = await getHost().realPath(physicalDirectory)\n assertWithin(root, realDirectory, archivePrefix || '.')\n if (activeDirectories.has(realDirectory)) {\n throw new UsageError('INVALID_SOURCE', `symlink cycle in source: ${archivePrefix}`)\n }\n activeDirectories.add(realDirectory)\n try {\n const children = [] as HostDirEntry[]\n for (const child of await getHost().readDir(realDirectory)) children.push(child)\n children.sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0)\n for (const child of children) {\n if (child.name.includes('\\0') || child.name.includes('/') || child.name.includes('\\\\')) {\n throw new UsageError('INVALID_SOURCE', 'source contains an unsafe file name')\n }\n const archivePath = archivePrefix ? `${archivePrefix}/${child.name}` : child.name\n const unresolved = resolve(realDirectory, child.name)\n const info = await getHost().lstat(unresolved)\n const physical = info.isSymlink ? await getHost().realPath(unresolved) : unresolved\n assertWithin(root, physical, archivePath)\n const target = info.isSymlink ? await getHost().stat(physical) : info\n if (target.isDirectory) {\n output.push({\n archivePath: `${archivePath}/`,\n physicalPath: physical,\n kind: 'directory',\n size: 0,\n executable: true,\n identity: fileIdentity(info, physical, target),\n })\n await walk(physical, archivePath)\n } else if (target.isFile) {\n output.push({\n archivePath,\n physicalPath: physical,\n kind: 'file',\n size: target.size,\n executable: ((target.mode ?? 0) & 0o111) !== 0,\n identity: fileIdentity(info, physical, target),\n contentDigest: (await digestFile(physical)).sha256,\n })\n } else {\n throw new UsageError('INVALID_SOURCE', `unsupported special file: ${archivePath}`)\n }\n }\n } finally {\n activeDirectories.delete(realDirectory)\n }\n }\n await walk(root, '')\n return output\n}\n\nfunction fileIdentity(link: HostFileInfo, realPath: string, target: HostFileInfo): string {\n return JSON.stringify({\n realPath,\n linkMtime: link.mtime?.getTime() ?? null,\n mtime: target.mtime?.getTime() ?? null,\n size: target.size,\n dev: target.dev,\n ino: target.ino,\n mode: target.mode,\n })\n}\n\nfunction sourceIdentity(source: TarSource): unknown {\n return [\n source.archivePath,\n source.kind,\n source.size,\n source.executable,\n source.identity,\n source.contentDigest ?? null,\n ]\n}\n\nfunction assertWithin(root: string, candidate: string, label: string): void {\n const path = relative(root, candidate)\n if (\n path === '..' || path.startsWith(`..${getHost().path.sep}`) ||\n resolve(candidate) === resolve(root) && label !== '.'\n ) {\n throw new UsageError('INVALID_SOURCE', `symlink escapes source root: ${label}`)\n }\n}\n\nfunction tarHeader(source: TarSource): Uint8Array {\n const header = new Uint8Array(BLOCK_SIZE)\n const { name, prefix } = splitUstarPath(source.archivePath)\n writeString(header, 0, 100, name)\n writeOctal(\n header,\n 100,\n 8,\n source.kind === 'directory' ? 0o755 : source.executable ? 0o755 : 0o644,\n )\n writeOctal(header, 108, 8, 0)\n writeOctal(header, 116, 8, 0)\n writeOctal(header, 124, 12, source.size)\n writeOctal(header, 136, 12, 0)\n header.fill(0x20, 148, 156)\n header[156] = source.kind === 'directory' ? 0x35 : 0x30\n writeString(header, 257, 6, 'ustar\\0')\n writeString(header, 263, 2, '00')\n writeString(header, 345, 155, prefix)\n let checksum = 0\n for (const byte of header) checksum += byte\n writeChecksum(header, checksum)\n return header\n}\n\nfunction splitUstarPath(path: string): { name: string; prefix: string } {\n const encoder = new TextEncoder()\n if (encoder.encode(path).length <= 100) return { name: path, prefix: '' }\n const directory = path.endsWith('/')\n const core = directory ? path.slice(0, -1) : path\n const parts = core.split('/')\n for (let index = parts.length - 1; index > 0; index--) {\n const prefix = parts.slice(0, index).join('/')\n const name = `${parts.slice(index).join('/')}${directory ? '/' : ''}`\n if (encoder.encode(prefix).length <= 155 && encoder.encode(name).length <= 100) {\n return { name, prefix }\n }\n }\n throw new UsageError('INVALID_SOURCE', `source path is too long for a portable tar: ${path}`)\n}\n\nfunction writeString(target: Uint8Array, offset: number, length: number, value: string): void {\n const bytes = new TextEncoder().encode(value)\n if (bytes.length > length) throw new UsageError('INVALID_SOURCE', 'tar field is too long')\n target.set(bytes, offset)\n}\n\nfunction writeOctal(target: Uint8Array, offset: number, length: number, value: number): void {\n const text = value.toString(8).padStart(length - 1, '0')\n if (text.length >= length) throw new UsageError('FILE_TOO_LARGE', 'tar field overflows')\n writeString(target, offset, length, `${text}\\0`)\n}\n\nfunction writeChecksum(target: Uint8Array, value: number): void {\n const text = value.toString(8).padStart(6, '0')\n writeString(target, 148, 8, `${text}\\0 `)\n}\n\nfunction validateZipEntryName(name: string): void {\n if (!name || name.includes('\\0') || name.includes('\\\\') || name.startsWith('/')) {\n throw invalidZip('structure', `unsafe entry name: ${JSON.stringify(name)}`)\n }\n if (/^[A-Za-z]:/.test(name)) throw invalidZip('structure', `absolute entry name: ${name}`)\n const directory = name.endsWith('/')\n const segments = name.split('/')\n for (let index = 0; index < segments.length; index++) {\n const segment = segments[index]\n if (\n segment === '.' || segment === '..' ||\n (!segment && !(directory && index === segments.length - 1))\n ) {\n throw invalidZip('structure', `unsafe entry name: ${name}`)\n }\n }\n}\n\nfunction invalidZip(stage: string, message: string, entry?: string): ToolError {\n return new ToolError('INVALID_PACKAGE', message, 6, false, {\n stage,\n ...(entry ? { entry } : {}),\n })\n}\n\nfunction crc32(bytes: Uint8Array): number {\n return (updateCrc32(0xffffffff, bytes) ^ 0xffffffff) >>> 0\n}\n\nfunction updateCrc32(crc: number, bytes: Uint8Array): number {\n let value = crc\n for (const byte of bytes) value = CRC_TABLE[(value ^ byte) & 0xff] ^ (value >>> 8)\n return value >>> 0\n}\n\nasync function writeAll(file: HostFile, bytes: Uint8Array): Promise<void> {\n let offset = 0\n while (offset < bytes.length) offset += await file.write(bytes.subarray(offset))\n}\n\nasync function copyFileToWriter(path: string, output: HostFile): Promise<void> {\n const input = await getHost().open(path, { read: true })\n try {\n const buffer = new Uint8Array(256 * 1024)\n while (true) {\n const read = await input.read(buffer)\n if (read === null) break\n await writeAll(output, buffer.subarray(0, read))\n }\n } finally {\n await input.close()\n }\n}\n\nasync function readAt(file: HostFile, offset: number, length: number): Promise<Uint8Array> {\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) || offset < 0 || length < 0) {\n throw invalidZip('container', 'ZIP offset is invalid')\n }\n await file.seek(offset)\n const output = new Uint8Array(length)\n let position = 0\n while (position < length) {\n const read = await file.read(output.subarray(position))\n if (read === null) throw invalidZip('container', 'ZIP file is truncated')\n position += read\n }\n return output\n}\n\nfunction findLastSignature(bytes: Uint8Array, signature: number): number {\n for (let index = bytes.length - 4; index >= 0; index--) {\n if (u32(bytes, index) === signature) return index\n }\n return -1\n}\n\nfunction parseZip64Extra(extra: Uint8Array): number[] {\n let position = 0\n while (position + 4 <= extra.length) {\n const id = u16(extra, position)\n const length = u16(extra, position + 2)\n const end = position + 4 + length\n if (end > extra.length) throw invalidZip('structure', 'ZIP extra field is truncated')\n if (id === 0x0001) {\n if (length % 8 !== 0) throw invalidZip('structure', 'ZIP64 extra field is malformed')\n const view = new DataView(extra.buffer, extra.byteOffset + position + 4, length)\n const values: number[] = []\n for (let offset = 0; offset < length; offset += 8) values.push(uint64(view, offset))\n return values\n }\n position = end\n }\n throw invalidZip('structure', 'ZIP64 extra field is missing')\n}\n\nfunction requiredZip64(values: number[], index: number, name: string): number {\n const value = values[index]\n if (value === undefined) throw invalidZip('structure', `ZIP64 values are missing for ${name}`)\n return value\n}\n\nfunction zip64Extra(values: number[]): Uint8Array {\n const output = new Uint8Array(4 + values.length * 8)\n const view = new DataView(output.buffer)\n view.setUint16(0, 0x0001, true)\n view.setUint16(2, values.length * 8, true)\n values.forEach((value, index) => setUint64(view, 4 + index * 8, value))\n return output\n}\n\nfunction setUint64(view: DataView, offset: number, value: number): void {\n if (!Number.isSafeInteger(value) || value < 0) throw new Error('uint64 value is unsafe')\n view.setBigUint64(offset, BigInt(value), true)\n}\n\nfunction uint64(view: DataView, offset: number): number {\n const value = view.getBigUint64(offset, true)\n if (value > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw invalidZip('limits', 'ZIP64 value is too large')\n }\n return Number(value)\n}\n\nfunction u16(bytes: Uint8Array, offset: number): number {\n return new DataView(bytes.buffer, bytes.byteOffset + offset, 2).getUint16(0, true)\n}\n\nfunction u32(bytes: Uint8Array, offset: number): number {\n return new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getUint32(0, true)\n}\n\nasync function removeIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nconst EMPTY = new Uint8Array()\n","import { ndn } from 'buckyos/node'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\nimport {\n digestFile,\n type FileDigest,\n openZip,\n readZipEntry,\n sha256Bytes,\n verifyZipEntry,\n writeStoredZip,\n} from './pikg_archive.ts'\n\nconst basename = (path: string) => getHost().path.basename(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nexport const PACKAGE_META_SCHEMA = 'buckyos.pikg.package-meta.v1'\nexport const DIST_MANIFEST_NAME = '.buckyos-pikg-dist.json'\nexport const APPDOC_ENTRY = 'APPDOC.json'\nexport const APPDOC_JWT_ENTRY = 'APPDOC.jwt'\nexport const PACKAGE_META_ENTRY = 'PACKAGE_META.json'\nexport const MAX_APPDOC_BYTES = 1024 * 1024\nexport const MAX_METADATA_ENTRY_BYTES = 8 * 1024 * 1024\nexport const MAX_METADATA_TOTAL_BYTES = 64 * 1024 * 1024\n\nconst SAFE_SUBPACKAGE = /^[A-Za-z0-9._-]+$/\nconst SAFE_BNS_LABEL = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst SHA256_DIGEST = /^sha256:([0-9a-fA-F]{64})$/\nconst OBJECT_ID = /^(appdoc|pkg):[0-9a-f]{64}$/\n\nexport interface ContentIndexEntry {\n sub_pkg_name: string\n path: string\n format: 'tar.gz'\n size: number\n digest: string\n}\n\nexport interface PackageMetaFile {\n '@schema': typeof PACKAGE_META_SCHEMA\n app_doc_id: string\n package_objects: Record<string, Record<string, unknown>>\n content_index: Record<string, ContentIndexEntry>\n}\n\nexport interface ValidatedSubpackage {\n key: string\n selector: Record<string, string> | null\n required: boolean\n pkg_id: string\n pkg_objid: string\n payload_path: string\n payload_size: number\n payload_digest: string\n docker_image_name?: string\n docker_image_digest?: string\n}\n\nexport interface ValidatedPikg {\n appDoc: Record<string, unknown>\n appDocObjectId: string\n packageMeta: PackageMetaFile\n subpackages: ValidatedSubpackage[]\n hasJsonAppDoc: boolean\n hasSignedAppDoc: boolean\n canonicalMatch: boolean\n}\n\nexport interface PikgInspectionResult {\n schema_version: 1\n protocol: string\n pikg_path: string\n size: number\n pikg_digest: string\n valid: true\n app: {\n did: string\n app_id: string\n name?: string\n app_type: string\n version: string\n owner: string\n app_doc_object_id: string\n }\n app_doc_form: 'unsigned' | 'signed' | 'both'\n canonical_match: boolean\n subpackages: Array<Record<string, unknown>>\n offline_content_validation: 'passed'\n signature_validation: 'not-present' | 'not-resolvable-offline'\n publication_validation: 'not-checked'\n}\n\nexport function validateSubpackageName(name: string): void {\n if (!SAFE_SUBPACKAGE.test(name) || name === '.' || name === '..') {\n throw new UsageError('INVALID_SUBPACKAGE_NAME', `invalid subpackage name: ${name}`)\n }\n}\n\nexport function normalizeArch(value: string): string {\n switch (value.trim().toLowerCase()) {\n case 'amd64':\n case 'x86_64':\n case 'x64':\n return 'x86_64'\n case 'arm64':\n case 'aarch64':\n return 'aarch64'\n default:\n return value.trim().toLowerCase()\n }\n}\n\nexport function normalizeOs(value: string): string {\n switch (value.trim().toLowerCase()) {\n case 'darwin':\n case 'apple':\n case 'macos':\n case 'osx':\n return 'macos'\n case 'win':\n case 'win32':\n case 'windows':\n return 'windows'\n default:\n return value.trim().toLowerCase()\n }\n}\n\nexport function derivedSelector(key: string): Record<string, string> | undefined {\n const selectors: Record<string, Record<string, string>> = {\n amd64_docker_image: { os: 'linux', arch: 'x86_64' },\n aarch64_docker_image: { os: 'linux', arch: 'aarch64' },\n amd64_linux_app: { os: 'linux', arch: 'x86_64' },\n aarch64_linux_app: { os: 'linux', arch: 'aarch64' },\n amd64_win_app: { os: 'windows', arch: 'x86_64' },\n aarch64_win_app: { os: 'windows', arch: 'aarch64' },\n amd64_apple_app: { os: 'macos', arch: 'x86_64' },\n aarch64_apple_app: { os: 'macos', arch: 'aarch64' },\n web: {},\n agent: {},\n agent_skills: {},\n agent_tools: {},\n script: {},\n }\n return selectors[key]\n}\n\nexport function canonicalSelector(\n value: unknown,\n label: string,\n): Record<string, string> | undefined {\n if (value === undefined) return undefined\n const selector = expectObject(value, label)\n rejectUnknown(selector, ['os', 'arch', 'min_kernel_version'], label)\n const output: Record<string, string> = {}\n for (const key of ['os', 'arch', 'min_kernel_version']) {\n if (selector[key] !== undefined) {\n output[key] = expectNonEmptyString(selector[key], `${label}.${key}`)\n }\n }\n if (output.os) output.os = normalizeOs(output.os)\n if (output.arch) output.arch = normalizeArch(output.arch)\n return output\n}\n\nexport function assertSelectorCompatible(\n key: string,\n selector: Record<string, string> | undefined,\n label: string,\n): void {\n const derived = derivedSelector(key)\n if (!derived || !selector) return\n for (const field of ['os', 'arch']) {\n if (derived[field] !== undefined && selector[field] !== derived[field]) {\n throw new UsageError(\n 'SELECTOR_CONFLICT',\n `${label}.${field} conflicts with the selector derived from ${key}`,\n )\n }\n }\n}\n\nexport function deriveAppNamespace(\n appDid: string,\n): string {\n return appIdFromDid(appDid)\n}\n\nexport function appIdFromDid(appDid: string): string {\n const app = parseDid(appDid, 'did')\n if (\n app.id.includes('#') || app.id.includes('/') || app.id.includes('%') || app.id.includes(':')\n ) {\n throw new UsageError(\n 'INVALID_APP_ID',\n 'App DID must use hostname form without path, fragment, port, or encoding',\n )\n }\n const labels = app.id.split('.')\n if (labels.some((label) => !SAFE_BNS_LABEL.test(label))) {\n throw new UsageError('INVALID_APP_ID', 'App DID must contain canonical lowercase DNS labels')\n }\n if (app.method === 'web') {\n if (labels.length >= 3 && labels.at(-1) === 'did') {\n throw new UsageError(\n 'INVALID_APP_ID',\n 'did:web hostname conflicts with the reserved non-Web .did form',\n )\n }\n return app.id\n }\n return `${app.id}.${app.method}.did`\n}\n\nexport function createPackageMeta(\n packageName: string,\n version: string,\n author: string,\n owner: string,\n payload: FileDigest,\n timestamp: number,\n): { value: Record<string, unknown>; objectId: string } {\n const content = ndn.ChunkId.fromMix256Result(\n payload.size,\n ndn.hexToBytes(payload.sha256),\n ).toString()\n const value: Record<string, unknown> = {\n name: packageName,\n author,\n owner,\n create_time: timestamp,\n last_update_time: timestamp,\n size: payload.size,\n content,\n version,\n }\n const objectId = ndn.buildNamedObjectByJson(ndn.OBJ_TYPE_PKG, value)[0].toString()\n return { value, objectId }\n}\n\nexport function validatePermissions(value: unknown, label: string): unknown[] {\n if (!Array.isArray(value)) throw invalid('schema', `${label} must be an array`)\n return value.map((raw, index) => {\n const item = expectObject(raw, `${label}[${index}]`)\n assertKnownFields(item, ['scope_path', 'required', 'actions', 'exp'], `${label}[${index}]`)\n expectNonEmptyString(item.scope_path, `${label}[${index}].scope_path`)\n if (typeof item.required !== 'boolean') {\n throw invalid('schema', `${label}[${index}].required must be boolean`)\n }\n if (\n item.actions !== undefined &&\n (!Array.isArray(item.actions) || item.actions.some((action) => typeof action !== 'string'))\n ) {\n throw invalid('schema', `${label}[${index}].actions must be a string array`)\n }\n if (\n item.exp !== null && item.exp !== undefined &&\n (typeof item.exp !== 'number' || !Number.isInteger(item.exp) || item.exp < 0 ||\n item.exp > 0xffffffff)\n ) {\n throw invalid('schema', `${label}[${index}].exp must be null or a uint32`)\n }\n return raw\n })\n}\n\nexport function validateServiceConfigTips(\n value: unknown,\n label: string,\n): Record<string, unknown> {\n const config = expectObject(value, label)\n for (\n const field of [\n 'service_endpoints',\n 'data_mount_points',\n 'local_cache_mount_points',\n 'external_mount_points',\n 'rdb_instances',\n 'bash_envs',\n 'runtime_caps',\n ]\n ) {\n if (config[field] !== undefined) expectObject(config[field], `${label}.${field}`)\n }\n for (\n const [name, raw] of Object.entries(\n expectObject(config.service_endpoints ?? {}, `${label}.service_endpoints`),\n )\n ) {\n const endpoint = expectObject(raw, `${label}.service_endpoints.${name}`)\n assertKnownFields(\n endpoint,\n ['protocol', 'inner_port', 'required', 'description', 'expose'],\n `${label}.service_endpoints.${name}`,\n )\n if (!['http', 'https', 'tcp', 'udp'].includes(String(endpoint.protocol))) {\n throw invalid('schema', `${label}.service_endpoints.${name}.protocol is invalid`)\n }\n expectUint(endpoint.inner_port, `${label}.service_endpoints.${name}.inner_port`, 0xffff)\n optionalBoolean(endpoint.required, `${label}.service_endpoints.${name}.required`)\n validateStringMap(\n endpoint.description ?? {},\n `${label}.service_endpoints.${name}.description`,\n )\n if (endpoint.expose !== undefined && endpoint.expose !== null) {\n const expose = expectObject(endpoint.expose, `${label}.service_endpoints.${name}.expose`)\n assertKnownFields(\n expose,\n ['route', 'scope', 'allow_guest'],\n `${label}.service_endpoints.${name}.expose`,\n )\n const route = expectObject(expose.route, `${label}.service_endpoints.${name}.expose.route`)\n if (route.type === 'web') {\n assertKnownFields(route, ['type'], `${label}.service_endpoints.${name}.expose.route`)\n } else if (route.type === 'port') {\n assertKnownFields(\n route,\n ['type', 'preferred_port'],\n `${label}.service_endpoints.${name}.expose.route`,\n )\n if (route.preferred_port !== undefined) {\n expectUint(\n route.preferred_port,\n `${label}.service_endpoints.${name}.expose.route.preferred_port`,\n 0xffff,\n )\n }\n } else {\n throw invalid('schema', `${label}.service_endpoints.${name}.expose.route.type is invalid`)\n }\n optionalString(expose.scope, `${label}.service_endpoints.${name}.expose.scope`)\n optionalBoolean(\n expose.allow_guest,\n `${label}.service_endpoints.${name}.expose.allow_guest`,\n )\n }\n }\n for (\n const field of [\n 'data_mount_points',\n 'local_cache_mount_points',\n 'external_mount_points',\n ]\n ) {\n for (\n const [name, raw] of Object.entries(expectObject(config[field] ?? {}, `${label}.${field}`))\n ) {\n if (raw === null) continue\n const mount = expectObject(raw, `${label}.${field}.${name}`)\n assertKnownFields(\n mount,\n ['mount_point_name', 'access', 'reason'],\n `${label}.${field}.${name}`,\n )\n expectNonEmptyString(mount.mount_point_name, `${label}.${field}.${name}.mount_point_name`)\n expectNonEmptyString(mount.access, `${label}.${field}.${name}.access`)\n validateStringMap(mount.reason, `${label}.${field}.${name}.reason`)\n }\n }\n for (\n const [name, raw] of Object.entries(\n expectObject(config.rdb_instances ?? {}, `${label}.rdb_instances`),\n )\n ) {\n const database = expectObject(raw, `${label}.rdb_instances.${name}`)\n assertKnownFields(\n database,\n ['backend', 'version', 'schema', 'connection'],\n `${label}.rdb_instances.${name}`,\n )\n if (!['sqlite', 'postgres'].includes(String(database.backend))) {\n throw invalid('schema', `${label}.rdb_instances.${name}.backend is invalid`)\n }\n if (database.version !== undefined) {\n expectUint(\n database.version,\n `${label}.rdb_instances.${name}.version`,\n Number.MAX_SAFE_INTEGER,\n )\n }\n const schemas = validateStringMap(\n database.schema ?? {},\n `${label}.rdb_instances.${name}.schema`,\n )\n for (const backend of Object.keys(schemas)) {\n if (!['sqlite', 'postgres'].includes(backend)) {\n throw invalid('schema', `${label}.rdb_instances.${name}.schema.${backend} is invalid`)\n }\n }\n optionalString(database.connection, `${label}.rdb_instances.${name}.connection`)\n }\n if (config.instance_volume !== undefined) {\n const volume = expectObject(config.instance_volume, `${label}.instance_volume`)\n assertKnownFields(\n volume,\n ['mode', 'quota_mib', 'ephemeral_contents'],\n `${label}.instance_volume`,\n )\n if (\n volume.mode !== undefined &&\n !['required', 'optional', 'disabled'].includes(String(volume.mode))\n ) {\n throw invalid('schema', `${label}.instance_volume.mode is invalid`)\n }\n if (volume.quota_mib !== undefined) {\n expectUint(volume.quota_mib, `${label}.instance_volume.quota_mib`, Number.MAX_SAFE_INTEGER)\n }\n if (\n volume.ephemeral_contents !== undefined &&\n (!Array.isArray(volume.ephemeral_contents) ||\n volume.ephemeral_contents.some((item) => typeof item !== 'string'))\n ) {\n throw invalid('schema', `${label}.instance_volume.ephemeral_contents must be a string array`)\n }\n }\n for (\n const [name, raw] of Object.entries(expectObject(config.bash_envs ?? {}, `${label}.bash_envs`))\n ) {\n const environment = expectObject(raw, `${label}.bash_envs.${name}`)\n assertKnownFields(environment, ['required', 'description'], `${label}.bash_envs.${name}`)\n if (typeof environment.required !== 'boolean') {\n throw invalid('schema', `${label}.bash_envs.${name}.required must be boolean`)\n }\n validateStringMap(environment.description ?? {}, `${label}.bash_envs.${name}.description`)\n }\n validateStringMap(config.runtime_caps ?? {}, `${label}.runtime_caps`)\n optionalString(config.container_param, `${label}.container_param`)\n optionalString(config.start_param, `${label}.start_param`)\n return config\n}\n\nexport function appDocObjectId(value: Record<string, unknown>): string {\n return ndn.buildNamedObjectByJson('appdoc', value)[0].toString()\n}\n\nexport async function validateSnapshot(\n distDir: string,\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n): Promise<ValidatedPikg> {\n const payloads = new Map<string, FileDigest>()\n for (const entryValue of Object.values(packageMeta.content_index)) {\n const entry = validateContentIndexEntry(entryValue, 'content_index')\n const path = join(distDir, entry.path)\n const digest = await digestFile(path)\n payloads.set(entry.path, digest)\n }\n return validateObjectGraph(appDoc, packageMeta, payloads, true, false, true)\n}\n\nexport async function packSnapshot(\n distDir: string,\n destination: string,\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n): Promise<void> {\n const validated = await validateSnapshot(distDir, appDoc, packageMeta)\n const encoder = new TextEncoder()\n await writeStoredZip(destination, [\n { name: APPDOC_ENTRY, bytes: encoder.encode(`${JSON.stringify(appDoc, null, 2)}\\n`) },\n {\n name: PACKAGE_META_ENTRY,\n bytes: encoder.encode(`${JSON.stringify(packageMeta, null, 2)}\\n`),\n },\n ...validated.subpackages.map((subpackage) => ({\n name: subpackage.payload_path,\n path: join(distDir, subpackage.payload_path),\n })),\n ])\n}\n\nexport async function inspectPikg(path: string): Promise<PikgInspectionResult> {\n const archive = await openZip(path)\n let metadataTotal = 0\n for (const entry of archive.entries) {\n if (\n entry.name === APPDOC_ENTRY || entry.name === APPDOC_JWT_ENTRY ||\n entry.name === PACKAGE_META_ENTRY ||\n entry.name.startsWith('objects/') && entry.name.endsWith('.json')\n ) {\n const limit = entry.name === APPDOC_ENTRY || entry.name === APPDOC_JWT_ENTRY\n ? MAX_APPDOC_BYTES\n : MAX_METADATA_ENTRY_BYTES\n if (entry.size > limit) throw invalid('limits', `metadata entry exceeds limit: ${entry.name}`)\n metadataTotal += entry.size\n }\n }\n if (metadataTotal > MAX_METADATA_TOTAL_BYTES) {\n throw invalid('limits', 'PIKG metadata exceeds the total size limit')\n }\n if (archive.byName.has('APPDOC.wt')) {\n throw invalid('appdoc', 'legacy APPDOC.wt is not supported')\n }\n const jsonEntry = archive.byName.get(APPDOC_ENTRY)\n const jwtEntry = archive.byName.get(APPDOC_JWT_ENTRY)\n if (!jsonEntry && !jwtEntry) throw invalid('appdoc', 'PIKG has no App Document')\n\n const jsonDoc = jsonEntry\n ? parseJsonObject(\n await readZipEntry(archive, jsonEntry, MAX_APPDOC_BYTES),\n APPDOC_ENTRY,\n )\n : undefined\n const jwt = jwtEntry\n ? new TextDecoder('utf-8', { fatal: true }).decode(\n await readZipEntry(archive, jwtEntry, MAX_APPDOC_BYTES),\n ).trim()\n : undefined\n const jwtDoc = jwt ? decodeJwtClaims(jwt) : undefined\n if (jsonDoc && jwtDoc && appDocObjectId(jsonDoc) !== appDocObjectId(jwtDoc)) {\n throw invalid('appdoc', 'APPDOC.json and APPDOC.jwt have different canonical documents')\n }\n const appDoc = jwtDoc ?? jsonDoc!\n const metaEntry = archive.byName.get(PACKAGE_META_ENTRY)\n if (!metaEntry) throw invalid('package-meta', 'PACKAGE_META.json is required')\n const packageMeta = parsePackageMeta(\n parseJsonObject(\n await readZipEntry(archive, metaEntry, MAX_METADATA_ENTRY_BYTES),\n PACKAGE_META_ENTRY,\n ),\n )\n for (\n const entry of archive.entries.filter((candidate) => candidate.name.startsWith('objects/'))\n ) {\n const match = /^objects\\/([^/]+)\\.json$/.exec(entry.name)\n if (!match) {\n throw invalid(\n 'object-graph',\n `invalid object entry path: ${entry.name}`,\n entry.name,\n )\n }\n let objectId: InstanceType<typeof ndn.ObjId>\n try {\n objectId = ndn.ObjId.fromString(match[1])\n } catch {\n throw invalid('object-graph', `invalid object entry ID: ${entry.name}`, entry.name)\n }\n const value = parseJsonValue(\n await readZipEntry(archive, entry, MAX_METADATA_ENTRY_BYTES),\n entry.name,\n )\n const computed = ndn.buildNamedObjectByJson(objectId.objType, value)[0]\n if (!computed.equals(objectId)) {\n throw invalid('object-graph', `object entry ID mismatch: ${entry.name}`, entry.name)\n }\n }\n const payloads = new Map<string, FileDigest>()\n for (const value of Object.values(packageMeta.content_index)) {\n const content = validateContentIndexEntry(value, 'content_index')\n const entry = archive.byName.get(content.path)\n if (!entry) throw invalid('content-index', `content entry is missing: ${content.path}`)\n if (entry.size !== content.size) {\n throw invalid('content-index', `content entry size mismatch: ${content.path}`, content.path)\n }\n const expected = parseSha256(content.digest, `content_index.${content.digest}`)\n payloads.set(content.path, await verifyZipEntry(archive, entry, expected))\n }\n const validated = validateObjectGraph(\n appDoc,\n packageMeta,\n payloads,\n Boolean(jsonEntry),\n Boolean(jwtEntry),\n !jsonDoc || !jwtDoc || appDocObjectId(jsonDoc) === appDocObjectId(jwtDoc),\n )\n const pikgDigest = await digestFile(path)\n return {\n schema_version: 1,\n protocol: PACKAGE_META_SCHEMA,\n pikg_path: resolve(path),\n size: pikgDigest.size,\n pikg_digest: `sha256:${pikgDigest.sha256}`,\n valid: true,\n app: {\n did: String(appDoc.did),\n app_id: appIdFromDid(String(appDoc.did)),\n ...(typeof appDoc.name === 'string' ? { name: appDoc.name } : {}),\n app_type: String(appDoc.app_type),\n version: String(appDoc.version),\n owner: String(appDoc.owner),\n app_doc_object_id: validated.appDocObjectId,\n },\n app_doc_form: jsonEntry && jwtEntry ? 'both' : jwtEntry ? 'signed' : 'unsigned',\n canonical_match: validated.canonicalMatch,\n subpackages: validated.subpackages.map((subpackage) => ({\n key: subpackage.key,\n selector: subpackage.selector,\n required: subpackage.required,\n pkg_id: subpackage.pkg_id,\n pkg_objid: subpackage.pkg_objid,\n payload: {\n path: subpackage.payload_path,\n size: subpackage.payload_size,\n digest: subpackage.payload_digest,\n },\n ...(subpackage.docker_image_name ? { docker_image_name: subpackage.docker_image_name } : {}),\n ...(subpackage.docker_image_digest\n ? { docker_image_digest: subpackage.docker_image_digest }\n : {}),\n })),\n offline_content_validation: 'passed',\n signature_validation: jwtEntry ? 'not-resolvable-offline' : 'not-present',\n publication_validation: 'not-checked',\n }\n}\n\nexport function parsePackageMeta(value: Record<string, unknown>): PackageMetaFile {\n try {\n rejectUnknown(\n value,\n ['@schema', 'app_doc_id', 'package_objects', 'content_index'],\n PACKAGE_META_ENTRY,\n )\n } catch (error) {\n if (error instanceof UsageError) throw invalid('package-meta', error.message)\n throw error\n }\n if (value['@schema'] !== PACKAGE_META_SCHEMA) {\n throw invalid('package-meta', `unsupported PACKAGE_META.json schema: ${value['@schema']}`)\n }\n const appDocId = expectNonEmptyString(value.app_doc_id, 'PACKAGE_META.json.app_doc_id')\n if (!OBJECT_ID.test(appDocId) || !appDocId.startsWith('appdoc:')) {\n throw invalid('package-meta', 'PACKAGE_META.json.app_doc_id is invalid')\n }\n const packageObjects = expectObject(value.package_objects, 'PACKAGE_META.json.package_objects')\n const contentIndex = expectObject(value.content_index, 'PACKAGE_META.json.content_index')\n return {\n '@schema': PACKAGE_META_SCHEMA,\n app_doc_id: appDocId,\n package_objects: packageObjects as Record<string, Record<string, unknown>>,\n content_index: contentIndex as Record<string, ContentIndexEntry>,\n }\n}\n\nfunction validateObjectGraph(\n appDoc: Record<string, unknown>,\n packageMeta: PackageMetaFile,\n payloads: Map<string, FileDigest>,\n hasJson: boolean,\n hasSigned: boolean,\n canonicalMatch: boolean,\n): ValidatedPikg {\n validateAppDocShape(appDoc)\n const appId = appDocObjectId(appDoc)\n if (packageMeta.app_doc_id !== appId) {\n throw invalid('object-graph', 'PACKAGE_META.json app_doc_id does not match APPDOC')\n }\n const appVersion = String(appDoc.version)\n const namespace = deriveNamespaceForPackage(appDoc)\n const pkgList = appDoc.pkg_list as Record<string, unknown>\n const referenced = new Set<string>()\n const subpackages: ValidatedSubpackage[] = []\n const contentBySubpackage = new Map<string, ContentIndexEntry>()\n for (const [digest, raw] of Object.entries(packageMeta.content_index)) {\n const entry = validateContentIndexEntry(raw, `content_index.${digest}`)\n if (entry.digest !== digest) throw invalid('content-index', `digest key mismatch: ${digest}`)\n const expectedHex = parseSha256(digest, `content_index.${digest}`)\n const payload = payloads.get(entry.path)\n if (!payload) throw invalid('content-index', `payload is missing: ${entry.path}`, entry.path)\n if (payload.size !== entry.size || payload.sha256 !== expectedHex) {\n throw invalid('content', `payload does not match content index: ${entry.path}`, entry.path)\n }\n if (contentBySubpackage.has(entry.sub_pkg_name)) {\n throw invalid('content-index', `subpackage has more than one payload: ${entry.sub_pkg_name}`)\n }\n contentBySubpackage.set(entry.sub_pkg_name, entry)\n }\n\n const dependencyNames = new Set<string>()\n for (\n const [key, rawDesc] of Object.entries(pkgList).sort(([left], [right]) =>\n left.localeCompare(right)\n )\n ) {\n validateSubpackageNameForPackage(key)\n const desc = expectObject(rawDesc, `APPDOC.pkg_list.${key}`)\n rejectUnknown(\n desc,\n [\n 'pkg_id',\n 'pkg_objid',\n 'docker_image_name',\n 'docker_image_digest',\n 'source_url',\n 'selector',\n 'required',\n ],\n `APPDOC.pkg_list.${key}`,\n )\n if (desc.source_url !== undefined) {\n throw invalid('self-contained', `source_url is not allowed for bundled App: ${key}`)\n }\n const pkgId = expectNonEmptyString(desc.pkg_id, `APPDOC.pkg_list.${key}.pkg_id`)\n const parsedId = parsePackageId(pkgId, key)\n if (parsedId.version !== appVersion) {\n throw invalid('namespace', `subpackage ${key} must use App version ${appVersion}`)\n }\n const uniqueName = packageUniqueName(parsedId.name, key)\n const namespacePrefix = uniqueName.endsWith(`.${namespace}`)\n ? uniqueName.slice(0, -namespace.length - 1)\n : undefined\n if (\n uniqueName !== namespace &&\n (!namespacePrefix || namespacePrefix.includes('.') ||\n !/^[a-z0-9][a-z0-9_-]*$/.test(namespacePrefix))\n ) {\n throw invalid('namespace', `subpackage ${key} is outside App package namespace`)\n }\n const pkgObjid = expectNonEmptyString(desc.pkg_objid, `APPDOC.pkg_list.${key}.pkg_objid`)\n if (!OBJECT_ID.test(pkgObjid) || !pkgObjid.startsWith('pkg:')) {\n throw invalid('object-graph', `subpackage ${key} has an invalid pkg_objid`)\n }\n const packageObject = packageMeta.package_objects[pkgObjid]\n if (!packageObject) throw invalid('object-graph', `PackageMeta is missing for ${key}`)\n const computed = ndn.buildNamedObjectByJson(ndn.OBJ_TYPE_PKG, packageObject)[0].toString()\n if (computed !== pkgObjid) {\n throw invalid('object-graph', `PackageMeta Object ID mismatch: ${key}`)\n }\n const metaName = expectNonEmptyString(packageObject.name, `PackageMeta(${key}).name`)\n const metaVersion = expectNonEmptyString(packageObject.version, `PackageMeta(${key}).version`)\n if (metaName !== parsedId.name || metaVersion !== parsedId.version) {\n throw invalid('namespace', `PackageMeta identity does not match pkg_id: ${key}`)\n }\n if (packageObject.owner !== appDoc.owner || packageObject.author !== appDoc.author) {\n throw invalid('namespace', `PackageMeta owner/author does not match AppDoc: ${key}`)\n }\n const metaDeps = packageObject.deps\n if (\n metaDeps !== undefined &&\n Object.keys(expectObject(metaDeps, `PackageMeta(${key}).deps`)).length\n ) {\n throw invalid(\n 'self-contained',\n `third-party PackageMeta dependencies are not allowed: ${key}`,\n )\n }\n const entry = contentBySubpackage.get(key)\n if (!entry) throw invalid('content-index', `content index is missing for ${key}`)\n if (entry.path !== `${key}.tar.gz` || entry.format !== 'tar.gz') {\n throw invalid('content-index', `subpackage ${key} has a noncanonical payload path`)\n }\n const metaSize = expectSafeInteger(packageObject.size, `PackageMeta(${key}).size`)\n if (metaSize !== entry.size) throw invalid('content', `PackageMeta size mismatch: ${key}`)\n validateChunkContent(\n expectNonEmptyString(packageObject.content, `PackageMeta(${key}).content`),\n entry.size,\n parseSha256(entry.digest, `content_index.${entry.digest}`),\n key,\n )\n const selector = canonicalSelectorForPackage(desc.selector, `APPDOC.pkg_list.${key}.selector`)\n assertSelectorForPackage(key, selector)\n if (desc.required !== undefined && typeof desc.required !== 'boolean') {\n throw invalid('appdoc', `required must be boolean: ${key}`)\n }\n const dockerImageName = optionalNonEmptyString(\n desc.docker_image_name,\n `APPDOC.pkg_list.${key}.docker_image_name`,\n )\n const dockerImageDigest = optionalNonEmptyString(\n desc.docker_image_digest,\n `APPDOC.pkg_list.${key}.docker_image_digest`,\n )\n if (dockerImageDigest && !SHA256_DIGEST.test(dockerImageDigest)) {\n throw invalid('appdoc', `invalid Docker image digest: ${key}`)\n }\n referenced.add(pkgObjid)\n dependencyNames.add(metaName)\n subpackages.push({\n key,\n selector: selector ?? derivedSelector(key) ?? null,\n required: desc.required === undefined ? true : desc.required,\n pkg_id: pkgId,\n pkg_objid: pkgObjid,\n payload_path: entry.path,\n payload_size: entry.size,\n payload_digest: entry.digest,\n ...(dockerImageName ? { docker_image_name: dockerImageName } : {}),\n ...(dockerImageDigest ? { docker_image_digest: dockerImageDigest } : {}),\n })\n }\n if (subpackages.length === 0) throw invalid('appdoc', 'AppDoc.pkg_list must not be empty')\n for (const key of Object.keys(packageMeta.package_objects)) {\n if (!referenced.has(key)) {\n throw invalid('object-graph', `unreferenced PackageMeta object: ${key}`)\n }\n }\n if (contentBySubpackage.size !== subpackages.length) {\n throw invalid('content-index', 'content index and pkg_list have different subpackages')\n }\n if (dependencyNames.size !== subpackages.length) {\n throw invalid('self-contained', 'AppDoc package identities are not unique')\n }\n return {\n appDoc,\n appDocObjectId: appId,\n packageMeta,\n subpackages,\n hasJsonAppDoc: hasJson,\n hasSignedAppDoc: hasSigned,\n canonicalMatch,\n }\n}\n\nexport function validateAppDocShape(appDoc: Record<string, unknown>): void {\n rejectUnknown(\n appDoc,\n [\n 'schema_version',\n 'doc_type',\n 'did',\n 'name',\n 'copyright',\n 'tags',\n 'categories',\n 'base_on',\n 'directory',\n 'references',\n 'version',\n 'version_tag',\n 'app_type',\n 'owner',\n 'controller',\n 'author',\n 'create_time',\n 'last_update_time',\n 'exp',\n 'pkg_list',\n 'show_name',\n 'presentation',\n 'sdk_version',\n 'req_capbilities',\n 'permissions',\n 'content_handlers',\n 'selector_type',\n 'service_config_tips',\n ],\n 'APPDOC',\n )\n if (appDoc.schema_version !== 1) {\n throw invalid('appdoc', 'APPDOC.schema_version must be 1')\n }\n for (\n const field of [\n 'did',\n 'version',\n 'app_type',\n 'owner',\n 'controller',\n 'author',\n 'show_name',\n 'selector_type',\n ]\n ) {\n expectNonEmptyString(appDoc[field], `APPDOC.${field}`)\n }\n if (appDoc.doc_type !== 'app') throw invalid('appdoc', 'APPDOC.doc_type must be app')\n if (!['service', 'dapp', 'web', 'agent', 'agent_skills'].includes(String(appDoc.app_type))) {\n throw invalid('appdoc', 'APPDOC.app_type is invalid')\n }\n if (appDoc.name !== undefined) expectNonEmptyString(appDoc.name, 'APPDOC.name')\n optionalString(appDoc.copyright, 'APPDOC.copyright')\n for (const field of ['tags', 'categories']) {\n const values = appDoc[field]\n if (\n values !== undefined &&\n (!Array.isArray(values) || values.length === 0 ||\n values.some((value) => typeof value !== 'string'))\n ) {\n throw invalid('appdoc', `APPDOC.${field} must be a non-empty string array when present`)\n }\n }\n if (appDoc.base_on !== undefined) {\n const baseOn = expectNonEmptyString(appDoc.base_on, 'APPDOC.base_on')\n try {\n ndn.ObjId.fromString(baseOn)\n } catch {\n throw invalid('appdoc', 'APPDOC.base_on must be an ObjectId')\n }\n }\n for (const field of ['directory', 'references']) {\n if (appDoc[field] === undefined) continue\n const entries = expectObject(appDoc[field], `APPDOC.${field}`)\n if (Object.keys(entries).length === 0) {\n throw invalid('appdoc', `APPDOC.${field} must not be empty when present`)\n }\n for (const [key, value] of Object.entries(entries)) {\n expectObject(value, `APPDOC.${field}.${key}`)\n }\n }\n expectSafeInteger(appDoc.create_time, 'APPDOC.create_time')\n expectSafeInteger(appDoc.last_update_time, 'APPDOC.last_update_time')\n if (expectSafeInteger(appDoc.exp, 'APPDOC.exp') === 0) {\n throw invalid('appdoc', 'APPDOC.exp must be greater than zero')\n }\n appIdFromDid(String(appDoc.did))\n parseDid(String(appDoc.owner), 'owner')\n parseDid(String(appDoc.controller), 'controller')\n parseDid(String(appDoc.author), 'author')\n if (appDoc.permissions !== undefined && !Array.isArray(appDoc.permissions)) {\n throw invalid('appdoc', 'APPDOC.permissions must be an array')\n }\n validatePermissions(appDoc.permissions ?? [], 'APPDOC.permissions')\n if (appDoc.content_handlers !== undefined && !Array.isArray(appDoc.content_handlers)) {\n throw invalid('appdoc', 'APPDOC.content_handlers must be an array')\n }\n validateServiceConfigTips(appDoc.service_config_tips, 'APPDOC.service_config_tips')\n const pkgList = expectObject(appDoc.pkg_list, 'APPDOC.pkg_list')\n if (Object.keys(pkgList).length === 0) {\n throw invalid('appdoc', 'APPDOC.pkg_list must not be empty')\n }\n if (appDoc.app_type === 'agent_skills') {\n expectNonEmptyString(appDoc.name, 'APPDOC.name')\n if (Object.keys(pkgList).join() !== 'agent_skills') {\n throw invalid('appdoc', 'an agent_skills App must contain only the agent_skills sub package')\n }\n }\n deriveNamespaceForPackage(appDoc)\n}\n\nfunction deriveNamespaceForPackage(appDoc: Record<string, unknown>): string {\n try {\n return deriveAppNamespace(String(appDoc.did))\n } catch (error) {\n if (error instanceof UsageError) throw invalid('namespace', error.message)\n throw error\n }\n}\n\nfunction validateContentIndexEntry(value: unknown, label: string): ContentIndexEntry {\n const entry = expectObject(value, label)\n rejectUnknown(entry, ['sub_pkg_name', 'path', 'format', 'size', 'digest'], label)\n const subpackage = expectNonEmptyString(entry.sub_pkg_name, `${label}.sub_pkg_name`)\n validateSubpackageNameForPackage(subpackage)\n const path = expectNonEmptyString(entry.path, `${label}.path`)\n if (path !== `${subpackage}.tar.gz`) {\n throw invalid('content-index', `invalid payload path: ${path}`)\n }\n if (entry.format !== 'tar.gz') throw invalid('content-index', `invalid payload format: ${path}`)\n const size = expectSafeInteger(entry.size, `${label}.size`)\n const digest = expectNonEmptyString(entry.digest, `${label}.digest`)\n parseSha256(digest, `${label}.digest`)\n return { sub_pkg_name: subpackage, path, format: 'tar.gz', size, digest }\n}\n\nfunction validateChunkContent(content: string, size: number, sha256: string, key: string): void {\n let chunk: InstanceType<typeof ndn.ChunkId>\n try {\n chunk = ndn.ChunkId.fromString(content)\n } catch {\n throw invalid('content', `PackageMeta content is not a ChunkId: ${key}`)\n }\n if (!['sha256', 'mix256'].includes(chunk.chunkType)) {\n throw invalid('content', `unsupported PackageMeta ChunkId type: ${key}`)\n }\n const hash = ndn.hexToBytes(sha256)\n const expected = chunk.chunkType === 'mix256'\n ? ndn.ChunkId.fromMix256Result(size, hash)\n : ndn.ChunkId.fromSha256Result(hash)\n if (chunk.toString() !== expected.toString()) {\n throw invalid('content', `PackageMeta ChunkId digest mismatch: ${key}`)\n }\n}\n\nfunction parsePackageId(value: string, key: string): { name: string; version: string } {\n const parts = value.split('#')\n if (parts.length !== 2 || !parts[0] || !parts[1] || parts[1].startsWith('$')) {\n throw invalid('namespace', `subpackage ${key} must use an exact-version pkg_id`)\n }\n return { name: parts[0], version: parts[1] }\n}\n\nfunction packageUniqueName(packageName: string, key: string): string {\n const parts = packageName.split('.')\n const environments = new Set([\n 'all',\n 'nightly-linux-amd64',\n 'nightly-linux-aarch64',\n 'nightly-windows-amd64',\n 'nightly-windows-aarch64',\n 'nightly-apple-amd64',\n 'nightly-apple-aarch64',\n ])\n const unique = parts.length > 1 && environments.has(parts[0])\n ? parts.slice(1).join('.')\n : parts.join('.')\n if (!unique || unique.split('.').some((label) => !/^[a-z0-9][a-z0-9_-]*$/.test(label))) {\n throw invalid('namespace', `subpackage ${key} has an invalid package name`)\n }\n return unique\n}\n\nfunction decodeJwtClaims(jwt: string): Record<string, unknown> {\n const segments = jwt.split('.')\n if (segments.length !== 3 || !segments[1]) throw invalid('appdoc', 'APPDOC.jwt is malformed')\n try {\n const normalized = segments[1].replaceAll('-', '+').replaceAll('_', '/')\n const padded = normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')\n const binary = atob(padded)\n const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0))\n return parseJsonObject(bytes, APPDOC_JWT_ENTRY)\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalid('appdoc', 'APPDOC.jwt claims are not valid JSON')\n }\n}\n\nfunction parseJsonObject(bytes: Uint8Array, label: string): Record<string, unknown> {\n return expectObject(parseJsonValue(bytes, label), label)\n}\n\nfunction parseJsonValue(bytes: Uint8Array, label: string): unknown {\n try {\n return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes))\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw invalid('metadata', `${label} is not valid JSON`)\n }\n}\n\nfunction parseDid(value: string, label: string): { method: string; id: string } {\n const match = /^did:([a-z0-9]+):(.+)$/.exec(value)\n if (!match) throw new UsageError('INVALID_DID', `${label} must be a DID`)\n return { method: match[1], id: match[2] }\n}\n\nfunction parseSha256(value: string, label: string): string {\n const match = SHA256_DIGEST.exec(value)\n if (!match) throw invalid('digest', `${label} must be sha256:<64 lowercase hex>`)\n return match[1].toLowerCase()\n}\n\nfunction canonicalSelectorForPackage(\n value: unknown,\n label: string,\n): Record<string, string> | undefined {\n try {\n return canonicalSelector(value, label)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nfunction assertSelectorForPackage(key: string, selector: Record<string, string> | undefined): void {\n try {\n assertSelectorCompatible(key, selector, `APPDOC.pkg_list.${key}.selector`)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nfunction validateSubpackageNameForPackage(name: string): void {\n try {\n validateSubpackageName(name)\n } catch (error) {\n if (error instanceof UsageError) throw invalid('appdoc', error.message)\n throw error\n }\n}\n\nexport function expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw invalid('schema', `${label} must be an object`)\n }\n return value as Record<string, unknown>\n}\n\nexport function expectNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw invalid('schema', `${label} must be a string`)\n }\n return value\n}\n\nfunction optionalNonEmptyString(value: unknown, label: string): string | undefined {\n return value === undefined ? undefined : expectNonEmptyString(value, label)\n}\n\nfunction expectSafeInteger(value: unknown, label: string): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw invalid('schema', `${label} must be a non-negative safe integer`)\n }\n return value\n}\n\nfunction expectUint(value: unknown, label: string, maximum: number): number {\n const result = expectSafeInteger(value, label)\n if (result > maximum) throw invalid('schema', `${label} is too large`)\n return result\n}\n\nfunction optionalBoolean(value: unknown, label: string): void {\n if (value !== undefined && typeof value !== 'boolean') {\n throw invalid('schema', `${label} must be boolean`)\n }\n}\n\nfunction optionalString(value: unknown, label: string): void {\n if (value !== undefined && typeof value !== 'string') {\n throw invalid('schema', `${label} must be a string`)\n }\n}\n\nfunction validateStringMap(value: unknown, label: string): Record<string, unknown> {\n const result = expectObject(value, label)\n if (Object.values(result).some((item) => typeof item !== 'string')) {\n throw invalid('schema', `${label} values must be strings`)\n }\n return result\n}\n\nfunction assertKnownFields(\n value: Record<string, unknown>,\n allowed: string[],\n label: string,\n): void {\n const accepted = new Set(allowed)\n const unknown = Object.keys(value).find((key) => !accepted.has(key))\n if (unknown) throw invalid('schema', `${label}.${unknown} is not allowed`)\n}\n\nexport function rejectUnknown(\n value: Record<string, unknown>,\n allowed: string[],\n label: string,\n): void {\n const accepted = new Set(allowed)\n const unknown = Object.keys(value).filter((key) => !accepted.has(key))\n if (unknown.length) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${label}.${unknown[0]} is not allowed`)\n }\n}\n\nfunction invalid(stage: string, message: string, entry?: string): ToolError {\n return new ToolError('INVALID_PACKAGE', message, 6, false, {\n stage,\n ...(entry ? { entry: basename(entry) } : {}),\n })\n}\n\nexport function stableJsonDigest(value: unknown): string {\n return sha256Bytes(new TextEncoder().encode(ndn.toCanonicalJsonString(value)))\n}\n\nexport function validateContentHandlers(value: unknown, permissions: unknown[]): unknown[] {\n if (!Array.isArray(value)) throw invalid('appdoc', 'content_handlers must be an array')\n const ids = new Set<string>()\n for (const raw of value) {\n const h = expectObject(raw, 'content handler')\n const id = expectNonEmptyString(h.handler_id, 'handler_id')\n if (!/^[a-zA-Z0-9_-]+$/.test(id) || ids.has(id)) throw invalid('appdoc', 'invalid or duplicate handler_id')\n ids.add(id)\n if (!Number.isSafeInteger(h.version) || Number(h.version) < 1) throw invalid('appdoc', 'invalid handler version')\n if (!Array.isArray(h.selectors) || !h.selectors.length) throw invalid('appdoc', 'missing selectors')\n for (const rawSelector of h.selectors) {\n const s = expectObject(rawSelector, 'selector')\n if (!['mime', 'objType', 'schema', 'ext'].some(k => k in s)) throw invalid('appdoc', 'empty selector')\n for (const key of ['mime', 'objType', 'schema']) {\n const v = s[key]\n if (v !== undefined && !(typeof v === 'string' && v.length) && !(Array.isArray(v) && v.length && v.every(i => typeof i === 'string' && i.length))) throw invalid('appdoc', 'invalid selector field')\n }\n if (s.maxSize !== undefined && (!Number.isSafeInteger(s.maxSize) || Number(s.maxSize) < 0)) throw invalid('appdoc', 'invalid maxSize')\n }\n const intents = expectObject(h.intents, 'intents')\n if (Object.keys(intents).length !== 1 || !intents.open) throw invalid('appdoc', 'only open intent is supported')\n const open = expectObject(intents.open, 'open')\n const entry = expectObject(open.entry, 'entry')\n const path = expectNonEmptyString(entry.path, 'entry.path')\n let decoded: string\n try { decoded = decodeURIComponent(path) } catch { throw invalid('appdoc', 'invalid entry path') }\n if (entry.type !== 'web' || !decoded.startsWith('/') || decoded.startsWith('//') || decoded.includes('..') || decoded.includes('\\\\') || decoded.includes('://') || decoded.includes('#') || /[\\r\\n]/.test(decoded)) throw invalid('appdoc', 'unsafe Web entry')\n if (open.priority !== undefined && (!Number.isSafeInteger(open.priority) || Number(open.priority) < 0 || Number(open.priority) > 80)) throw invalid('appdoc', 'priority must be 0..80')\n if (open.window !== undefined && open.window !== 'new' && open.window !== 'reuse') throw invalid('appdoc', 'invalid window policy')\n if (open.multiSource !== undefined && typeof open.multiSource !== 'boolean') throw invalid('appdoc', 'invalid multiSource')\n if (open.modes !== undefined && (!Array.isArray(open.modes) || !open.modes.length || open.modes.some(m => m !== 'view' && m !== 'edit'))) throw invalid('appdoc', 'invalid modes')\n if (h.permissions !== undefined && (!Array.isArray(h.permissions) || h.permissions.some(scope => !permissions.some(p => p && typeof p === 'object' && (p as Record<string, unknown>).scope_path === scope)))) throw invalid('appdoc', 'handler permissions exceed App permissions')\n }\n return value\n}\n","// Generated by scripts/generate-cli-version.mjs. Do not edit.\nexport const PACKAGE_VERSION = '0.7.142'\nexport const TOOL_VERSION = PACKAGE_VERSION\nexport const SDK_VERSION = PACKAGE_VERSION\nexport const PROTOCOL_VERSION = '1'\n","import type { CommandContext } from '../core/context.ts'\nimport type { CommandModule } from '../core/command.ts'\nimport { EXIT_PERMISSION, EXIT_UNAVAILABLE, ToolError, UsageError } from '../core/errors.ts'\nimport { createDeterministicTarGz, digestFile, sha256Bytes } from './pikg_archive.ts'\nimport {\n APPDOC_ENTRY,\n appDocObjectId,\n assertSelectorCompatible,\n canonicalSelector,\n createPackageMeta,\n deriveAppNamespace,\n derivedSelector,\n DIST_MANIFEST_NAME,\n expectNonEmptyString,\n expectObject,\n inspectPikg,\n normalizeArch,\n PACKAGE_META_ENTRY,\n PACKAGE_META_SCHEMA,\n type PackageMetaFile,\n packSnapshot,\n parsePackageMeta,\n rejectUnknown,\n stableJsonDigest,\n validatePermissions,\n validateContentHandlers,\n validateServiceConfigTips,\n validateSnapshot,\n validateSubpackageName,\n} from './pikg_protocol.ts'\nimport {\n distributionManifestView,\n getHost,\n type HostFileInfo,\n isHostError,\n policyView,\n readDistributionManifest,\n} from '../runtime/host.ts'\nimport { PROTOCOL_VERSION, SDK_VERSION, TOOL_VERSION } from '../version.ts'\nimport { identityCandidateView } from '../core/identity.ts'\n\nconst basename = (path: string) => getHost().path.basename(path)\nconst dirname = (path: string) => getHost().path.dirname(path)\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst join = (...parts: string[]) => getHost().path.join(...parts)\nconst relative = (from: string, to: string) => getHost().path.relative(from, to)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst APP_DOCUMENT_LIFETIME_SECONDS = 5 * 365 * 24 * 60 * 60\nconst SAFE_PIKG_FILE = /^[A-Za-z0-9._-]+\\.pikg$/\nconst APP_NAME = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/\nconst VERSION = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst SHA256_ID = /^sha256:[0-9a-f]{64}$/\nconst OBJECT_ID = /^(?:appdoc|pkg):[0-9a-f]{64}$/\nconst SAFE_GENERATED_FILE = /^[A-Za-z0-9._-]+$/\nconst OBJECT_OUTPUT = { type: 'object' as const, additionalProperties: true }\nconst APP_KINDS = ['static-web', 'script', 'docker', 'agent-skills']\nconst PATH_KINDS: Record<string, { key: string; category: string; selectorType: string }> = {\n 'static-web': { key: 'web', category: 'web', selectorType: 'static' },\n script: { key: 'script', category: 'dapp', selectorType: 'single' },\n 'agent-skills': { key: 'agent_skills', category: 'agent_skills', selectorType: 'single' },\n}\n\nexport interface DockerImageInfo {\n id: string\n architecture: string\n canonicalName: string\n}\n\nexport interface DockerClient {\n inspect(reference: string): Promise<DockerImageInfo>\n save(imageId: string, destinationTarGz: string): Promise<void>\n}\n\nexport interface PikgModuleDependencies {\n docker?: DockerClient\n now?: () => number\n}\n\ninterface AppMeta {\n schema_version: 1\n did: string\n name: string\n version: string\n owner: string\n author: string\n show_name: string\n categories: string[]\n permissions: unknown[]\n content_handlers?: unknown[]\n selector_type: string\n service_config_tips: Record<string, unknown>\n}\n\ninterface PathSource {\n type: 'path'\n path: string\n}\n\ninterface DockerSource {\n type: 'docker-image'\n image: string\n}\n\ninterface SubpackageInput {\n selector?: Record<string, string>\n required: boolean\n source: PathSource | DockerSource\n}\n\ninterface PikgMeta {\n schema_version: 1\n output_dir: string\n pikg_file: string\n sub_pkgs: Record<string, SubpackageInput>\n}\n\ninterface GeneratedFileRecord {\n size: number\n digest: string\n}\n\ninterface DistManifest {\n schema_version: 1\n tool_version: string\n meta_root_id: string\n source_fingerprint: string\n app_doc_object_id: string\n pikg_file: string\n generated_files: Record<string, GeneratedFileRecord>\n subpackages: Record<\n string,\n { source_kind: string; size: number; digest: string; pkg_objid: string }\n >\n}\n\ninterface PreparedSubpackage {\n key: string\n input: SubpackageInput\n payloadPath: string\n digest: GeneratedFileRecord\n docker?: DockerImageInfo\n}\n\nfunction packageEnvironmentQualifier(\n key: string,\n selector: Record<string, string> | undefined,\n): string {\n const effective = selector ?? derivedSelector(key)\n const os = effective?.os\n const arch = effective?.arch\n if (!os || !arch) return 'all'\n const environmentOs = os === 'macos' ? 'apple' : os\n const environmentArch = arch === 'x86_64' ? 'amd64' : arch\n const qualifier = `nightly-${environmentOs}-${environmentArch}`\n return new Set([\n 'nightly-linux-amd64',\n 'nightly-linux-aarch64',\n 'nightly-windows-amd64',\n 'nightly-windows-aarch64',\n 'nightly-apple-amd64',\n 'nightly-apple-aarch64',\n ]).has(qualifier)\n ? qualifier\n : 'all'\n}\n\nexport function createPikgModule(dependencies: PikgModuleDependencies = {}): CommandModule {\n const docker = dependencies.docker ?? new LocalDockerClient()\n const now = dependencies.now ?? reproducibleBuildTimestamp\n return {\n name: 'pikg',\n summary: 'Build and verify local PIKG release candidates',\n commands: [\n {\n verb: 'doctor',\n summary: 'Inspect the local SDK, Tool, host policy, metadata, and target profile',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg doctor', 'buckyos pikg doctor ./dapp_meta'],\n handler: async (ctx, input) => await doctorCommand(ctx, input),\n },\n {\n verb: 'init',\n summary: 'Create local PIKG development metadata',\n description: 'Creates only dapp_meta/app.json and dapp_meta/pikg.json.',\n positionals: [\n { name: 'project_dir', description: 'Existing App project directory', required: false },\n ],\n options: [\n { name: 'name', description: 'App name', type: 'string' },\n { name: 'owner', description: 'Owner DID', type: 'string' },\n {\n name: 'kind',\n description: 'Initial App kind',\n type: 'string',\n enum: APP_KINDS,\n },\n {\n name: 'source',\n description: 'Build output path or local Docker image',\n type: 'string',\n },\n { name: 'version', description: 'Initial App version', type: 'string' },\n { name: 'app-did', property: 'app_did', description: 'Explicit App DID', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n project_dir: { type: 'string', minLength: 1 },\n name: { type: 'string', minLength: 1 },\n owner: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: APP_KINDS },\n source: { type: 'string', minLength: 1 },\n version: { type: 'string', minLength: 1 },\n app_did: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos pikg init .',\n 'buckyos --non-interactive pikg init . --owner did:bns:root --kind static-web --source ./web/dist',\n 'buckyos --non-interactive pikg init . --owner did:bns:root --kind agent-skills --source ./skills',\n ],\n handler: async (ctx, input) => await initCommand(ctx, input, docker),\n },\n {\n verb: 'build',\n summary: 'Build a managed dapp_dist snapshot',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg build ./dapp_meta'],\n handler: async (ctx, input) => await buildCommand(ctx, input, docker, now),\n },\n {\n verb: 'pack',\n summary: 'Pack and verify a complete PIKG',\n positionals: [\n { name: 'dist_dir', description: 'Managed dapp_dist directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { dist_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg pack ./dapp_dist'],\n handler: async (ctx, input) => await packCommand(ctx, input),\n },\n {\n verb: 'info',\n summary: 'Strictly verify and inspect a local PIKG',\n positionals: [{ name: 'pikg_path', description: 'Local .pikg file' }],\n inputSchema: {\n type: 'object',\n properties: { pikg_path: { type: 'string', minLength: 1 } },\n required: ['pikg_path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos pikg info ./dapp_dist/demo-0.1.0.pikg'],\n handler: async (ctx, input) =>\n await inspectPikg(resolveFromCwd(ctx, expectInputString(input, 'pikg_path'))),\n },\n {\n verb: 'clean',\n summary: 'Safely delete a managed dapp_dist',\n positionals: [\n { name: 'meta_dir', description: 'dapp_meta directory', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { meta_dir: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos --non-interactive --yes pikg clean ./dapp_meta'],\n handler: async (ctx, input) => await cleanCommand(ctx, input),\n },\n ],\n }\n}\n\nfunction reproducibleBuildTimestamp(): number {\n const configured = getHost().env('SOURCE_DATE_EPOCH')\n if (configured === undefined) return Math.floor(Date.now() / 1000)\n if (!/^\\d+$/.test(configured)) {\n throw new UsageError(\n 'INVALID_SOURCE_DATE_EPOCH',\n 'SOURCE_DATE_EPOCH must be a non-negative integer number of seconds',\n )\n }\n const seconds = Number(configured)\n if (!Number.isSafeInteger(seconds)) {\n throw new UsageError(\n 'INVALID_SOURCE_DATE_EPOCH',\n 'SOURCE_DATE_EPOCH is outside the supported integer range',\n )\n }\n return seconds\n}\n\nasync function doctorCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = resolveFromCwd(ctx, metaInput)\n const checks: Array<Record<string, unknown>> = []\n let appMeta: Record<string, unknown> | undefined\n let pikgMeta: Record<string, unknown> | undefined\n for (\n const [name, path] of [\n ['app_metadata', join(metaDir, 'app.json')],\n ['pikg_metadata', join(metaDir, 'pikg.json')],\n ] as const\n ) {\n try {\n const value = await readJson(path, name)\n if (name === 'app_metadata') appMeta = value\n else pikgMeta = value\n checks.push({ name, status: 'ok', path })\n } catch (error) {\n checks.push({\n name,\n status: isHostError(error, 'NotFound') ? 'missing' : 'error',\n path,\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n }\n if (appMeta && pikgMeta) {\n try {\n const app = parseAppMeta(appMeta)\n const pikg = parsePikgMeta(pikgMeta, app)\n const missingSources: string[] = []\n for (const subpackage of Object.values(pikg.sub_pkgs)) {\n if (subpackage.source.type !== 'path') continue\n const source = resolve(metaDir, subpackage.source.path)\n try {\n await getHost().lstat(source)\n } catch (error) {\n if (isHostError(error, 'NotFound')) missingSources.push(source)\n else throw error\n }\n }\n checks.push({\n name: 'build_outputs',\n status: missingSources.length === 0 ? 'ok' : 'missing',\n missing: missingSources,\n })\n } catch (error) {\n checks.push({\n name: 'metadata_schema',\n status: 'error',\n detail: error instanceof Error ? error.message : String(error),\n })\n }\n }\n const globalConfig = await ctx.configStore.readConfig()\n const profileName = ctx.config.profileName ?? globalConfig.default_profile\n const profile = profileName ? await ctx.configStore.readProfile(profileName) : undefined\n const host = getHost()\n return {\n healthy: checks.every((check) => check.status === 'ok'),\n tool_version: TOOL_VERSION,\n sdk_version: SDK_VERSION,\n protocol_version: PROTOCOL_VERSION,\n ...policyView(host),\n distribution_manifest: distributionManifestView(await readDistributionManifest(host)),\n target: {\n profile: profileName ?? null,\n zone: ctx.config.zone ?? profile?.zone ?? null,\n endpoint: ctx.config.endpoint ?? profile?.endpoint ?? null,\n compatibility: 'not-checked',\n },\n identity_candidates: await identityCandidateView(ctx.config),\n checks,\n }\n}\n\nasync function initCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n docker: DockerClient,\n): Promise<Record<string, unknown>> {\n const projectInput = optionalInputString(input, 'project_dir') ?? '.'\n const projectDir = await realDirectory(resolveFromCwd(ctx, projectInput), 'project directory')\n let name = optionalInputString(input, 'name') ?? normalizeAppName(basename(projectDir))\n const canPrompt = !ctx.config.nonInteractive && !ctx.interactive && ctx.io.inputIsTerminal\n if (!name) name = await requiredPrompt(ctx, canPrompt, 'App name: ', 'name')\n let owner = optionalInputString(input, 'owner')\n if (!owner) owner = await requiredPrompt(ctx, canPrompt, 'Owner DID: ', 'owner')\n let kind = optionalInputString(input, 'kind')\n if (!kind) {\n kind = await requiredPrompt(\n ctx,\n canPrompt,\n `App kind (${APP_KINDS.join('/')}): `,\n 'kind',\n )\n }\n if (!APP_KINDS.includes(kind)) {\n throw new UsageError('INVALID_APP_KIND', `invalid App kind: ${kind}`)\n }\n let source = optionalInputString(input, 'source')\n if (!source) source = await requiredPrompt(ctx, canPrompt, 'Source: ', 'source')\n const version = optionalInputString(input, 'version') ?? '0.1.0'\n validateAppName(name)\n validateVersion(version)\n const derivedDid = deriveAppDid(name, owner)\n const appDid = optionalInputString(input, 'app_did') ?? derivedDid\n deriveAppNamespace(appDid)\n\n let subpackageKey: string\n let sourceValue: Record<string, string>\n let selector: Record<string, string> | undefined\n let sourceSummary: Record<string, unknown>\n if (kind === 'docker') {\n const image = await docker.inspect(source)\n const arch = normalizeArch(image.architecture)\n subpackageKey = arch === 'x86_64'\n ? 'amd64_docker_image'\n : arch === 'aarch64'\n ? 'aarch64_docker_image'\n : (() => {\n throw new UsageError('UNSUPPORTED_ARCHITECTURE', `unsupported Docker architecture: ${arch}`)\n })()\n selector = { os: 'linux', arch }\n sourceValue = { type: 'docker-image', image: source }\n sourceSummary = { type: 'docker-image', image: image.canonicalName, image_id: image.id }\n } else {\n subpackageKey = PATH_KINDS[kind].key\n const absoluteSource = resolve(projectDir, source)\n const persistedSource = isAbsolute(source)\n ? resolve(source)\n : toPortablePath(relative(join(projectDir, 'dapp_meta'), absoluteSource))\n sourceValue = { type: 'path', path: persistedSource }\n sourceSummary = { type: 'path', path: displaySource(projectDir, absoluteSource) }\n try {\n await getHost().lstat(absoluteSource)\n } catch (error) {\n if (isHostError(error, 'NotFound')) {\n await ctx.io.stderr(`warning: source does not exist yet: ${sourceSummary.path}\\n`)\n } else throw error\n }\n }\n\n const appMeta: AppMeta = {\n schema_version: 1,\n did: appDid,\n name,\n version,\n owner,\n author: owner,\n show_name: name,\n categories: [PATH_KINDS[kind]?.category ?? 'dapp'],\n permissions: [],\n selector_type: PATH_KINDS[kind]?.selectorType ?? 'single',\n service_config_tips: {},\n }\n const pikgMeta = {\n schema_version: 1,\n output_dir: '../dapp_dist',\n pikg_file: `${name}-${version}.pikg`,\n sub_pkgs: {\n [subpackageKey]: {\n ...(selector ? { selector } : {}),\n required: true,\n source: sourceValue,\n },\n },\n }\n parseAppMeta({ ...appMeta })\n parsePikgMeta(pikgMeta)\n const metaDir = join(projectDir, 'dapp_meta')\n await initializeMetaDirectory(projectDir, metaDir, appMeta, pikgMeta)\n return {\n project_dir: projectDir,\n meta_dir: metaDir,\n generated_files: [join(metaDir, 'app.json'), join(metaDir, 'pikg.json')],\n app: {\n did: appDid,\n name,\n version,\n owner,\n author: owner,\n show_name: name,\n categories: appMeta.categories,\n permissions: [],\n selector_type: appMeta.selector_type,\n service_config_tips: {},\n },\n subpackage: {\n key: subpackageKey,\n kind,\n source: sourceSummary,\n required: true,\n ...(selector ? { selector } : {}),\n },\n output_dir: join(projectDir, 'dapp_dist'),\n pikg_file: pikgMeta.pikg_file,\n next_command: `buckyos pikg build ${metaDir}`,\n }\n}\n\nasync function buildCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n docker: DockerClient,\n now: () => number,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = await realDirectory(resolveFromCwd(ctx, metaInput), 'dapp_meta')\n const appMeta = parseAppMeta(await readJson(join(metaDir, 'app.json'), 'app.json'))\n const pikgMeta = parsePikgMeta(await readJson(join(metaDir, 'pikg.json'), 'pikg.json'), appMeta)\n const configuredDist = resolve(metaDir, pikgMeta.output_dir)\n await rejectLeafSymlink(configuredDist, 'UNSAFE_OUTPUT_DIR')\n const distDir = await canonicalTarget(configuredDist)\n const projectDir = dirname(metaDir)\n const sourcePaths: string[] = []\n for (const subpackage of Object.values(pikgMeta.sub_pkgs)) {\n if (subpackage.source.type === 'path') {\n sourcePaths.push(await getHost().realPath(resolve(metaDir, subpackage.source.path)))\n }\n }\n assertBuildPaths(metaDir, distDir, sourcePaths)\n await validateReplaceableDist(distDir, metaRootId(metaDir))\n await getHost().mkdir(dirname(distDir), { recursive: true })\n const temporary = await getHost().makeTempDir({\n dir: dirname(distDir),\n prefix: '.buckyos-pikg-build-',\n })\n try {\n const prepared: PreparedSubpackage[] = []\n for (\n const [key, subpackage] of Object.entries(pikgMeta.sub_pkgs).sort(([a], [b]) =>\n a.localeCompare(b)\n )\n ) {\n const payloadPath = join(temporary, `${key}.tar.gz`)\n let dockerInfo: DockerImageInfo | undefined\n if (subpackage.source.type === 'path') {\n const sourcePath = await getHost().realPath(resolve(metaDir, subpackage.source.path))\n const info = await getHost().stat(sourcePath)\n if (info.isDirectory) {\n await createDeterministicTarGz(sourcePath, payloadPath)\n } else if (info.isFile && sourcePath.toLowerCase().endsWith('.tar.gz')) {\n const before = await digestFile(sourcePath)\n const beforeStat = statIdentity(await getHost().stat(sourcePath))\n await getHost().copyFile(sourcePath, payloadPath)\n const after = await digestFile(sourcePath)\n const afterStat = statIdentity(await getHost().stat(sourcePath))\n const copied = await digestFile(payloadPath)\n if (\n beforeStat !== afterStat || before.size !== after.size ||\n before.sha256 !== after.sha256 || copied.size !== before.size ||\n copied.sha256 !== before.sha256\n ) {\n throw new ToolError('SOURCE_CHANGED', `source changed while copied: ${key}`)\n }\n } else {\n throw new UsageError(\n 'INVALID_SOURCE',\n `${key} source must be a directory or .tar.gz file`,\n )\n }\n } else {\n dockerInfo = await docker.inspect(subpackage.source.image)\n if (!SHA256_ID.test(dockerInfo.id)) {\n throw new ToolError(\n 'DOCKER_IDENTITY_INVALID',\n `Docker image ${key} has no immutable image ID`,\n )\n }\n await docker.save(dockerInfo.id, payloadPath)\n const after = await docker.inspect(dockerInfo.id)\n if (after.id !== dockerInfo.id) {\n throw new ToolError(\n 'SOURCE_CHANGED',\n `Docker image identity changed while exporting: ${key}`,\n )\n }\n }\n const digest = await digestFile(payloadPath)\n prepared.push({\n key,\n input: subpackage,\n payloadPath,\n digest: { size: digest.size, digest: `sha256:${digest.sha256}` },\n ...(dockerInfo ? { docker: dockerInfo } : {}),\n })\n }\n\n const timestamp = now()\n if (!Number.isSafeInteger(timestamp) || timestamp < 0) throw new Error('invalid clock value')\n const namespace = deriveAppNamespace(appMeta.did)\n const packageObjects: Record<string, Record<string, unknown>> = {}\n const contentIndex: PackageMetaFile['content_index'] = {}\n const pkgList: Record<string, Record<string, unknown>> = {}\n const generatedSubpackages: DistManifest['subpackages'] = {}\n const packageNames = new Set<string>()\n for (const item of prepared) {\n const packageName = `${packageEnvironmentQualifier(item.key, item.input.selector)}.${\n packageSuffix(item.key)\n }.${namespace}`\n if (packageNames.has(packageName)) {\n throw new UsageError('PACKAGE_NAME_COLLISION', `subpackage names collide at ${packageName}`)\n }\n packageNames.add(packageName)\n const payloadHash = item.digest.digest.slice('sha256:'.length)\n const packageMeta = createPackageMeta(\n packageName,\n appMeta.version,\n appMeta.author,\n appMeta.owner,\n { size: item.digest.size, sha256: payloadHash, crc32: 0 },\n timestamp,\n )\n packageObjects[packageMeta.objectId] = packageMeta.value\n if (contentIndex[item.digest.digest]) {\n throw new UsageError(\n 'DUPLICATE_PAYLOAD_DIGEST',\n `subpackages cannot share the same payload digest: ${item.key}`,\n )\n }\n contentIndex[item.digest.digest] = {\n sub_pkg_name: item.key,\n path: `${item.key}.tar.gz`,\n format: 'tar.gz',\n size: item.digest.size,\n digest: item.digest.digest,\n }\n const selector = item.input.selector\n pkgList[item.key] = {\n pkg_id: `${packageName}#${appMeta.version}`,\n pkg_objid: packageMeta.objectId,\n ...(item.docker\n ? {\n docker_image_name: item.docker.canonicalName,\n docker_image_digest: item.docker.id,\n }\n : {}),\n ...(selector ? { selector } : {}),\n required: item.input.required,\n }\n generatedSubpackages[item.key] = {\n source_kind: item.input.source.type,\n size: item.digest.size,\n digest: item.digest.digest,\n pkg_objid: packageMeta.objectId,\n }\n }\n const appDoc: Record<string, unknown> = {\n schema_version: 1,\n doc_type: 'app',\n did: appMeta.did,\n name: appMeta.name,\n version: appMeta.version,\n app_type: appMeta.categories[0],\n author: appMeta.author,\n owner: appMeta.owner,\n controller: appMeta.owner,\n create_time: timestamp,\n last_update_time: timestamp,\n exp: timestamp + APP_DOCUMENT_LIFETIME_SECONDS,\n categories: appMeta.categories,\n pkg_list: pkgList,\n show_name: appMeta.show_name,\n ...(appMeta.permissions.length ? { permissions: appMeta.permissions } : {}),\n ...(appMeta.content_handlers?.length ? { content_handlers: appMeta.content_handlers } : {}),\n selector_type: appMeta.selector_type,\n service_config_tips: appMeta.service_config_tips,\n }\n const appObjectId = appDocObjectId(appDoc)\n const packageMeta: PackageMetaFile = {\n '@schema': PACKAGE_META_SCHEMA,\n app_doc_id: appObjectId,\n package_objects: packageObjects,\n content_index: contentIndex,\n }\n await writeJson(join(temporary, APPDOC_ENTRY), appDoc)\n await writeJson(join(temporary, PACKAGE_META_ENTRY), packageMeta)\n const validated = await validateSnapshot(temporary, appDoc, packageMeta)\n const generatedFiles: DistManifest['generated_files'] = {}\n for (\n const name of [\n APPDOC_ENTRY,\n PACKAGE_META_ENTRY,\n ...prepared.map((item) => `${item.key}.tar.gz`),\n ]\n ) {\n const digest = await digestFile(join(temporary, name))\n generatedFiles[name] = { size: digest.size, digest: `sha256:${digest.sha256}` }\n }\n const manifest: DistManifest = {\n schema_version: 1,\n tool_version: TOOL_VERSION,\n meta_root_id: metaRootId(metaDir),\n source_fingerprint: `sha256:${\n stableJsonDigest({\n app: appMeta,\n pikg: pikgMeta,\n payloads: generatedSubpackages,\n })\n }`,\n app_doc_object_id: appObjectId,\n pikg_file: pikgMeta.pikg_file,\n generated_files: generatedFiles,\n subpackages: generatedSubpackages,\n }\n await writeJson(join(temporary, DIST_MANIFEST_NAME), manifest)\n await replaceDirectory(temporary, distDir)\n return {\n meta_dir: metaDir,\n dist_dir: distDir,\n app_did: appMeta.did,\n app_doc_object_id: appObjectId,\n subpackage_count: validated.subpackages.length,\n subpackages: validated.subpackages.map((item) => ({\n key: item.key,\n source_kind: pikgMeta.sub_pkgs[item.key].source.type,\n size: item.payload_size,\n digest: item.payload_digest,\n pkg_objid: item.pkg_objid,\n })),\n ready_for_pack: true,\n next_command: `buckyos pikg pack ${distDir}`,\n project_dir: projectDir,\n }\n } catch (error) {\n await removeTreeIfExists(temporary)\n throw error\n }\n}\n\nasync function packCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const distInput = optionalInputString(input, 'dist_dir') ?? './dapp_dist'\n const distDir = await safeExistingDirectory(resolveFromCwd(ctx, distInput), 'dapp_dist')\n const manifest = await validateManagedDist(distDir, undefined, true)\n const appDoc = await readJson(join(distDir, APPDOC_ENTRY), APPDOC_ENTRY)\n const packageMeta = parsePackageMeta(\n await readJson(join(distDir, PACKAGE_META_ENTRY), PACKAGE_META_ENTRY),\n )\n const validated = await validateSnapshot(distDir, appDoc, packageMeta)\n if (validated.appDocObjectId !== manifest.app_doc_object_id) {\n throw new ToolError(\n 'INVALID_PACKAGE',\n 'snapshot AppDoc Object ID differs from ownership manifest',\n )\n }\n const temporary = join(distDir, `.${manifest.pikg_file}.tmp-${crypto.randomUUID()}`)\n const finalPath = join(distDir, manifest.pikg_file)\n try {\n await packSnapshot(distDir, temporary, appDoc, packageMeta)\n const inspection = await inspectPikg(temporary)\n if (inspection.app.app_doc_object_id !== manifest.app_doc_object_id) {\n throw new ToolError(\n 'INVALID_PACKAGE',\n 'PIKG self-check returned a different AppDoc Object ID',\n )\n }\n await replaceFile(temporary, finalPath)\n const digest = await digestFile(finalPath)\n return {\n dist_dir: distDir,\n pikg_path: finalPath,\n size: digest.size,\n pikg_digest: `sha256:${digest.sha256}`,\n app_doc_object_id: inspection.app.app_doc_object_id,\n validation: 'passed',\n }\n } catch (error) {\n await removeFileIfExists(temporary)\n throw error\n }\n}\n\nasync function cleanCommand(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const metaInput = optionalInputString(input, 'meta_dir') ?? './dapp_meta'\n const metaDir = await realDirectory(resolveFromCwd(ctx, metaInput), 'dapp_meta')\n const appMeta = parseAppMeta(await readJson(join(metaDir, 'app.json'), 'app.json'))\n const pikgMeta = parsePikgMeta(\n await readJson(join(metaDir, 'pikg.json'), 'pikg.json'),\n appMeta,\n )\n const configuredDist = resolve(metaDir, pikgMeta.output_dir)\n assertSafeCleanTarget(ctx, metaDir, configuredDist, [])\n await rejectLeafSymlink(configuredDist, 'UNSAFE_CLEAN_TARGET')\n const distDir = await canonicalTarget(configuredDist)\n try {\n await getHost().lstat(distDir)\n } catch (error) {\n if (isHostError(error, 'NotFound')) {\n return { meta_dir: metaDir, dist_dir: distDir, removed: false }\n }\n throw error\n }\n const sourcePaths: string[] = []\n for (const subpackage of Object.values(pikgMeta.sub_pkgs)) {\n if (subpackage.source.type === 'path') {\n try {\n sourcePaths.push(await getHost().realPath(resolve(metaDir, subpackage.source.path)))\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n }\n }\n assertSafeCleanTarget(ctx, metaDir, distDir, sourcePaths)\n await validateManagedDist(distDir, metaRootId(metaDir), true, 'UNSAFE_CLEAN_TARGET')\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || ctx.interactive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'pikg clean requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n )\n }\n const answer = await ctx.io.prompt(`Delete managed PIKG output ${distDir}? [y/N] `)\n if (!answer || !['y', 'yes'].includes(answer.trim().toLowerCase())) {\n throw new ToolError('CONFIRMATION_DECLINED', 'PIKG clean was declined', EXIT_PERMISSION)\n }\n }\n await getHost().remove(distDir, { recursive: true })\n return { meta_dir: metaDir, dist_dir: distDir, removed: true }\n}\n\nfunction parseAppMeta(value: Record<string, unknown>): AppMeta {\n rejectUnknown(\n value,\n [\n 'schema_version',\n 'did',\n 'name',\n 'version',\n 'owner',\n 'author',\n 'show_name',\n 'categories',\n 'permissions',\n 'content_handlers',\n 'selector_type',\n 'service_config_tips',\n ],\n 'app.json',\n )\n if (value.schema_version !== 1) {\n throw new UsageError('UNSUPPORTED_SCHEMA_VERSION', 'app.json.schema_version must be 1')\n }\n const name = developmentString(value.name, 'app.json.name')\n validateAppName(name)\n const version = developmentString(value.version, 'app.json.version')\n validateVersion(version)\n const did = developmentString(value.did, 'app.json.did')\n const owner = developmentString(value.owner, 'app.json.owner')\n deriveAppNamespace(did)\n const categories = value.categories\n if (\n !Array.isArray(categories) || !categories.length ||\n categories.some((item) => typeof item !== 'string')\n ) {\n throw new UsageError(\n 'SCHEMA_VALIDATION_FAILED',\n 'app.json.categories must be a non-empty string array',\n )\n }\n const permissions = developmentValidation(\n () => validatePermissions(value.permissions ?? [], 'app.json.permissions'),\n )\n const serviceConfig = developmentValidation(() =>\n validateServiceConfigTips(\n value.service_config_tips ?? {},\n 'app.json.service_config_tips',\n )\n )\n return {\n schema_version: 1,\n did,\n name,\n version,\n owner,\n author: developmentString(value.author, 'app.json.author'),\n show_name: developmentString(value.show_name, 'app.json.show_name'),\n categories: categories as string[],\n permissions,\n ...(value.content_handlers === undefined ? {} : { content_handlers: developmentValidation(() => validateContentHandlers(value.content_handlers, permissions)) }),\n selector_type: developmentString(value.selector_type, 'app.json.selector_type'),\n service_config_tips: serviceConfig,\n }\n}\n\nfunction parsePikgMeta(value: Record<string, unknown>, app?: AppMeta): PikgMeta {\n rejectUnknown(value, ['schema_version', 'output_dir', 'pikg_file', 'sub_pkgs'], 'pikg.json')\n if (value.schema_version !== 1) {\n throw new UsageError('UNSUPPORTED_SCHEMA_VERSION', 'pikg.json.schema_version must be 1')\n }\n const outputDir = value.output_dir === undefined\n ? '../dapp_dist'\n : developmentString(value.output_dir, 'pikg.json.output_dir')\n const defaultPikgFile = app ? `${app.name}-${app.version}.pikg` : undefined\n const pikgFile = value.pikg_file === undefined\n ? defaultPikgFile ?? (() => {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', 'pikg.json.pikg_file is required')\n })()\n : developmentString(value.pikg_file, 'pikg.json.pikg_file')\n if (\n !SAFE_PIKG_FILE.test(pikgFile) || pikgFile.includes('..') || basename(pikgFile) !== pikgFile\n ) {\n throw new UsageError('INVALID_PIKG_FILE', 'pikg_file must be a safe .pikg file name')\n }\n const rawSubpackages = developmentObject(value.sub_pkgs, 'pikg.json.sub_pkgs')\n if (!Object.keys(rawSubpackages).length) {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', 'pikg.json.sub_pkgs must not be empty')\n }\n const subpackages: Record<string, SubpackageInput> = {}\n for (const [key, raw] of Object.entries(rawSubpackages)) {\n validateSubpackageName(key)\n const subpackage = developmentObject(raw, `pikg.json.sub_pkgs.${key}`)\n rejectUnknown(subpackage, ['selector', 'required', 'source'], `pikg.json.sub_pkgs.${key}`)\n const selector = developmentValidation(() =>\n canonicalSelector(subpackage.selector, `pikg.json.sub_pkgs.${key}.selector`)\n )\n assertSelectorCompatible(key, selector, `pikg.json.sub_pkgs.${key}.selector`)\n if (subpackage.required !== undefined && typeof subpackage.required !== 'boolean') {\n throw new UsageError('SCHEMA_VALIDATION_FAILED', `${key}.required must be boolean`)\n }\n const source = developmentObject(subpackage.source, `pikg.json.sub_pkgs.${key}.source`)\n if (source.type === 'path') {\n rejectUnknown(source, ['type', 'path'], `pikg.json.sub_pkgs.${key}.source`)\n subpackages[key] = {\n ...(selector ? { selector } : {}),\n required: subpackage.required === undefined ? true : subpackage.required,\n source: { type: 'path', path: developmentString(source.path, `${key}.source.path`) },\n }\n } else if (source.type === 'docker-image') {\n rejectUnknown(source, ['type', 'image'], `pikg.json.sub_pkgs.${key}.source`)\n subpackages[key] = {\n ...(selector ? { selector } : {}),\n required: subpackage.required === undefined ? true : subpackage.required,\n source: {\n type: 'docker-image',\n image: developmentString(source.image, `${key}.source.image`),\n },\n }\n } else {\n throw new UsageError('INVALID_SOURCE', `${key}.source.type must be path or docker-image`)\n }\n }\n return {\n schema_version: 1,\n output_dir: outputDir,\n pikg_file: pikgFile,\n sub_pkgs: subpackages,\n }\n}\n\nasync function initializeMetaDirectory(\n projectDir: string,\n metaDir: string,\n appMeta: AppMeta,\n pikgMeta: Record<string, unknown>,\n): Promise<void> {\n let existedEmpty = false\n try {\n const stat = await getHost().lstat(metaDir)\n if (!stat.isDirectory || stat.isSymlink) {\n throw new UsageError(\n 'ALREADY_EXISTS',\n 'dapp_meta already exists and is not an empty directory',\n )\n }\n for (const _entry of await getHost().readDir(metaDir)) {\n throw new UsageError('ALREADY_EXISTS', 'dapp_meta already contains files')\n }\n existedEmpty = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n const temporary = await getHost().makeTempDir({ dir: projectDir, prefix: '.buckyos-pikg-init-' })\n try {\n await writeJson(join(temporary, 'app.json'), appMeta)\n await writeJson(join(temporary, 'pikg.json'), pikgMeta)\n parseAppMeta(await readJson(join(temporary, 'app.json'), 'app.json'))\n parsePikgMeta(await readJson(join(temporary, 'pikg.json'), 'pikg.json'), appMeta)\n if (existedEmpty) await getHost().remove(metaDir)\n try {\n await getHost().rename(temporary, metaDir)\n } catch (error) {\n if (existedEmpty) await getHost().mkdir(metaDir)\n throw error\n }\n } catch (error) {\n await removeTreeIfExists(temporary)\n throw error\n }\n}\n\nasync function validateReplaceableDist(distDir: string, expectedMetaRootId: string): Promise<void> {\n try {\n await getHost().lstat(distDir)\n } catch (error) {\n if (isHostError(error, 'NotFound')) return\n throw error\n }\n await validateManagedDist(distDir, expectedMetaRootId, true)\n}\n\nasync function validateManagedDist(\n distDir: string,\n expectedMetaRootId?: string,\n verifyFiles = true,\n unsafeCode = 'UNSAFE_DIST_TARGET',\n): Promise<DistManifest> {\n try {\n const info = await getHost().lstat(distDir)\n if (!info.isDirectory || info.isSymlink) throw new Error('target is not a real directory')\n const manifest = parseDistManifest(\n await readJson(join(distDir, DIST_MANIFEST_NAME), DIST_MANIFEST_NAME),\n )\n if (expectedMetaRootId && manifest.meta_root_id !== expectedMetaRootId) {\n throw new Error('ownership manifest belongs to another dapp_meta')\n }\n const allowed = new Set([\n DIST_MANIFEST_NAME,\n manifest.pikg_file,\n ...Object.keys(manifest.generated_files),\n ])\n for (const entry of await getHost().readDir(distDir)) {\n if (!entry.isFile || entry.isSymlink || !allowed.has(entry.name)) {\n throw new Error(`unmanaged entry exists: ${entry.name}`)\n }\n }\n for (const name of Object.keys(manifest.generated_files)) {\n const info = await getHost().lstat(join(distDir, name))\n if (!info.isFile || info.isSymlink) throw new Error(`generated file is unsafe: ${name}`)\n if (verifyFiles) {\n const expected = manifest.generated_files[name]\n const actual = await digestFile(join(distDir, name))\n if (actual.size !== expected.size || `sha256:${actual.sha256}` !== expected.digest) {\n throw new Error(`generated file was modified: ${name}`)\n }\n }\n }\n return manifest\n } catch (error) {\n if (error instanceof ToolError && error.code === unsafeCode) throw error\n throw new ToolError(\n unsafeCode,\n `managed dist validation failed: ${error instanceof Error ? error.message : String(error)}`,\n 6,\n )\n }\n}\n\nfunction parseDistManifest(value: Record<string, unknown>): DistManifest {\n rejectUnknown(\n value,\n [\n 'schema_version',\n 'tool_version',\n 'meta_root_id',\n 'source_fingerprint',\n 'app_doc_object_id',\n 'pikg_file',\n 'generated_files',\n 'subpackages',\n ],\n DIST_MANIFEST_NAME,\n )\n if (value.schema_version !== 1) throw new Error('unsupported ownership manifest version')\n const pikgFile = String(value.pikg_file ?? '')\n if (\n !SAFE_PIKG_FILE.test(pikgFile) || pikgFile.includes('..') || basename(pikgFile) !== pikgFile\n ) {\n throw new Error('ownership manifest has an unsafe pikg_file')\n }\n const generatedRaw = expectObject(value.generated_files, `${DIST_MANIFEST_NAME}.generated_files`)\n const generated: Record<string, GeneratedFileRecord> = {}\n for (const [name, raw] of Object.entries(generatedRaw)) {\n if (\n !SAFE_GENERATED_FILE.test(name) || name === '.' || name === '..' || name.includes('\\\\') ||\n basename(name) !== name || name === DIST_MANIFEST_NAME || name === pikgFile\n ) {\n throw new Error(`ownership manifest has an unsafe generated file: ${name}`)\n }\n const record = expectObject(raw, `generated_files.${name}`)\n rejectUnknown(record, ['size', 'digest'], `generated_files.${name}`)\n if (typeof record.size !== 'number' || !Number.isSafeInteger(record.size) || record.size < 0) {\n throw new Error(`generated_files.${name}.size is invalid`)\n }\n if (typeof record.digest !== 'string' || !SHA256_ID.test(record.digest)) {\n throw new Error(`generated_files.${name}.digest is invalid`)\n }\n generated[name] = { size: record.size, digest: record.digest }\n }\n if (!generated[APPDOC_ENTRY] || !generated[PACKAGE_META_ENTRY]) {\n throw new Error('ownership manifest is missing required metadata files')\n }\n return {\n schema_version: 1,\n tool_version: String(value.tool_version ?? ''),\n meta_root_id: validateDigestString(value.meta_root_id, 'meta_root_id'),\n source_fingerprint: validateDigestString(value.source_fingerprint, 'source_fingerprint'),\n app_doc_object_id: validateObjectId(value.app_doc_object_id, 'app_doc_object_id'),\n pikg_file: pikgFile,\n generated_files: generated,\n subpackages: expectObject(value.subpackages, 'subpackages') as DistManifest['subpackages'],\n }\n}\n\nfunction assertBuildPaths(metaDir: string, distDir: string, sourcePaths: string[]): void {\n if (pathsOverlap(metaDir, distDir)) {\n throw new UsageError('UNSAFE_OUTPUT_DIR', 'output_dir overlaps dapp_meta')\n }\n for (const source of sourcePaths) {\n if (pathsOverlap(source, distDir)) {\n throw new UsageError('UNSAFE_OUTPUT_DIR', 'output_dir overlaps a subpackage source')\n }\n }\n}\n\nfunction assertSafeCleanTarget(\n ctx: CommandContext,\n metaDir: string,\n distDir: string,\n sourcePaths: string[],\n): void {\n const projectDir = dirname(metaDir)\n const exactProtected = [resolve(ctx.cwd), projectDir]\n const home = getHost().env('HOME') ?? getHost().env('USERPROFILE')\n if (home) exactProtected.push(resolve(home))\n if (\n dirname(distDir) === distDir ||\n exactProtected.some((path) => resolve(path) === resolve(distDir)) ||\n pathsOverlap(metaDir, distDir) || sourcePaths.some((path) => pathsOverlap(path, distDir))\n ) {\n throw new ToolError('UNSAFE_CLEAN_TARGET', 'refusing to clean an unsafe output directory')\n }\n}\n\nasync function replaceDirectory(temporary: string, destination: string): Promise<void> {\n let exists = false\n try {\n await getHost().lstat(destination)\n exists = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n if (!exists) {\n await getHost().rename(temporary, destination)\n return\n }\n const backup = `${destination}.previous-${crypto.randomUUID()}`\n await getHost().rename(destination, backup)\n try {\n await getHost().rename(temporary, destination)\n } catch (error) {\n await getHost().rename(backup, destination)\n throw error\n }\n await getHost().remove(backup, { recursive: true })\n}\n\nasync function replaceFile(temporary: string, destination: string): Promise<void> {\n let exists = false\n try {\n await getHost().lstat(destination)\n exists = true\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n if (!exists) {\n await getHost().rename(temporary, destination)\n return\n }\n const backup = `${destination}.previous-${crypto.randomUUID()}`\n await getHost().rename(destination, backup)\n try {\n await getHost().rename(temporary, destination)\n } catch (error) {\n await getHost().rename(backup, destination)\n throw error\n }\n await removeFileIfExists(backup)\n}\n\nclass LocalDockerClient implements DockerClient {\n async inspect(reference: string): Promise<DockerImageInfo> {\n let result\n try {\n result = await getHost().run('docker', ['image', 'inspect', reference])\n } catch (error) {\n throw new ToolError(\n 'DOCKER_UNAVAILABLE',\n `Docker inspect is unavailable: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_UNAVAILABLE,\n true,\n )\n }\n if (!result.success) {\n throw new ToolError(\n 'DOCKER_IMAGE_NOT_FOUND',\n `local Docker image is unavailable: ${safeDockerError(result.stderr)}`,\n EXIT_UNAVAILABLE,\n )\n }\n let values: unknown\n try {\n values = JSON.parse(new TextDecoder().decode(result.stdout))\n } catch {\n throw new ToolError('DOCKER_INSPECT_INVALID', 'Docker inspect returned invalid JSON')\n }\n if (!Array.isArray(values) || values.length !== 1) {\n throw new ToolError('DOCKER_INSPECT_INVALID', 'Docker inspect returned an unexpected result')\n }\n const value = developmentObject(values[0], 'Docker inspect')\n const id = developmentString(value.Id, 'Docker image ID').toLowerCase()\n if (!SHA256_ID.test(id)) {\n throw new ToolError('DOCKER_IDENTITY_INVALID', 'Docker image ID is not immutable sha256')\n }\n const architecture = developmentString(value.Architecture, 'Docker architecture')\n const tags = Array.isArray(value.RepoTags)\n ? value.RepoTags.filter((tag): tag is string =>\n typeof tag === 'string' && tag !== '<none>:<none>'\n )\n : []\n return {\n id,\n architecture,\n canonicalName: tags.includes(reference) ? reference : tags[0] ?? reference,\n }\n }\n\n async save(imageId: string, destinationTarGz: string): Promise<void> {\n try {\n const result = await getHost().runGzip(\n 'docker',\n ['image', 'save', imageId],\n destinationTarGz,\n )\n if (!result.success) {\n await removeFileIfExists(destinationTarGz)\n throw new ToolError(\n 'DOCKER_EXPORT_FAILED',\n `Docker image save failed: ${safeDockerError(result.stderr)}`,\n EXIT_UNAVAILABLE,\n )\n }\n } catch (error) {\n if (error instanceof ToolError) throw error\n throw new ToolError(\n 'DOCKER_UNAVAILABLE',\n `Docker save is unavailable: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_UNAVAILABLE,\n true,\n )\n }\n }\n}\n\nfunction resolveFromCwd(ctx: CommandContext, value: string): string {\n return isAbsolute(value) ? resolve(value) : resolve(ctx.cwd, value)\n}\n\nasync function realDirectory(path: string, label: string): Promise<string> {\n const real = await getHost().realPath(path)\n const stat = await getHost().stat(real)\n if (!stat.isDirectory) throw new UsageError('INVALID_PATH', `${label} must be a directory`)\n return real\n}\n\nasync function safeExistingDirectory(path: string, label: string): Promise<string> {\n const info = await getHost().lstat(path)\n if (!info.isDirectory || info.isSymlink) {\n throw new UsageError('INVALID_PATH', `${label} must be a real directory`)\n }\n return await getHost().realPath(path)\n}\n\nasync function canonicalTarget(path: string): Promise<string> {\n const absolute = resolve(path)\n try {\n return await getHost().realPath(absolute)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n const parent = dirname(absolute)\n if (parent === absolute) return absolute\n return join(await canonicalTarget(parent), basename(absolute))\n }\n}\n\nasync function rejectLeafSymlink(path: string, code: string): Promise<void> {\n try {\n if ((await getHost().lstat(path)).isSymlink) {\n throw new ToolError(code, 'configured output_dir must not be a symlink')\n }\n } catch (error) {\n if (isHostError(error, 'NotFound')) return\n throw error\n }\n}\n\nfunction pathsOverlap(left: string, right: string): boolean {\n const leftToRight = relative(resolve(left), resolve(right))\n const rightToLeft = relative(resolve(right), resolve(left))\n const separator = getHost().path.sep\n return leftToRight === '' || !leftToRight.startsWith(`..${separator}`) && leftToRight !== '..' ||\n !rightToLeft.startsWith(`..${separator}`) && rightToLeft !== '..'\n}\n\nfunction metaRootId(metaDir: string): string {\n return `sha256:${sha256Bytes(new TextEncoder().encode(resolve(metaDir)))}`\n}\n\nfunction packageSuffix(key: string): string {\n const suffix = key.toLowerCase().replaceAll(/[^a-z0-9_-]+/g, '-').replaceAll(/^-+|-+$/g, '')\n if (!suffix) {\n throw new UsageError('INVALID_SUBPACKAGE_NAME', `cannot derive package name from ${key}`)\n }\n return suffix\n}\n\nfunction normalizeAppName(value: string): string {\n return value.toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '')\n}\n\nfunction validateAppName(value: string): void {\n if (!APP_NAME.test(value)) throw new UsageError('INVALID_APP_NAME', `invalid App name: ${value}`)\n}\n\nfunction validateVersion(value: string): void {\n if (!VERSION.test(value)) throw new UsageError('INVALID_VERSION', `invalid App version: ${value}`)\n}\n\nfunction deriveAppDid(name: string, owner: string): string {\n const match = /^did:bns:([a-z0-9](?:[a-z0-9-]*[a-z0-9])?)$/.exec(owner)\n if (!match) {\n throw new UsageError(\n 'INVALID_OWNER_DID',\n 'Owner DID must be a standard single-label did:bns DID for an ordinary App',\n )\n }\n return `did:bns:${name}.${match[1]}`\n}\n\nasync function requiredPrompt(\n ctx: CommandContext,\n canPrompt: boolean,\n message: string,\n field: string,\n): Promise<string> {\n if (!canPrompt) {\n throw new UsageError('MISSING_REQUIRED_INPUT', `${field} is required`)\n }\n const answer = await ctx.io.prompt(message)\n if (!answer?.trim()) throw new UsageError('MISSING_REQUIRED_INPUT', `${field} is required`)\n return answer.trim()\n}\n\nfunction optionalInputString(input: Record<string, unknown>, key: string): string | undefined {\n return input[key] === undefined ? undefined : expectInputString(input, key)\n}\n\nfunction expectInputString(input: Record<string, unknown>, key: string): string {\n const value = input[key]\n if (typeof value !== 'string' || !value) {\n throw new UsageError('MISSING_REQUIRED_INPUT', `${key} is required`)\n }\n return value\n}\n\nfunction developmentString(value: unknown, label: string): string {\n try {\n return expectNonEmptyString(value, label)\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nfunction developmentObject(value: unknown, label: string): Record<string, unknown> {\n try {\n return expectObject(value, label)\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nfunction developmentValidation<T>(validate: () => T): T {\n try {\n return validate()\n } catch (error) {\n if (error instanceof ToolError) throw new UsageError('SCHEMA_VALIDATION_FAILED', error.message)\n throw error\n }\n}\n\nasync function readJson(path: string, label: string): Promise<Record<string, unknown>> {\n try {\n const parsed = JSON.parse(await getHost().readTextFile(path))\n return developmentObject(parsed, label)\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new UsageError('INVALID_JSON', `${label} is not valid JSON`)\n }\n throw error\n }\n}\n\nasync function writeJson(path: string, value: unknown): Promise<void> {\n await getHost().writeTextFile(path, `${JSON.stringify(value, null, 2)}\\n`, {\n createNew: true,\n mode: 0o600,\n })\n}\n\nfunction validateDigestString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !SHA256_ID.test(value)) throw new Error(`${label} is invalid`)\n return value\n}\n\nfunction validateObjectId(value: unknown, label: string): string {\n if (typeof value !== 'string' || !OBJECT_ID.test(value)) throw new Error(`${label} is invalid`)\n return value\n}\n\nfunction statIdentity(value: HostFileInfo): string {\n return JSON.stringify({\n size: value.size,\n mtime: value.mtime?.getTime() ?? null,\n dev: value.dev,\n ino: value.ino,\n mode: value.mode,\n })\n}\n\nfunction displaySource(projectDir: string, source: string): string {\n const display = relative(projectDir, source)\n return display && !display.startsWith(`..${getHost().path.sep}`) && display !== '..'\n ? toPortablePath(display)\n : '[external path]'\n}\n\nfunction toPortablePath(path: string): string {\n return path.split(getHost().path.sep).join('/') || '.'\n}\n\nfunction safeDockerError(bytes: Uint8Array): string {\n const text = new TextDecoder().decode(bytes).trim().replaceAll(/[\\r\\n]+/g, ' ')\n return text.slice(0, 500) || 'unknown Docker error'\n}\n\nasync function removeTreeIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path, { recursive: true })\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nasync function removeFileIfExists(path: string): Promise<void> {\n try {\n await getHost().remove(path)\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n","import type { CommandContext } from './context.ts'\nimport { EXIT_OPERATION, EXIT_TIMEOUT, ToolError } from './errors.ts'\n\nconst TASK_MANAGER_SERVICE = 'task-manager'\nconst DEFAULT_POLL_INTERVAL_MS = 500\n\nexport interface TaskObservation {\n revision?: number\n phase: string\n outcome?: string\n message?: string\n error?: {\n code?: string\n message?: string\n retryable?: boolean\n details?: Record<string, unknown>\n }\n data: Record<string, unknown>\n progress?: unknown\n}\n\nexport interface TaskWaitOptions {\n observe?: (ctx: CommandContext, taskId: string) => Promise<TaskObservation>\n pollIntervalMs?: number\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n failOnTaskFailure?: boolean\n onObservation?: (observation: TaskObservation) => Promise<void>\n}\n\nexport async function waitForTask(\n ctx: CommandContext,\n taskId: string,\n options: TaskWaitOptions = {},\n): Promise<Record<string, unknown>> {\n const observe = options.observe ?? observeTask\n const sleep = options.sleep ?? abortableSleep\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS\n const failOnTaskFailure = options.failOnTaskFailure ?? true\n let lastProgress = ''\n let lastRevision: number | undefined\n let reader: Awaited<ReturnType<NonNullable<typeof ctx.clients.createEventReader>>> | undefined\n\n try {\n const remaining = Math.max(1, (ctx.deadline ?? Date.now()) - Date.now())\n const eventSignal = AbortSignal.any([ctx.signal, AbortSignal.timeout(remaining)])\n reader = await ctx.clients.createEventReader?.(`/task_mgr/${taskId}`, eventSignal)\n } catch {\n reader = undefined\n }\n\n try {\n while (true) {\n const observation = await observe(ctx, taskId)\n const progress = JSON.stringify({\n task_id: taskId,\n revision: observation.revision,\n phase: observation.phase,\n outcome: observation.outcome,\n progress: observation.progress,\n message: observation.message,\n })\n const changed = observation.revision === undefined\n ? progress !== lastProgress\n : observation.revision !== lastRevision\n if (changed) {\n if (options.onObservation) await options.onObservation(observation)\n else await ctx.io.stderr(`${progress}\\n`)\n lastProgress = progress\n lastRevision = observation.revision\n }\n\n if (observation.phase === 'Terminal') {\n if (failOnTaskFailure && observation.outcome !== 'Succeeded') {\n const error = observation.error\n throw new ToolError(\n normalizeTaskErrorCode(error?.code, observation.outcome),\n error?.message ?? `task ${taskId} ended with ${observation.outcome ?? 'no outcome'}`,\n observation.outcome === 'Canceled' ? EXIT_TIMEOUT : EXIT_OPERATION,\n error?.retryable ?? false,\n { task_id: taskId },\n )\n }\n return observation.data\n }\n\n const remaining = (ctx.deadline ?? Date.now()) - Date.now()\n if (remaining <= 0) {\n throw new ToolError(\n 'TIMEOUT',\n `timed out waiting for task ${taskId}`,\n EXIT_TIMEOUT,\n true,\n { task_id: taskId },\n )\n }\n const interval = Math.min(pollIntervalMs, remaining)\n if (reader) await reader.pullEvent(interval)\n else await sleep(interval, ctx.signal)\n }\n } finally {\n await reader?.close().catch(() => undefined)\n }\n}\n\nasync function observeTask(ctx: CommandContext, taskId: string): Promise<TaskObservation> {\n const response = await ctx.clients.call<unknown>(\n TASK_MANAGER_SERVICE,\n 'get_task',\n { task_id: taskId },\n rpcOptions(ctx),\n )\n const envelope = expectObject(response, 'TaskManager get_task response')\n const task = expectObject(envelope.task ?? envelope, 'TaskManager task')\n const phase = expectString(task.phase, 'task.phase')\n const outcome = optionalString(task.outcome)\n const taskError = isObject(task.error) ? task.error : undefined\n return {\n revision: typeof task.revision === 'number' ? task.revision : undefined,\n phase,\n outcome,\n message: optionalString(task.message),\n error: taskError\n ? {\n code: optionalString(taskError.code),\n message: optionalString(taskError.message),\n retryable: typeof taskError.retryable === 'boolean' ? taskError.retryable : undefined,\n details: isObject(taskError.detail) ? taskError.detail : undefined,\n }\n : undefined,\n progress: task.progress,\n data: task,\n }\n}\n\nfunction rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nfunction normalizeTaskErrorCode(code: string | undefined, outcome: string | undefined): string {\n if (code) return code.trim().replaceAll(/[^A-Za-z0-9]+/g, '_').toUpperCase()\n return outcome === 'Canceled' ? 'CANCELED' : 'TASK_FAILED'\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined\n}\n\nfunction expectString(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be a string`, 9)\n }\n return value\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!isObject(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, 9)\n }\n return value\n}\n\nfunction abortableSleep(milliseconds: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n return Promise.reject(new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT))\n }\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, milliseconds)\n const onAbort = () => {\n clearTimeout(timer)\n reject(new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT))\n }\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import { namelib, ndm_proxy, ndn } from 'buckyos/node'\nimport type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport {\n EXIT_AUTH,\n EXIT_INTERNAL,\n EXIT_OPERATION,\n EXIT_PERMISSION,\n EXIT_TIMEOUT,\n EXIT_UNAVAILABLE,\n ToolError,\n UsageError,\n} from '../core/errors.ts'\nimport { type TaskObservation, waitForTask } from '../core/task.ts'\nimport { getHost, type HostFile, type HostFileInfo, isHostError } from '../runtime/host.ts'\n\nconst isAbsolute = (path: string) => getHost().path.isAbsolute(path)\nconst resolve = (...parts: string[]) => getHost().path.resolve(...parts)\n\nconst CONTROL_PANEL_SERVICE = 'control-panel'\nconst PLAN_SCHEMA_VERSION = 4\nconst STAGING_RELEASE_TIMEOUT_MS = 5_000\nconst ZIP_LOCAL_MAGIC = [0x50, 0x4b, 0x03, 0x04] as const\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst INSTALL_POLICIES = [\n 'strict-public',\n 'normal',\n 'trusted-share',\n 'local-developer',\n 'system-internal',\n] as const\n\ntype PikgPurpose = 'inspect' | 'install'\ntype SourceKind = 'catalog' | 'pikg' | 'url'\n\nexport interface PikgSnapshot {\n kind: 'pikg' | 'url'\n display: string\n path: string\n localFileId?: string\n digest: string\n size: number\n}\n\nexport interface PikgStagingMetadata {\n schema_version: number\n handle: string\n pikg_digest: string\n size: number\n purpose: PikgPurpose\n expires_at?: number\n}\n\nexport interface AppModuleDependencies {\n download?: (url: URL, signal: AbortSignal) => Promise<Uint8Array>\n stagePikg?: (\n ctx: CommandContext,\n snapshot: PikgSnapshot,\n purpose: PikgPurpose,\n ) => Promise<PikgStagingMetadata>\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n}\n\ninterface CatalogSource {\n kind: 'catalog'\n display: string\n serviceSource: { kind: 'identifier'; identifier: string }\n}\n\ninterface StagedSource {\n kind: 'pikg' | 'url'\n display: string\n snapshot: PikgSnapshot\n staging: PikgStagingMetadata\n serviceSource: { kind: 'local_pikg'; staging_handle: string }\n}\n\ntype PreparedSource = CatalogSource | StagedSource\n\ninterface InstallInspection {\n schema_version: number\n plan: Record<string, unknown>\n resolution_status: Record<string, unknown>\n status: Record<string, unknown>\n}\n\nexport function createAppModule(dependencies: AppModuleDependencies = {}): CommandModule {\n const commands = [\n fetchCommand(dependencies),\n listCommand(),\n getCommand(),\n installCommand(dependencies),\n upgradeCommand(dependencies),\n uninstallCommand(dependencies),\n cancelCommand(),\n lifecycleCommand('start', 'Start an installed App'),\n lifecycleCommand('stop', 'Stop an installed App'),\n restartCommand(),\n statusCommand(),\n publishCommand(),\n ]\n return {\n name: 'app',\n summary: 'Inspect, install, upgrade, and control Apps',\n commands: commands.map((command) => {\n const handler = command.handler\n return {\n ...command,\n handler: async (ctx, input) => sanitizeAppOutput(await handler(ctx, input)),\n }\n }),\n }\n}\n\nfunction cancelCommand(): CommandDefinition {\n return {\n verb: 'cancel',\n summary: 'Cancel an installation or upgrade task and release its App mutation',\n positionals: [{ name: 'task_id', description: 'Installation Task ID', required: true }],\n options: [{\n name: 'force',\n description: 'Defer staging cleanup after cancellation',\n type: 'boolean',\n }],\n inputSchema: {\n type: 'object',\n properties: { task_id: { type: 'string', minLength: 1 }, force: { type: 'boolean' } },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app cancel t-0123456789abcdef0123456789abcdef --force'],\n handler: async (ctx, input) =>\n await callControl(ctx, 'apps.install.cancel', {\n task_id: expectString(input, 'task_id'),\n force: input.force === true,\n }),\n }\n}\n\nfunction fetchCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'fetch',\n summary: 'Inspect an App source and optionally write a fresh-install plan',\n positionals: [\n {\n name: 'source',\n description: 'Catalog name/DID, local PIKG path, or HTTP(S) URL',\n required: false,\n },\n ],\n options: sourceOptions([\n { name: 'plan', description: 'Write the v4 InstallPlan to this JSON file', type: 'string' },\n ownerOption(),\n policyOption(),\n ]),\n inputSchema: sourceInputSchema({\n plan: { type: 'string', minLength: 1 },\n owner_user_id: { type: 'string', minLength: 1 },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n target: { type: 'object', additionalProperties: true },\n install_params: { type: 'object', additionalProperties: true },\n }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos app fetch did:bns:app1.alice',\n 'buckyos app fetch ./demo-0.1.0.pikg --plan ./demo.install-plan.json',\n ],\n handler: async (ctx, input) => await fetchApp(ctx, input, dependencies),\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List visible installed Apps',\n inputSchema: emptyInputSchema(),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app list'],\n handler: async (ctx) => await callControl(ctx, 'apps.list', {}),\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return selectorCommand({\n verb: 'get',\n summary: 'Get installation and runtime details for one App',\n access: 'read',\n asyncMode: 'sync',\n handler: async (ctx, input) => {\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const [details, status] = await Promise.all([\n callControl(ctx, 'apps.details', { selector }),\n callControl(ctx, 'apps.status', { selector }),\n ])\n return { details, status }\n },\n })\n}\n\nfunction installCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'install',\n summary: 'Install from a v4 plan or upgrade an existing App from a source',\n positionals: [\n {\n name: 'source',\n description: 'Catalog name/DID, local PIKG path, or HTTP(S) URL',\n required: false,\n },\n ],\n options: sourceOptions([\n { name: 'plan', description: 'Fresh-install v4 InstallPlan JSON file', type: 'string' },\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Preflight and print without submitting',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n policyOption(),\n ]),\n inputSchema: sourceInputSchema({\n plan: { type: 'string', minLength: 1 },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: [\n 'buckyos app install did:bns:app1.alice --plan ./app1.install-plan.json',\n 'buckyos --yes app install https://example.com/app1-1.2.0.pikg',\n ],\n handler: async (ctx, input) => await installApp(ctx, input, dependencies),\n }\n}\n\nfunction upgradeCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n verb: 'upgrade',\n summary: 'Check and apply Catalog upgrades',\n positionals: [\n { name: 'app_name', description: 'Installed App name or DID; omit for all', required: false },\n ],\n options: [\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Only show the upgrade preflight',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n policyOption(),\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n policy: { type: 'string', enum: [...INSTALL_POLICIES] },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: ['buckyos app upgrade', 'buckyos --yes app upgrade did:bns:app1.alice'],\n handler: async (ctx, input) => await upgradeApps(ctx, input, dependencies),\n }\n}\n\nfunction uninstallCommand(dependencies: AppModuleDependencies): CommandDefinition {\n return {\n ...selectorCommand({\n verb: 'uninstall',\n summary: 'Uninstall an App and explicitly retain or delete its managed data',\n access: 'destructive',\n asyncMode: 'task',\n handler: async (ctx, input) => await uninstallApp(ctx, input, dependencies),\n }),\n options: [\n {\n name: 'data',\n description: 'Managed data disposition',\n type: 'string',\n required: true,\n enum: ['retain', 'delete'],\n },\n {\n name: 'dry-run',\n property: 'dry_run',\n description: 'Only show the uninstall preflight',\n type: 'boolean',\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n data: { type: 'string', enum: ['retain', 'delete'] },\n dry_run: { type: 'boolean' },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name', 'data'],\n additionalProperties: false,\n },\n examples: ['buckyos app uninstall app1 --data retain'],\n }\n}\n\nfunction lifecycleCommand(verb: 'start' | 'stop', summary: string): CommandDefinition {\n return {\n ...selectorCommand({\n verb,\n summary,\n access: 'write',\n asyncMode: verb === 'start' ? 'task' : 'either',\n handler: async (ctx, input) => await mutateLifecycle(ctx, input, verb),\n }),\n options: [\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name'],\n additionalProperties: false,\n },\n }\n}\n\nfunction restartCommand(): CommandDefinition {\n return {\n ...selectorCommand({\n verb: 'restart',\n summary: 'Recreate the runtime instances for an installed App',\n access: 'write',\n asyncMode: 'task',\n handler: async (ctx, input) => await mutateLifecycle(ctx, input, 'restart'),\n }),\n options: [\n {\n name: 'strategy',\n description: 'Restart strategy; rolling is currently unsupported',\n type: 'string',\n enum: ['recreate', 'rolling'],\n },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return immediately after task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n app_name: { type: 'string', minLength: 1 },\n strategy: { type: 'string', enum: ['recreate', 'rolling'] },\n no_wait: { type: 'boolean' },\n },\n required: ['app_name'],\n additionalProperties: false,\n },\n examples: ['buckyos app restart app1'],\n }\n}\n\nfunction statusCommand(): CommandDefinition {\n return {\n verb: 'status',\n summary: 'Show desired, task, scheduled, runtime, version, and readiness state',\n positionals: [\n { name: 'app_name', description: 'Installed App name or DID; omit for all', required: false },\n ],\n inputSchema: {\n type: 'object',\n properties: { app_name: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos app status', 'buckyos app status did:bns:app1.alice'],\n handler: async (ctx, input) => {\n if (typeof input.app_name === 'string') {\n const selector = normalizeAppSelector(input.app_name)\n const [status, details] = await Promise.all([\n callControl(ctx, 'apps.status', { selector }),\n callControl(ctx, 'apps.details', { selector }),\n ])\n const detailObject = expectObject(details, 'apps.details response')\n const summary = expectObject(detailObject.summary, 'apps.details summary')\n return {\n ...expectObject(status, 'apps.status response'),\n web_hosts: Array.isArray(summary.web_hosts) ? summary.web_hosts : [],\n }\n }\n const listed = expectObject(await callControl(ctx, 'apps.list', {}), 'apps.list response')\n const apps = Array.isArray(listed.apps) ? listed.apps : []\n const items = await Promise.all(apps.map(async (item) => {\n const app = expectObject(item, 'apps.list item')\n const selector = expectString(app, 'app_instance_id')\n return {\n ...expectObject(\n await callControl(ctx, 'apps.status', { selector }),\n 'apps.status response',\n ),\n web_hosts: Array.isArray(app.web_hosts) ? app.web_hosts : [],\n }\n }))\n return { total: items.length, items }\n },\n }\n}\n\nfunction publishCommand(): CommandDefinition {\n return {\n verb: 'publish',\n summary: 'Package a directory on the control-panel node into the Zone Repo as an App candidate',\n description:\n 'Calls control-panel app.publish: packages <local_dir> (a path on the control-panel node; nothing is uploaded) with the AppDoc template, stores PackageMeta and the AppDoc in the Zone Repo/NamedStore, and stages a self-checked PIKG there. The AppDoc is not Owner-signed and no BNS/App DID record is updated, so this is not an authoritative App release.',\n positionals: [\n { name: 'local_dir', description: 'Absolute source directory on the control-panel node' },\n ],\n options: [\n {\n name: 'app-doc',\n property: 'app_doc',\n description: 'AppDoc template JSON file (pkg_list entries without pkg_objid)',\n type: 'string',\n required: true,\n },\n {\n name: 'app-type',\n property: 'app_type',\n description: 'App type; defaults to the template app_type',\n type: 'string',\n enum: ['dapp', 'web', 'agent'],\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n local_dir: { type: 'string', minLength: 1 },\n app_doc: { type: 'string', minLength: 1 },\n app_type: { type: 'string', enum: ['dapp', 'web', 'agent'] },\n },\n required: ['local_dir', 'app_doc'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos app publish /srv/build/demo-web --app-doc ./demo-web.appdoc.json',\n 'buckyos app publish /srv/build/demo-agent --app-doc ./demo-agent.appdoc.json --app-type agent',\n ],\n handler: async (ctx, input) => {\n const localDir = expectString(input, 'local_dir')\n if (!isAbsolute(localDir)) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n 'local_dir must be an absolute path on the control-panel node',\n )\n }\n let appDoc: unknown\n try {\n appDoc = JSON.parse(\n await getHost().readTextFile(resolveFromCwd(ctx, expectString(input, 'app_doc'))),\n )\n } catch (error) {\n throw new UsageError(\n 'INVALID_APP_DOC',\n `failed to read AppDoc template: ${errorMessage(error)}`,\n )\n }\n if (!isObject(appDoc)) {\n throw new UsageError('INVALID_APP_DOC', 'AppDoc template must be a JSON object')\n }\n const result = expectObject(\n await callControl(ctx, 'app.publish', {\n local_dir: localDir,\n app_doc: appDoc,\n ...(typeof input.app_type === 'string' ? { app_type: input.app_type } : {}),\n }),\n 'app.publish response',\n )\n const { ok: _ok, ...published } = result\n return {\n ...published,\n publish_status: expectString(result, 'publish_status'),\n app_doc_signature: 'not-signed',\n app_did_publication: 'not-published',\n }\n },\n }\n}\n\nasync function fetchApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n const source = await prepareSource(ctx, input, 'inspect', dependencies)\n try {\n let inspection = await inspectSource(ctx, source, input)\n const planPathInput = optionalString(input.plan)\n let planPath: string | undefined\n if (planPathInput) {\n inspection = await finalizePlanChoices(ctx, source, input, inspection)\n const plan = inspection.plan\n assertPortablePlan(plan)\n planPath = resolveFromCwd(ctx, planPathInput)\n await writePlanFile(ctx, planPath, plan)\n }\n return {\n source: sourceSummary(source),\n app: inspection.plan.app,\n source_identity: inspection.plan.source_identity,\n resolution: inspection.resolution_status,\n status: inspection.status,\n plan_path: planPath ?? null,\n plan_fingerprint: planPath ? inspection.plan.plan_fingerprint : null,\n }\n } finally {\n await releaseStaging(ctx, source)\n }\n}\n\nasync function installApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const submittedPlan = optionalString(input.plan)\n ? await readPlanFile(resolveFromCwd(ctx, String(input.plan)))\n : undefined\n const source = await prepareSource(ctx, input, 'install', dependencies)\n let keepStaging = false\n try {\n let inspection = submittedPlan\n ? await recomputePlan(ctx, source, input, submittedPlan)\n : await inspectSource(ctx, source, input)\n verifyPikgBinding(source, submittedPlan ?? inspection.plan)\n const app = expectObject(inspection.plan.app, 'inspection.plan.app')\n const appDid = expectString(app, 'did')\n const plannedOwner = submittedPlan ? expectString(submittedPlan, 'owner_user_id') : undefined\n const installed = await findInstalled(ctx, appDid, plannedOwner)\n\n if (submittedPlan && installed) {\n throw new ToolError(\n 'PLAN_NOT_APPLICABLE',\n 'a fresh-install plan cannot be applied over an installed App',\n )\n }\n if (!submittedPlan && !installed) {\n throw new ToolError(\n 'PLAN_REQUIRED',\n `App is not installed; run app fetch ${source.display} --plan <path> first`,\n )\n }\n\n if (submittedPlan) {\n assertPlanMatchesInspection(submittedPlan, inspection)\n } else {\n const scope = installedScope(installed!)\n inspection = await inspectSource(ctx, source, input, { ...scope, action: 'upgrade' })\n verifyPikgBinding(source, inspection.plan)\n }\n\n if (input.dry_run === true) {\n return {\n action: 'dry_run',\n source: sourceSummary(source),\n plan: inspection.plan,\n status: inspection.status,\n }\n }\n\n if (planUse(inspection.plan) === 'SATISFIED') {\n return satisfiedResult(inspection)\n }\n await confirmChange(ctx, 'install', confirmationSummary(inspection))\n const params = {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(inspection.plan),\n options: installOptions(input),\n plan: submittedPlan ?? inspection.plan,\n approved_plan_fingerprint: expectString(inspection.plan, 'plan_fingerprint'),\n idempotency_key: idempotencyKey(ctx),\n }\n const submitted = expectObject(\n await callControl(ctx, 'apps.submit', params),\n 'apps.submit response',\n )\n if (submitted.action === 'satisfied' || submitted.task_id === null) {\n return submitted\n }\n const taskId = expectString(submitted, 'task_id')\n keepStaging = true\n if (input.no_wait === true) return submitted\n try {\n const status = await waitForTask(ctx, taskId, {\n observe: observeInstallTask,\n sleep: dependencies.sleep,\n })\n return { ...submitted, status }\n } finally {\n keepStaging = false\n }\n } finally {\n if (!keepStaging) await releaseStaging(ctx, source)\n }\n}\n\nasync function upgradeApps(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const selector = typeof input.app_name === 'string'\n ? normalizeAppSelector(input.app_name)\n : undefined\n const check = expectObject(\n await callControl(ctx, 'apps.upgrade.check', selector ? { selector } : {}),\n 'apps.upgrade.check response',\n )\n const items = Array.isArray(check.items) ? check.items : []\n const actionable = items.filter((value) => {\n const item = isObject(value) ? value : {}\n return item.state === 'UPDATE_AVAILABLE' || item.state === 'PERMISSION_RECONFIRM_REQUIRED'\n })\n\n if (input.dry_run === true) return { action: 'dry_run', check }\n if (actionable.length === 0) return { action: 'satisfied', total: items.length, items }\n\n await confirmChange(ctx, 'upgrade', {\n total: items.length,\n update_count: actionable.length,\n items,\n })\n\n let submitted: Record<string, unknown>\n let installTask = false\n if (selector) {\n const item = expectObject(actionable[0], 'upgrade item')\n const appDid = expectString(item, 'app_did')\n const details = await findInstalled(ctx, appDid)\n if (!details) throw new ToolError('RESOURCE_NOT_FOUND', `App is not installed: ${appDid}`)\n const source: CatalogSource = {\n kind: 'catalog',\n display: appDid,\n serviceSource: { kind: 'identifier', identifier: appDid },\n }\n const inspection = await inspectSource(ctx, source, input, {\n ...installedScope(details),\n action: 'upgrade',\n })\n submitted = expectObject(\n await callControl(ctx, 'apps.submit', {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(inspection.plan),\n options: installOptions(input),\n plan: inspection.plan,\n approved_plan_fingerprint: expectString(inspection.plan, 'plan_fingerprint'),\n idempotency_key: idempotencyKey(ctx),\n }),\n 'apps.submit response',\n )\n installTask = submitted.task_id !== null\n } else {\n submitted = expectObject(\n await callControl(ctx, 'apps.upgrade', { idempotency_key: idempotencyKey(ctx) }),\n 'apps.upgrade response',\n )\n }\n if (submitted.task_id === null || submitted.action === 'satisfied') return submitted\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const status = await waitForTask(ctx, taskId, {\n observe: installTask ? observeInstallTask : undefined,\n sleep: dependencies.sleep,\n })\n return { ...submitted, status }\n}\n\nasync function uninstallApp(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: AppModuleDependencies,\n): Promise<Record<string, unknown>> {\n rejectDryRunNoWait(input)\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const status = await callControl(ctx, 'apps.status', { selector })\n const preflight = { action: 'uninstall', data_disposition: input.data, status }\n if (input.dry_run === true) return { action: 'dry_run', preflight }\n await confirmChange(ctx, 'uninstall', preflight)\n const submitted = expectObject(\n await callControl(ctx, 'apps.uninstall', {\n selector,\n data_disposition: input.data,\n idempotency_key: idempotencyKey(ctx),\n }),\n 'apps.uninstall response',\n )\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const task = await waitForTask(ctx, taskId, { sleep: dependencies.sleep })\n return { ...submitted, status: task }\n}\n\nasync function mutateLifecycle(\n ctx: CommandContext,\n input: Record<string, unknown>,\n verb: 'start' | 'stop' | 'restart',\n): Promise<Record<string, unknown>> {\n if (input.strategy === 'rolling') {\n throw new ToolError(\n 'UNSUPPORTED_STRATEGY',\n 'rolling restart is not supported by the current deployment strategy',\n )\n }\n const selector = normalizeAppSelector(expectString(input, 'app_name'))\n const submitted = expectObject(\n await callControl(ctx, `apps.${verb}`, {\n selector,\n idempotency_key: idempotencyKey(ctx),\n ...(verb === 'restart' ? { restart_strategy: input.strategy ?? 'recreate' } : {}),\n }),\n `apps.${verb} response`,\n )\n const taskId = expectString(submitted, 'task_id')\n if (input.no_wait === true) return submitted\n const task = await waitForTask(ctx, taskId)\n return { ...submitted, status: task }\n}\n\nasync function prepareSource(\n ctx: CommandContext,\n input: Record<string, unknown>,\n purpose: PikgPurpose,\n dependencies: AppModuleDependencies,\n): Promise<PreparedSource> {\n const classified = await classifySource(ctx, input)\n if (classified.kind === 'catalog') return classified\n\n const host = getHost()\n const localDirectory = localPikgDirectory(ctx)\n let directory: string\n let localFileId: string | undefined\n if (localDirectory) {\n try {\n await host.mkdir(localDirectory, { recursive: true, mode: 0o700 })\n directory = localDirectory\n localFileId = crypto.randomUUID().replaceAll('-', '')\n } catch (error) {\n if (!isHostError(error, 'PermissionDenied') && !isHostError(error, 'NotFound')) throw error\n }\n }\n if (!localFileId) {\n await host.mkdir(ctx.configStore.root, { recursive: true, mode: 0o700 })\n directory = await host.makeTempDir({ dir: ctx.configStore.root, prefix: '.pikg-' })\n }\n let path = host.path.join(directory!, `${localFileId ?? 'source'}.pikg`)\n const snapshotAt = (destination: string) =>\n classified.kind === 'url'\n ? downloadPikg(classified.url, destination, dependencies.download, ctx.signal)\n : readPikg(classified.path, destination, ctx.signal)\n try {\n let snapshot: PikgSnapshot\n try {\n snapshot = await snapshotAt(path)\n } catch (error) {\n if (!localFileId || !isHostError(error, 'PermissionDenied')) throw error\n await host.remove(path).catch(() => {})\n localFileId = undefined\n await host.mkdir(ctx.configStore.root, { recursive: true, mode: 0o700 })\n directory = await host.makeTempDir({ dir: ctx.configStore.root, prefix: '.pikg-' })\n path = host.path.join(directory, 'source.pikg')\n snapshot = await snapshotAt(path)\n }\n snapshot.localFileId = localFileId\n const stage = dependencies.stagePikg ?? stagePikg\n const metadata = await stage(ctx, snapshot, purpose)\n if (metadata.schema_version !== PLAN_SCHEMA_VERSION) {\n throw new ToolError('UNSUPPORTED_SCHEMA_VERSION', 'staging returned a non-v4 schema')\n }\n if (metadata.pikg_digest !== snapshot.digest || metadata.size !== snapshot.size) {\n throw new ToolError(\n 'PIKG_DIGEST_MISMATCH',\n 'the staged PIKG does not match the client byte snapshot',\n EXIT_OPERATION,\n false,\n {\n expected_digest: snapshot.digest,\n staged_digest: metadata.pikg_digest,\n expected_size: snapshot.size,\n staged_size: metadata.size,\n },\n )\n }\n if (metadata.purpose !== purpose) {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n 'staging purpose does not match the request',\n 9,\n )\n }\n return {\n kind: snapshot.kind,\n display: snapshot.display,\n snapshot,\n staging: metadata,\n serviceSource: { kind: 'local_pikg', staging_handle: metadata.handle },\n }\n } finally {\n await host.remove(localFileId ? path : directory!, { recursive: !localFileId })\n .catch(() => {})\n }\n}\n\nasync function classifySource(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<\n | CatalogSource\n | { kind: 'pikg'; path: string }\n | { kind: 'url'; url: URL }\n> {\n const positional = optionalString(input.source)\n const pikg = optionalString(input.pikg)\n if (positional && pikg) {\n throw new UsageError('ARGUMENT_CONFLICT', '<source> and --pikg are mutually exclusive')\n }\n const raw = pikg ?? positional\n if (!raw) throw new UsageError('MISSING_ARGUMENT', 'source or --pikg is required')\n const forced = pikg ? 'pikg' : optionalString(input.from)\n if (pikg && forced && forced !== 'pikg') {\n throw new UsageError('ARGUMENT_CONFLICT', '--pikg conflicts with --from')\n }\n\n if (forced === 'url') return { kind: 'url', url: parsePikgUrl(raw) }\n if (forced === 'pikg') return { kind: 'pikg', path: resolveFromCwd(ctx, raw) }\n if (forced === 'catalog') {\n return {\n kind: 'catalog',\n display: normalizeCatalogIdentifier(raw),\n serviceSource: { kind: 'identifier', identifier: normalizeCatalogIdentifier(raw) },\n }\n }\n if (forced) throw new UsageError('INVALID_ARGUMENT', `invalid --from value: ${forced}`)\n\n if (/^https?:\\/\\//i.test(raw)) return { kind: 'url', url: parsePikgUrl(raw) }\n const candidatePath = resolveFromCwd(ctx, raw)\n const stat = await tryLstat(candidatePath)\n if (stat) {\n if (!stat.isFile) {\n throw new UsageError('INVALID_PIKG_SOURCE', `PIKG source is not a regular file: ${raw}`)\n }\n return { kind: 'pikg', path: candidatePath }\n }\n if (looksLikeLocalPath(raw)) {\n throw new UsageError('PIKG_NOT_FOUND', `PIKG source does not exist: ${raw}`)\n }\n const identifier = normalizeCatalogIdentifier(raw)\n return {\n kind: 'catalog',\n display: identifier,\n serviceSource: { kind: 'identifier', identifier },\n }\n}\n\nfunction localPikgDirectory(ctx: CommandContext): string | undefined {\n const root = getHost().policy.buckyosRoot\n const hostname = new URL(ctx.connection.endpoint).hostname\n if (!root || !['localhost', '127.0.0.1', '[::1]'].includes(hostname)) return undefined\n return getHost().path.join(root, 'cache', 'control_panel', 'pikg_staging', 'incoming')\n}\n\nasync function* fileChunks(file: HostFile, size: number): AsyncGenerator<Uint8Array> {\n const buffer = new Uint8Array(size)\n while (true) {\n let used = 0\n while (used < buffer.length) {\n const read = await file.read(buffer.subarray(used))\n if (read === null) break\n if (read === 0) throw new UsageError('PIKG_READ_FAILED', 'PIKG read made no progress')\n used += read\n }\n if (used === 0) break\n yield buffer.subarray(0, used)\n }\n}\n\nasync function writePikgSnapshot(\n path: string,\n chunks: AsyncIterable<Uint8Array> | Iterable<Uint8Array>,\n signal: AbortSignal,\n): Promise<{ path: string; digest: string; size: number }> {\n const output = await getHost().open(path, { write: true, createNew: true, mode: 0o600 })\n const hash = getHost().createHash('sha256')\n const magic = new Uint8Array(ZIP_LOCAL_MAGIC.length)\n let size = 0\n try {\n for await (const chunk of chunks) {\n signal.throwIfAborted()\n if (size < magic.length) magic.set(chunk.subarray(0, magic.length - size), size)\n hash.update(chunk)\n size += chunk.length\n if (!Number.isSafeInteger(size)) throw new UsageError('PIKG_TOO_LARGE', 'PIKG is too large')\n let offset = 0\n while (offset < chunk.length) {\n const written = await output.write(chunk.subarray(offset))\n if (written === 0) throw new UsageError('PIKG_WRITE_FAILED', 'PIKG write made no progress')\n offset += written\n }\n }\n validatePikgSnapshot(magic.subarray(0, Math.min(size, magic.length)))\n await output.sync()\n return { path, size, digest: hash.digestHex() }\n } finally {\n await output.close()\n }\n}\n\nasync function readPikg(\n source: string,\n destination: string,\n signal: AbortSignal,\n): Promise<PikgSnapshot> {\n let file: HostFile\n try {\n file = await getHost().open(source, { read: true })\n } catch (error) {\n throw new UsageError('PIKG_READ_FAILED', `failed to open PIKG: ${errorMessage(error)}`)\n }\n try {\n const before = await file.stat()\n if (!before.isFile) throw new UsageError('INVALID_PIKG_SOURCE', 'PIKG source is not a file')\n const snapshot = await writePikgSnapshot(destination, fileChunks(file, 256 * 1024), signal)\n const after = await file.stat()\n if (\n snapshot.size !== before.size || before.size !== after.size ||\n before.mtime?.getTime() !== after.mtime?.getTime()\n ) {\n throw new UsageError('PIKG_READ_FAILED', 'PIKG changed while being read')\n }\n return { kind: 'pikg', display: source, ...snapshot }\n } finally {\n await file.close()\n }\n}\n\nasync function downloadPikg(\n url: URL,\n destination: string,\n downloader: AppModuleDependencies['download'],\n signal: AbortSignal,\n): Promise<PikgSnapshot> {\n let chunks: Uint8Array[] | ReadableStream<Uint8Array> | undefined\n try {\n chunks = downloader ? [await downloader(url, signal)] : await defaultDownload(url, signal)\n const snapshot = await writePikgSnapshot(destination, chunks, signal)\n return { kind: 'url', display: safeUrl(url), ...snapshot }\n } catch (error) {\n if (error instanceof ToolError || isHostError(error, 'PermissionDenied')) throw error\n signal.throwIfAborted()\n throw new ToolError(\n 'PIKG_DOWNLOAD_FAILED',\n `failed to download PIKG: ${errorMessage(error)}`,\n 5,\n true,\n )\n } finally {\n if (chunks instanceof ReadableStream && !chunks.locked) await chunks.cancel().catch(() => {})\n }\n}\n\nasync function defaultDownload(url: URL, signal: AbortSignal): Promise<ReadableStream<Uint8Array>> {\n const response = await fetch(url, { method: 'GET', redirect: 'follow', signal })\n if (!response.ok || !response.body) {\n await response.body?.cancel()\n throw new ToolError(\n 'PIKG_DOWNLOAD_FAILED',\n `PIKG download returned HTTP ${response.status}`,\n 5,\n response.status >= 500,\n )\n }\n return response.body\n}\n\nasync function stagePikg(\n ctx: CommandContext,\n snapshot: PikgSnapshot,\n purpose: PikgPurpose,\n): Promise<PikgStagingMetadata> {\n const identity = { pikg_digest: snapshot.digest, size: snapshot.size, purpose }\n if (snapshot.localFileId) {\n try {\n const value = expectObject(\n await callControl(ctx, 'apps.staging.finalize', {\n ...identity,\n local_file_id: snapshot.localFileId,\n }),\n 'apps.staging.finalize response',\n )\n return parseStagingMetadata(value)\n } catch (error) {\n if (!errorMessage(error).includes('LOCAL_PIKG_UNAVAILABLE')) throw error\n }\n }\n const session = ctx.session\n if (!session) throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n const token = (await session.ensureValid()).token\n const proxy = ndm_proxy.createNdmProxyClient({\n endpoint: gatewayOrigin(ctx.connection.endpoint),\n sessionToken: token,\n fetcher: (request: RequestInfo | URL, init?: RequestInit) =>\n fetch(normalizeNdmRequestUrl(request), { ...init, signal: ctx.signal }),\n })\n let fileObjectId: string\n try {\n const file = await getHost().open(snapshot.path, { read: true })\n const chunks = new ndn.SimpleChunkList()\n const hash = getHost().createHash('sha256')\n try {\n for await (const bytes of fileChunks(file, 32 * 1024 * 1024)) {\n ctx.signal.throwIfAborted()\n hash.update(bytes)\n const chunk = ndn.ChunkId.fromMix256Result(bytes.length, ndn.sha256Bytes(bytes))\n await proxy.putChunk(chunk.toString(), bytes)\n chunks.appendChunk(chunk)\n }\n } finally {\n await file.close()\n }\n if (chunks.total_size !== snapshot.size || hash.digestHex() !== snapshot.digest) {\n throw new ToolError('PIKG_DIGEST_MISMATCH', 'PIKG snapshot changed during upload')\n }\n let content = chunks.body[0].toString()\n if (chunks.body.length > 1) {\n const [id, body] = chunks.genObjId()\n await proxy.putObject({ obj_id: id.toString(), obj_data: body })\n content = id.toString()\n }\n const fileObject = new ndn.FileObject(`${snapshot.digest}.pikg`, snapshot.size, content)\n const [id, body] = fileObject.genObjId()\n await proxy.putObject({ obj_id: id.toString(), obj_data: body })\n fileObjectId = id.toString()\n } catch (error) {\n if (error instanceof ToolError) throw error\n ctx.signal.throwIfAborted()\n throw new ToolError(\n 'PIKG_UPLOAD_FAILED',\n `failed to upload PIKG: ${errorMessage(error)}`,\n 5,\n true,\n )\n }\n const value = expectObject(\n await callControl(ctx, 'apps.staging.finalize', {\n ...identity,\n source_obj_id: fileObjectId,\n }),\n 'apps.staging.finalize response',\n )\n return parseStagingMetadata(value)\n}\n\nfunction parseStagingMetadata(value: Record<string, unknown>): PikgStagingMetadata {\n return {\n schema_version: expectNumber(value, 'schema_version'),\n handle: expectString(value, 'handle'),\n pikg_digest: expectString(value, 'pikg_digest'),\n size: expectNumber(value, 'size'),\n purpose: expectString(value, 'purpose') as PikgPurpose,\n expires_at: optionalNumber(value.expires_at),\n }\n}\n\nfunction normalizeNdmRequestUrl(request: RequestInfo | URL): RequestInfo | URL {\n if (typeof request === 'string') {\n return request.replaceAll('%3A', ':').replaceAll('%3a', ':')\n }\n if (request instanceof URL) {\n return new URL(request.toString().replaceAll('%3A', ':').replaceAll('%3a', ':'))\n }\n return request\n}\n\nasync function inspectSource(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n overrides: Record<string, unknown> = {},\n): Promise<InstallInspection> {\n const result = await callControl(ctx, 'apps.inspect', {\n ...sourceRpcParams(source),\n ...scopeAndChoiceParams(input),\n ...overrides,\n options: installOptions(input),\n })\n return expectInspection(result)\n}\n\nasync function recomputePlan(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n plan: Record<string, unknown>,\n overrides: Record<string, unknown> = {},\n): Promise<InstallInspection> {\n return expectInspection(\n await callControl(ctx, 'apps.plan.recompute', {\n ...sourceRpcParams(source),\n ...planScopeAndOptions(plan),\n ...overrides,\n plan,\n options: installOptions(input),\n }),\n )\n}\n\nasync function finalizePlanChoices(\n ctx: CommandContext,\n source: PreparedSource,\n input: Record<string, unknown>,\n initial: InstallInspection,\n): Promise<InstallInspection> {\n let inspection = initial\n const configReady = readinessValue(inspection, 'config') === 'READY'\n if (ctx.config.nonInteractive) {\n if (!configReady && input.target === undefined && input.install_params === undefined) {\n throw new ToolError(\n 'PLAN_INPUT_REQUIRED',\n 'Installer defaults do not form a complete install plan; provide target/install_params with --input',\n )\n }\n return inspection\n }\n\n await ctx.io.stderr(`${JSON.stringify(confirmationSummary(inspection), null, 2)}\\n`)\n if (!ctx.io.inputIsTerminal || ctx.confirmed) return inspection\n const answer = (await ctx.io.prompt('Accept default install plan? [Y/e/n] '))?.trim()\n .toLowerCase()\n if (answer === 'n' || answer === 'no') {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'install plan creation was declined',\n EXIT_PERMISSION,\n )\n }\n if (answer === 'e' || answer === 'edit') {\n const raw = await ctx.io.prompt('Plan choices JSON ({\"target\":...,\"install_params\":...}): ')\n const choices = parsePlanChoices(raw)\n inspection = await recomputePlan(ctx, source, input, initial.plan, choices)\n }\n if (readinessValue(inspection, 'config') !== 'READY') {\n throw new ToolError(\n 'PLAN_INPUT_REQUIRED',\n 'the selected plan still has unresolved configuration requirements',\n )\n }\n return inspection\n}\n\nasync function findInstalled(\n ctx: CommandContext,\n appDid: string,\n ownerUserId?: string,\n): Promise<Record<string, unknown> | undefined> {\n try {\n return expectObject(\n await callControl(ctx, 'apps.details', {\n selector: appDid,\n ...(ownerUserId ? { owner_user_id: ownerUserId } : {}),\n }),\n 'apps.details response',\n )\n } catch (error) {\n if (error instanceof ToolError && error.code === 'RESOURCE_NOT_FOUND') return undefined\n throw error\n }\n}\n\nasync function observeInstallTask(\n ctx: CommandContext,\n taskId: string,\n): Promise<TaskObservation> {\n const status = expectObject(\n await callControl(ctx, 'apps.install.status', { task_id: taskId }),\n 'apps.install.status response',\n )\n const error = isObject(status.error) ? status.error : undefined\n const sanitizedDetails = error && isObject(error.details)\n ? sanitizeAppOutput(error.details)\n : undefined\n return {\n phase: expectString(status, 'task_phase'),\n outcome: optionalString(status.task_outcome),\n message: installProgressMessage(status),\n error: error\n ? {\n code: optionalString(error.code),\n message: optionalString(error.message),\n retryable: typeof error.retryable === 'boolean' ? error.retryable : undefined,\n details: isObject(sanitizedDetails) ? sanitizedDetails : undefined,\n }\n : undefined,\n data: status,\n }\n}\n\nasync function confirmChange(\n ctx: CommandContext,\n action: string,\n summary: Record<string, unknown>,\n): Promise<void> {\n await ctx.io.stderr(`${JSON.stringify({ action, preflight: summary }, null, 2)}\\n`)\n if (ctx.confirmed) return\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n `${action} requires --yes in non-interactive execution`,\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Proceed with app ${action}? [y/N] `))?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', `${action} was declined`, EXIT_PERMISSION)\n }\n}\n\nasync function callControl<T = unknown>(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<T> {\n try {\n return await ctx.clients.call<T>(CONTROL_PANEL_SERVICE, method, params, rpcOptions(ctx))\n } catch (error) {\n throw normalizeAppServiceError(error)\n }\n}\n\nfunction normalizeAppServiceError(error: unknown): ToolError {\n if (error instanceof ToolError) return error\n const message = errorMessage(error)\n const structured = parseEmbeddedJson(message)\n if (structured && typeof structured.code === 'string') {\n const rawDetails = isObject(structured.details) ? structured.details : structured\n const details = sanitizeAppOutput(rawDetails)\n return new ToolError(\n structured.code,\n typeof structured.message === 'string' ? structured.message : message,\n structured.code === 'AMBIGUOUS_APP_TARGET' ? EXIT_OPERATION : EXIT_OPERATION,\n structured.retryable === true,\n isObject(details) ? details : {},\n )\n }\n const lower = message.toLowerCase()\n if (\n lower.includes('invalid token') || lower.includes('unauthorized') ||\n lower.includes('rpc call error: 401') || lower.includes('session expired') ||\n lower.includes('token expired')\n ) {\n return new ToolError(\n lower.includes('expired') ? 'SESSION_EXPIRED' : 'INVALID_SESSION',\n lower.includes('expired') ? 'the session token has expired' : message,\n EXIT_AUTH,\n )\n }\n if (lower.includes('abort') || lower.includes('cancel')) {\n return new ToolError('CANCELED', 'operation canceled', EXIT_TIMEOUT)\n }\n if (lower.includes('timeout') || lower.includes('timed out')) {\n return new ToolError('TIMEOUT', 'operation timed out', EXIT_TIMEOUT, true)\n }\n if (\n lower.includes('fetch failed') || lower.includes('connection refused') ||\n lower.includes('rpc call error: 502') || lower.includes('rpc call error: 503') ||\n lower.includes('rpc call error: 504')\n ) {\n return new ToolError('SERVICE_UNAVAILABLE', message, EXIT_UNAVAILABLE, true)\n }\n if (message.includes('APP_NOT_INSTALLED') || /not found/i.test(message)) {\n return new ToolError('RESOURCE_NOT_FOUND', message)\n }\n if (/permission|forbidden/i.test(message)) {\n return new ToolError('PERMISSION_DENIED', message, EXIT_PERMISSION)\n }\n if (/rolling restart is not supported/i.test(message)) {\n return new ToolError('UNSUPPORTED_STRATEGY', message)\n }\n return new ToolError('OPERATION_FAILED', message, EXIT_OPERATION)\n}\n\nfunction sourceRpcParams(source: PreparedSource): Record<string, unknown> {\n return { source: source.serviceSource }\n}\n\nfunction scopeAndChoiceParams(input: Record<string, unknown>): Record<string, unknown> {\n return {\n ...(typeof input.owner_user_id === 'string' ? { owner_user_id: input.owner_user_id } : {}),\n ...(isObject(input.target) ? { target: input.target } : {}),\n ...(isObject(input.install_params) ? { install_params: input.install_params } : {}),\n }\n}\n\nfunction planScopeAndOptions(plan: Record<string, unknown>): Record<string, unknown> {\n return {\n owner_user_id: expectString(plan, 'owner_user_id'),\n target: expectObject(plan.target, 'plan.target'),\n install_params: expectObject(plan.install_params, 'plan.install_params'),\n }\n}\n\nfunction installedScope(details: Record<string, unknown>): Record<string, unknown> {\n return {\n owner_user_id: expectString(details, 'owner_user_id'),\n }\n}\n\nfunction installOptions(input: Record<string, unknown>): Record<string, unknown> {\n const policy = optionalString(input.policy) ?? 'normal'\n return { policy: policy.replaceAll('-', '_').toUpperCase() }\n}\n\nfunction sourceSummary(source: PreparedSource): Record<string, unknown> {\n if (source.kind === 'catalog') return { kind: source.kind, identifier: source.display }\n return {\n kind: source.kind,\n source: source.display,\n pikg_digest: source.snapshot.digest,\n size: source.snapshot.size,\n }\n}\n\nfunction confirmationSummary(inspection: InstallInspection): Record<string, unknown> {\n const plan = inspection.plan\n return {\n plan_fingerprint: plan.plan_fingerprint,\n plan_use: plan.plan_use,\n app: plan.app,\n app_instance_id: plan.app_instance_id,\n owner_user_id: plan.owner_user_id,\n target: plan.target,\n selected_packages: plan.selected_packages,\n install_params: plan.install_params,\n readiness: inspection.status.readiness,\n warnings: inspection.status.warnings ?? [],\n }\n}\n\nfunction satisfiedResult(inspection: InstallInspection): Record<string, unknown> {\n return {\n action: 'satisfied',\n task_id: null,\n app_instance_id: inspection.plan.app_instance_id,\n app_doc_object_id: expectObject(inspection.plan.app, 'plan.app').object_id,\n }\n}\n\nfunction assertPlanMatchesInspection(\n plan: Record<string, unknown>,\n inspection: InstallInspection,\n): void {\n const fingerprint = expectString(plan, 'plan_fingerprint')\n if (fingerprint !== inspection.plan.plan_fingerprint) {\n throw new ToolError(\n 'PLAN_STALE',\n 'the plan no longer matches the authoritative source, scope, target, or configuration',\n EXIT_OPERATION,\n false,\n {\n plan_fingerprint: fingerprint,\n current_fingerprint: inspection.plan.plan_fingerprint,\n },\n )\n }\n}\n\nfunction verifyPikgBinding(\n source: PreparedSource,\n plan: Record<string, unknown>,\n): void {\n if (source.kind === 'catalog') return\n const identity = expectObject(plan.source_identity, 'plan.source_identity')\n const digest = expectString(identity, 'pikg_digest')\n if (digest !== source.snapshot.digest) {\n throw new ToolError(\n 'PLAN_STALE',\n 'the PIKG byte snapshot does not match the plan source digest',\n EXIT_OPERATION,\n false,\n { plan_digest: digest, source_digest: source.snapshot.digest },\n )\n }\n}\n\nfunction assertPortablePlan(plan: Record<string, unknown>): void {\n if (plan.schema_version !== PLAN_SCHEMA_VERSION) {\n throw new ToolError(\n 'UNSUPPORTED_SCHEMA_VERSION',\n `InstallPlan schema must be v${PLAN_SCHEMA_VERSION}`,\n )\n }\n expectString(plan, 'plan_fingerprint')\n expectString(plan, 'task_id')\n const allowed = new Set([\n 'schema_version',\n 'plan_use',\n 'task_id',\n 'app_instance_id',\n 'owner_user_id',\n 'source_identity',\n 'app',\n 'app_doc',\n 'resolution',\n 'target',\n 'selected_packages',\n 'required_contents',\n 'install_params',\n 'service_spec_config',\n 'plan_fingerprint',\n 'created_at',\n ])\n for (const key of Object.keys(plan)) {\n if (!allowed.has(key)) {\n throw new ToolError('PLAN_STALE', `InstallPlan contains an unknown field: ${key}`)\n }\n }\n assertNoPlanSecrets(plan, 'plan')\n}\n\nfunction assertNoPlanSecrets(value: unknown, path: string): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => assertNoPlanSecrets(item, `${path}[${index}]`))\n return\n }\n if (!isObject(value)) return\n for (const [key, child] of Object.entries(value)) {\n const normalized = key.toLowerCase()\n const disallowed = normalized === 'staging_handle' || normalized === 'staging_path' ||\n normalized === 'session_token' || normalized === 'refresh_token' ||\n normalized === 'private_key' || normalized === 'password' ||\n normalized.endsWith('_token') || normalized.endsWith('_password') ||\n normalized.endsWith('_private_key') ||\n (normalized.endsWith('secret') && normalized !== 'secret_ref')\n if (disallowed) {\n throw new ToolError('INVALID_PLAN_SECRET', `${path}.${key} is forbidden in InstallPlan`)\n }\n if (\n typeof child === 'string' &&\n (/^[a-z][a-z0-9+.-]*:\\/\\/[^\\s/@:]+:[^\\s/@]+@/i.test(child) ||\n /^(?:postgres(?:ql)?|mysql|mongodb(?:\\+srv)?|redis):\\/\\//i.test(child))\n ) {\n throw new ToolError(\n 'INVALID_PLAN_SECRET',\n `${path}.${key} contains a connection string; use SecretRef`,\n )\n }\n assertNoPlanSecrets(child, `${path}.${key}`)\n }\n}\n\nasync function readPlanFile(path: string): Promise<Record<string, unknown>> {\n let raw: string\n try {\n raw = await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError('PLAN_READ_FAILED', `failed to read InstallPlan: ${errorMessage(error)}`)\n }\n let value: unknown\n try {\n value = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_PLAN_JSON', 'InstallPlan is not valid JSON')\n }\n const plan = expectObject(value, 'InstallPlan')\n assertPortablePlan(plan)\n return plan\n}\n\nasync function writePlanFile(\n ctx: CommandContext,\n path: string,\n plan: Record<string, unknown>,\n): Promise<void> {\n const exists = await tryLstat(path)\n if (exists) {\n if (!exists.isFile) {\n throw new UsageError('INVALID_PLAN_PATH', 'InstallPlan destination is not a regular file')\n }\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n `InstallPlan already exists: ${path}; use --yes to overwrite it`,\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Overwrite existing InstallPlan ${path}? [y/N] `))\n ?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'InstallPlan overwrite was declined',\n EXIT_PERMISSION,\n )\n }\n }\n }\n const content = `${JSON.stringify(plan, null, 2)}\\n`\n try {\n await getHost().writeTextFile(\n path,\n content,\n exists ? { mode: 0o600 } : { createNew: true, mode: 0o600 },\n )\n if (getHost().platform !== 'windows') await getHost().chmod(path, 0o600)\n } catch (error) {\n throw new UsageError('PLAN_WRITE_FAILED', `failed to write InstallPlan: ${errorMessage(error)}`)\n }\n}\n\nasync function releaseStaging(ctx: CommandContext, source: PreparedSource): Promise<void> {\n if (source.kind === 'catalog') return\n try {\n await ctx.clients.call(\n CONTROL_PANEL_SERVICE,\n 'apps.staging.release',\n { staging_handle: source.staging.handle },\n {\n traceId: ctx.traceId,\n timeoutMs: STAGING_RELEASE_TIMEOUT_MS,\n signal: new AbortController().signal,\n },\n )\n } catch (error) {\n await ctx.io.stderr(`warning: failed to release PIKG staging lease: ${errorMessage(error)}\\n`)\n }\n}\n\nfunction expectInspection(value: unknown): InstallInspection {\n const object = expectObject(value, 'apps.inspect response')\n const schemaVersion = expectNumber(object, 'schema_version')\n if (schemaVersion !== PLAN_SCHEMA_VERSION) {\n throw new ToolError(\n 'UNSUPPORTED_SCHEMA_VERSION',\n `Installer returned schema v${schemaVersion}; v${PLAN_SCHEMA_VERSION} is required`,\n )\n }\n const inspection: InstallInspection = {\n schema_version: schemaVersion,\n plan: expectObject(object.plan, 'inspection.plan'),\n resolution_status: expectObject(object.resolution_status, 'inspection.resolution_status'),\n status: expectObject(object.status, 'inspection.status'),\n }\n assertPortablePlan(inspection.plan)\n if (inspection.status.plan_fingerprint !== inspection.plan.plan_fingerprint) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', 'inspection fingerprint fields disagree', 9)\n }\n return inspection\n}\n\nfunction parsePlanChoices(raw: string | null | undefined): Record<string, unknown> {\n if (!raw) throw new ToolError('PLAN_INPUT_REQUIRED', 'plan choices JSON is required')\n let value: unknown\n try {\n value = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_INPUT_JSON', 'plan choices are not valid JSON')\n }\n const choices = expectObject(value, 'plan choices')\n for (const key of Object.keys(choices)) {\n if (key !== 'target' && key !== 'install_params') {\n throw new UsageError('INVALID_ARGUMENT', `unknown plan choice: ${key}`)\n }\n }\n return choices\n}\n\nfunction normalizeCatalogIdentifier(value: string): string {\n const raw = value.trim()\n if (\n !raw || /^https?:\\/\\//i.test(raw) || raw.includes('/') || raw.includes('\\\\') || /\\s/.test(raw)\n ) {\n throw new UsageError('INVALID_APP_NAME', `invalid Catalog App identifier: ${value}`)\n }\n if (raw.startsWith('did:')) {\n return parseAppDid(raw)\n }\n return raw.includes('.') ? raw.toLowerCase() : parseAppDid(`did:bns:${raw}`)\n}\n\nfunction normalizeAppSelector(value: string): string {\n return normalizeCatalogIdentifier(value)\n}\n\nfunction parseAppDid(raw: string): string {\n let did: InstanceType<typeof namelib.DID>\n try {\n did = namelib.DID.fromStr(raw)\n } catch (error) {\n throw new UsageError('INVALID_APP_DID', `invalid App DID: ${errorMessage(error)}`)\n }\n if (did.method === 'key' || did.method === 'dev') {\n throw new UsageError('INVALID_APP_DID', 'key-class DIDs cannot identify an App')\n }\n return did.toString()\n}\n\nfunction parsePikgUrl(value: string): URL {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n throw new UsageError('INVALID_PIKG_URL', `invalid PIKG URL: ${value}`)\n }\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new UsageError('INVALID_PIKG_URL', 'PIKG URL must use HTTP or HTTPS')\n }\n if (url.username || url.password) {\n throw new UsageError('INVALID_PIKG_URL', 'PIKG URL must not contain credentials')\n }\n return url\n}\n\nfunction validatePikgSnapshot(bytes: Uint8Array): void {\n if (bytes.length < ZIP_LOCAL_MAGIC.length) {\n throw new UsageError('INVALID_PIKG', 'PIKG is too small to be a ZIP container')\n }\n if (!ZIP_LOCAL_MAGIC.every((byte, index) => bytes[index] === byte)) {\n throw new UsageError('INVALID_PIKG', 'PIKG magic mismatch: expected a ZIP container')\n }\n}\n\nfunction gatewayOrigin(endpoint: string): string {\n const url = new URL(endpoint)\n const marker = url.pathname.indexOf('/kapi')\n url.pathname = marker >= 0 ? url.pathname.slice(0, marker) || '/' : '/'\n url.search = ''\n url.hash = ''\n return url.toString().replace(/\\/$/, '')\n}\n\nfunction safeUrl(url: URL): string {\n const safe = new URL(url)\n safe.search = ''\n safe.hash = ''\n return safe.toString()\n}\n\nfunction looksLikeLocalPath(value: string): boolean {\n return value.includes('/') || value.includes('\\\\') || value.startsWith('.') ||\n value.toLowerCase().endsWith('.pikg')\n}\n\nasync function tryLstat(path: string): Promise<HostFileInfo | undefined> {\n try {\n return await getHost().lstat(path)\n } catch (error) {\n if (isHostError(error, 'NotFound')) return undefined\n throw new UsageError('FILE_ACCESS_FAILED', `failed to inspect ${path}: ${errorMessage(error)}`)\n }\n}\n\nfunction resolveFromCwd(ctx: CommandContext, path: string): string {\n return isAbsolute(path) ? resolve(path) : resolve(ctx.cwd, path)\n}\n\nfunction parseEmbeddedJson(message: string): Record<string, unknown> | undefined {\n for (let index = message.indexOf('{'); index >= 0; index = message.indexOf('{', index + 1)) {\n try {\n const value = JSON.parse(message.slice(index))\n if (isObject(value)) return value\n } catch {\n // Try the next opening brace; kRPC prefixes structured service errors.\n }\n }\n return undefined\n}\n\nfunction readinessValue(inspection: InstallInspection, field: string): string | undefined {\n const readiness = isObject(inspection.status.readiness) ? inspection.status.readiness : undefined\n return readiness ? optionalString(readiness[field]) : undefined\n}\n\nfunction planUse(plan: Record<string, unknown>): string | undefined {\n return optionalString(plan.plan_use)\n}\n\nfunction installProgressMessage(status: Record<string, unknown>): string | undefined {\n const stage = optionalString(status.stage)\n const progress = isObject(status.progress) ? status.progress : undefined\n const percent = progress && typeof progress.percent === 'number'\n ? `${progress.percent}%`\n : undefined\n return [stage, percent].filter(Boolean).join(' ') || undefined\n}\n\nfunction idempotencyKey(ctx: CommandContext): string {\n return ctx.idempotencyKey ?? crypto.randomUUID()\n}\n\nfunction rejectDryRunNoWait(input: Record<string, unknown>): void {\n if (input.dry_run === true && input.no_wait === true) {\n throw new UsageError('ARGUMENT_CONFLICT', '--dry-run and --no-wait are mutually exclusive')\n }\n}\n\nfunction selectorCommand(options: {\n verb: string\n summary: string\n access: 'read' | 'write' | 'destructive'\n asyncMode: 'sync' | 'task' | 'either'\n handler: CommandDefinition['handler']\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n positionals: [{ name: 'app_name', description: 'Installed App name or DID' }],\n inputSchema: {\n type: 'object',\n properties: { app_name: { type: 'string', minLength: 1 } },\n required: ['app_name'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: options.access },\n asyncMode: options.asyncMode,\n requiresSession: true,\n examples: [`buckyos app ${options.verb} app1`],\n handler: options.handler,\n }\n}\n\nfunction sourceOptions(\n extra: NonNullable<CommandDefinition['options']>,\n): NonNullable<CommandDefinition['options']> {\n return [\n {\n name: 'from',\n description: 'Force source type',\n type: 'string',\n enum: ['catalog', 'pikg', 'url'],\n },\n { name: 'pikg', description: 'Explicit local PIKG path', type: 'string' },\n ...extra,\n ]\n}\n\nfunction sourceInputSchema(extra: Record<string, JsonSchema>): JsonSchema {\n return {\n type: 'object',\n properties: {\n source: { type: 'string', minLength: 1 },\n from: { type: 'string', enum: ['catalog', 'pikg', 'url'] },\n pikg: { type: 'string', minLength: 1 },\n ...extra,\n },\n additionalProperties: false,\n }\n}\n\nfunction emptyInputSchema(): JsonSchema {\n return { type: 'object', properties: {}, additionalProperties: false }\n}\n\nfunction ownerOption(): NonNullable<CommandDefinition['options']>[number] {\n return {\n name: 'owner',\n property: 'owner_user_id',\n description: 'Installation owner user',\n type: 'string',\n }\n}\n\nfunction policyOption(): NonNullable<CommandDefinition['options']>[number] {\n return {\n name: 'policy',\n description: 'Installer trust policy',\n type: 'string',\n enum: [...INSTALL_POLICIES],\n }\n}\n\nfunction rpcOptions(ctx: CommandContext): {\n traceId: string\n timeoutMs: number\n signal: AbortSignal\n} {\n return {\n traceId: ctx.traceId,\n timeoutMs: Math.max(1, (ctx.deadline ?? Date.now()) - Date.now()),\n signal: ctx.signal,\n }\n}\n\nfunction expectObject(value: unknown, label: string): Record<string, unknown> {\n if (!isObject(value)) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} must be an object`, EXIT_INTERNAL)\n }\n return value\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction expectString(object: Record<string, unknown>, property: string): string\nfunction expectString(value: unknown, property: string): string\nfunction expectString(value: unknown, property: string): string {\n const candidate = isObject(value) ? value[property] : value\n if (typeof candidate !== 'string' || !candidate.trim()) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${property} must be a non-empty string`, 9)\n }\n return candidate\n}\n\nfunction expectNumber(object: Record<string, unknown>, property: string): number {\n const value = object[property]\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0) {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${property} must be a non-negative integer`, 9)\n }\n return value\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' && value.trim() ? value : undefined\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n\nfunction sanitizeAppOutput(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sanitizeAppOutput)\n if (!isObject(value)) return value\n const result: Record<string, unknown> = {}\n const forbidden = new Set([\n 'spec_path',\n 'staging_handle',\n 'staging_path',\n 'source_url',\n 'session_token',\n 'refresh_token',\n 'private_key',\n 'password',\n 'connection_string',\n 'database_url',\n ])\n for (const [key, child] of Object.entries(value)) {\n if (!forbidden.has(key.toLowerCase())) result[key] = sanitizeAppOutput(child)\n }\n return result\n}\n","import type { CommandContext } from './context.ts'\nimport { resolveServiceUrl } from './runtime.ts'\nimport { ToolError, UsageError } from './errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\n\nexport interface ArtifactDownload {\n path: string\n size: number\n sha256: string\n}\n\nexport type ArtifactFetcher = (\n url: URL,\n ctx: CommandContext,\n) => Promise<Uint8Array>\n\nexport async function downloadArtifact(\n ctx: CommandContext,\n service: string,\n rawUrl: string,\n rawPath: string,\n fetcher: ArtifactFetcher = defaultArtifactFetcher,\n): Promise<ArtifactDownload> {\n const path = getHost().path.isAbsolute(rawPath)\n ? rawPath\n : getHost().path.resolve(ctx.cwd, rawPath)\n const base = new URL(resolveServiceUrl(ctx.config, service))\n const url = new URL(rawUrl, `${base.protocol}//${base.host}`)\n if (url.origin !== base.origin || url.username || url.password) {\n throw new ToolError('INVALID_DOWNLOAD_URL', 'artifact URL must use the configured Zone origin')\n }\n const bytes = await fetcher(url, ctx)\n try {\n const file = await getHost().open(path, { createNew: true, write: true })\n try {\n let offset = 0\n while (offset < bytes.length) offset += await file.write(bytes.subarray(offset))\n await file.sync()\n } finally {\n await file.close()\n }\n } catch (error) {\n if (isHostError(error, 'AlreadyExists')) {\n throw new UsageError('OUTPUT_EXISTS', `output path already exists: ${path}`)\n }\n try {\n await getHost().remove(path)\n } catch {\n // Preserve the original write error if best-effort cleanup also fails.\n }\n throw error\n }\n const digest = await crypto.subtle.digest('SHA-256', Uint8Array.from(bytes).buffer)\n return { path, size: bytes.byteLength, sha256: toHex(new Uint8Array(digest)) }\n}\n\nasync function defaultArtifactFetcher(url: URL, ctx: CommandContext): Promise<Uint8Array> {\n const token = ctx.session ? (await ctx.session.ensureValid()).token : undefined\n const response = await fetch(url, {\n headers: token ? { authorization: `Bearer ${token}` } : undefined,\n signal: ctx.signal,\n })\n if (!response.ok) {\n throw new ToolError(\n 'DOWNLOAD_FAILED',\n `artifact download failed with HTTP ${response.status}`,\n )\n }\n return new Uint8Array(await response.arrayBuffer())\n}\n\nfunction toHex(bytes: Uint8Array): string {\n return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('')\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { ArtifactFetcher } from '../core/download.ts'\nimport { downloadArtifact } from '../core/download.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n requiredInputString,\n splitServices,\n} from '../core/service.ts'\nimport { waitForTask } from '../core/task.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nexport interface DiagnosticModuleDependencies {\n download?: ArtifactFetcher\n}\n\nexport function createDiagnosticModule(\n dependencies: DiagnosticModuleDependencies = {},\n): CommandModule {\n return {\n name: 'diagnostic',\n summary: 'Collect and export privileged redacted diagnostic bundles',\n commands: [collectCommand(), exportCommand(dependencies)],\n }\n}\n\nfunction collectCommand(): CommandDefinition {\n return {\n verb: 'collect',\n summary: 'Create a redacted diagnostic bundle Task',\n options: [\n {\n name: 'services',\n description: 'Comma-separated service IDs',\n type: 'string',\n required: true,\n },\n { name: 'since', description: 'RFC 3339 lower time boundary', type: 'string' },\n { name: 'until', description: 'RFC 3339 upper time boundary', type: 'string' },\n {\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return after Task creation',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n services: {},\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['services'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'task',\n requiresSession: true,\n examples: [\n 'buckyos --idempotency-key diag-42 diagnostic collect --services scheduler,node_daemon --since 2026-08-25T00:00:00Z',\n ],\n handler: async (ctx, input) => {\n const services = splitServices(input.services)\n if (services.length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'at least one diagnostic service is required')\n }\n const response = expectObject(\n await callService(\n ctx,\n CONTROL_PANEL,\n 'diagnostic.collect',\n compact({\n services,\n since: inputString(input, 'since'),\n until: inputString(input, 'until'),\n idempotency_key: ctx.idempotencyKey ?? `diagnostic-${crypto.randomUUID()}`,\n }),\n ),\n 'Control Panel diagnostic.collect response',\n )\n const taskId = expectString(response.task_id, 'diagnostic.collect.task_id')\n if (input.no_wait === true) return { task_id: taskId }\n return await waitForTask(ctx, taskId)\n },\n }\n}\n\nfunction exportCommand(dependencies: DiagnosticModuleDependencies): CommandDefinition {\n return {\n verb: 'export',\n summary: 'Export one diagnostic bundle to a new file',\n positionals: [{ name: 'bundle_id', description: 'Opaque bundle ID', required: true }],\n options: [{\n name: 'path',\n description: 'New destination file',\n type: 'string',\n required: true,\n }],\n inputSchema: {\n type: 'object',\n properties: {\n bundle_id: { type: 'string', minLength: 1 },\n path: { type: 'string', minLength: 1 },\n },\n required: ['bundle_id', 'path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos diagnostic export diag-opaque --path ./diagnostic.zip'],\n handler: async (ctx, input) => await exportDiagnostic(ctx, input, dependencies),\n }\n}\n\nasync function exportDiagnostic(\n ctx: CommandContext,\n input: Record<string, unknown>,\n dependencies: DiagnosticModuleDependencies,\n): Promise<Record<string, unknown>> {\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'diagnostic.export', {\n bundle_id: requiredInputString(input, 'bundle_id'),\n }),\n 'Control Panel diagnostic.export response',\n )\n const downloaded = await downloadArtifact(\n ctx,\n CONTROL_PANEL,\n expectString(response.url, 'diagnostic.export.url'),\n requiredInputString(input, 'path'),\n dependencies.download,\n )\n const expected = typeof response.artifact_sha256 === 'string'\n ? response.artifact_sha256\n : undefined\n if (expected && downloaded.sha256 !== expected) {\n try {\n await getHost().remove(downloaded.path)\n } catch {\n // Report the integrity failure even if best-effort cleanup is denied.\n }\n throw new ToolError('ARTIFACT_HASH_MISMATCH', 'diagnostic archive SHA-256 mismatch')\n }\n return {\n ...downloaded,\n bundle_id: response.bundle_id ?? input.bundle_id,\n content_sha256: response.sha256 ?? null,\n expires_at: response.expires_at ?? null,\n }\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { type ArtifactFetcher, downloadArtifact } from '../core/download.ts'\nimport { EXIT_TIMEOUT, ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n requiredInputString,\n splitServices,\n} from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n// Stored entry levels (control-panel sys_log_mgr normalize_log_level); WARN is stored as warning.\nconst LOG_LEVELS = ['error', 'warning', 'info', 'debug', 'trace']\n\nexport interface LogModuleDependencies {\n sleep?: (milliseconds: number, signal: AbortSignal) => Promise<void>\n download?: ArtifactFetcher\n}\n\nexport function createLogModule(dependencies: LogModuleDependencies = {}): CommandModule {\n return {\n name: 'log',\n summary: 'List services, query, follow, and export redacted system logs',\n commands: [\n servicesCommand(),\n queryCommand(),\n tailCommand(dependencies),\n exportCommand(dependencies),\n ],\n }\n}\n\nfunction servicesCommand(): CommandDefinition {\n return {\n verb: 'services',\n summary: 'List the service IDs that have system logs',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n outputSchema: {\n type: 'object',\n properties: { services: { type: 'array', items: OBJECT_OUTPUT } },\n required: ['services'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos log services'],\n handler: async (ctx) => {\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.list', {}),\n 'Control Panel log service list',\n )\n if (!Array.isArray(response.services)) invalidResponse('log service list')\n return { services: response.services }\n },\n }\n}\n\nfunction queryCommand(): CommandDefinition {\n return {\n verb: 'query',\n summary: 'Query structured redacted log entries',\n options: [\n ...filterOptions(false),\n {\n name: 'direction',\n description: 'Page direction',\n type: 'string',\n enum: ['forward', 'backward'],\n },\n { name: 'cursor', description: 'Opaque page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 500', type: 'integer' },\n ],\n inputSchema: filterSchema({\n direction: { type: 'string', enum: ['forward', 'backward'] },\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n }),\n outputSchema: pageSchema(),\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos log query --service scheduler --level error --limit 100'],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, true)\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.query', params),\n 'Control Panel log query response',\n )\n if (!Array.isArray(response.entries)) invalidResponse('log query entries')\n return { items: response.entries, next_cursor: response.nextCursor ?? null }\n },\n }\n}\n\nfunction tailCommand(dependencies: LogModuleDependencies): CommandDefinition {\n const sleep = dependencies.sleep ?? abortableSleep\n return {\n verb: 'tail',\n summary: 'Continuously stream structured redacted log entries',\n options: [\n ...filterOptions(false),\n {\n name: 'from',\n description: 'Initial read position',\n type: 'string',\n enum: ['start', 'end'],\n },\n ],\n inputSchema: filterSchema({ from: { type: 'string', enum: ['start', 'end'] } }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'stream',\n requiresSession: true,\n examples: ['buckyos --timeout 10m log tail --service scheduler --from end'],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, false)\n if (params.services.length !== 1) {\n throw new UsageError('INVALID_ARGUMENT', 'log tail requires exactly one service')\n }\n let cursor: string | undefined\n while (true) {\n const remaining = (ctx.deadline ?? Date.now()) - Date.now()\n if (remaining <= 0) throw timeoutError()\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.tail', {\n ...params,\n cursor,\n from: inputString(input, 'from') ?? 'end',\n limit: 500,\n }),\n 'Control Panel log tail response',\n )\n if (!Array.isArray(response.entries)) invalidResponse('log tail entries')\n for (const entry of response.entries) {\n await ctx.io.stdout(`${\n JSON.stringify({\n schema_version: 1,\n type: 'log-entry',\n entry,\n })\n }\\n`)\n }\n cursor = expectString(response.nextCursor, 'log tail nextCursor')\n await sleep(\n Math.min(500, Math.max(1, (ctx.deadline ?? Date.now()) - Date.now())),\n ctx.signal,\n )\n }\n },\n }\n}\n\nfunction exportCommand(dependencies: LogModuleDependencies): CommandDefinition {\n return {\n verb: 'export',\n summary: 'Export a bounded redacted log archive to a new file',\n options: [\n ...filterOptions(true),\n { name: 'path', description: 'New destination file', type: 'string', required: true },\n ],\n inputSchema: {\n ...filterSchema({ path: { type: 'string', minLength: 1 } }),\n required: ['path'],\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos log export --services scheduler,node_daemon --since 2026-08-25T00:00:00Z --path ./logs.zip',\n ],\n handler: async (ctx, input) => {\n const params = normalizeFilter(input, false)\n if (params.services.length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'log export requires at least one service')\n }\n if (!params.since && !params.until) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n 'log export requires a since or until time boundary',\n )\n }\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'system.logs.download', {\n ...params,\n mode: 'filtered',\n }),\n 'Control Panel log export response',\n )\n const downloaded = await downloadArtifact(\n ctx,\n CONTROL_PANEL,\n expectString(response.url, 'log export url'),\n requiredInputString(input, 'path'),\n dependencies.download,\n )\n return downloaded\n },\n }\n}\n\nfunction filterOptions(plural: boolean) {\n return [\n {\n name: plural ? 'services' : 'service',\n property: plural ? 'services' : 'service',\n description: plural\n ? 'Comma-separated service IDs (buckyos log services)'\n : 'Service ID (buckyos log services)',\n type: 'string' as const,\n required: true,\n },\n {\n name: 'file',\n description: 'Exact filename in the service log directory',\n type: 'string' as const,\n },\n {\n name: 'level',\n description: `Log level: ${LOG_LEVELS.join(', ')} (warn = warning)`,\n type: 'string' as const,\n },\n { name: 'keyword', description: 'Case-insensitive content filter', type: 'string' as const },\n { name: 'since', description: 'RFC 3339 lower time boundary', type: 'string' as const },\n { name: 'until', description: 'RFC 3339 upper time boundary', type: 'string' as const },\n ]\n}\n\nfunction filterSchema(extra: Record<string, JsonSchema>): JsonSchema {\n return {\n type: 'object',\n properties: {\n service: { type: 'string', minLength: 1 },\n services: {},\n file: { type: 'string', minLength: 1 },\n level: { type: 'string', minLength: 1 },\n keyword: { type: 'string', minLength: 1 },\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n ...extra,\n },\n additionalProperties: false,\n }\n}\n\nfunction normalizeFilter(\n input: Record<string, unknown>,\n withPage: boolean,\n): Record<string, unknown> & { services: string[] } {\n const services = splitServices(input.services ?? input.service)\n if (services.length === 0) throw new UsageError('INVALID_ARGUMENT', 'service is required')\n const limit = input.limit === undefined ? undefined : Number(input.limit)\n if (limit !== undefined && (!Number.isSafeInteger(limit) || limit < 1 || limit > 500)) {\n throw new UsageError('INVALID_ARGUMENT', 'limit must be an integer between 1 and 500')\n }\n return compact({\n services,\n file: inputString(input, 'file'),\n level: normalizeLevel(inputString(input, 'level')),\n keyword: inputString(input, 'keyword'),\n since: normalizeLogTime(input, 'since'),\n until: normalizeLogTime(input, 'until'),\n direction: withPage ? inputString(input, 'direction') ?? 'forward' : undefined,\n cursor: withPage ? inputString(input, 'cursor') : undefined,\n limit: withPage ? limit : undefined,\n }) as Record<string, unknown> & { services: string[] }\n}\n\nfunction normalizeLevel(value: string | undefined): string | undefined {\n if (!value) return undefined\n const level = value.toLowerCase() === 'warn' ? 'warning' : value.toLowerCase()\n if (!LOG_LEVELS.includes(level)) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `level must be one of ${LOG_LEVELS.join(', ')} (warn = warning)`,\n )\n }\n return level\n}\n\nfunction normalizeLogTime(input: Record<string, unknown>, key: string): string | undefined {\n const value = inputString(input, key)\n if (!value) return undefined\n if (!Number.isFinite(Date.parse(value))) {\n throw new UsageError('INVALID_ARGUMENT', `${key} must be RFC 3339`)\n }\n return value\n}\n\nfunction pageSchema(): JsonSchema {\n return {\n type: 'object',\n properties: { items: { type: 'array', items: {} }, next_cursor: {} },\n required: ['items', 'next_cursor'],\n additionalProperties: false,\n }\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n\nfunction invalidResponse(label: string): never {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} is invalid`)\n}\n\nfunction timeoutError(): ToolError {\n return new ToolError('TIMEOUT', 'timed out following logs', EXIT_TIMEOUT, true)\n}\n\nfunction abortableSleep(milliseconds: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) return Promise.reject(new ToolError('CANCELED', 'operation canceled'))\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n clearTimeout(timer)\n reject(new ToolError('CANCELED', 'operation canceled'))\n }\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, milliseconds)\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n expectString,\n inputString,\n parseTimestamp,\n requiredInputString,\n} from '../core/service.ts'\nimport { waitForTask } from '../core/task.ts'\n\nconst TASK_MANAGER = 'task-manager'\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nexport function createTaskModule(): CommandModule {\n return {\n name: 'task',\n summary: 'Inspect, wait for, cancel, and retry durable Tasks',\n commands: [listCommand(), getCommand(), waitCommand(), cancelCommand(), retryCommand()],\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List visible Tasks',\n options: [\n { name: 'owner', description: 'Creator user ID', type: 'string' },\n { name: 'type', description: 'Task schema ID', type: 'string' },\n { name: 'state', description: 'Task phase', type: 'string' },\n { name: 'since', description: 'Created at or after this time', type: 'string' },\n { name: 'until', description: 'Created at or before this time', type: 'string' },\n { name: 'cursor', description: 'Opaque page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 500', type: 'integer' },\n {\n name: 'include-archived',\n property: 'include_archived',\n description: 'Include archived Tasks',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n owner: { type: 'string', minLength: 1 },\n type: { type: 'string', minLength: 1 },\n state: { type: 'string', minLength: 1 },\n since: {},\n until: {},\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n include_archived: { type: 'boolean' },\n },\n additionalProperties: false,\n },\n outputSchema: pageSchema(),\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task list --state running --limit 50'],\n handler: async (ctx, input) => {\n const limit = normalizeLimit(input.limit)\n const response = expectObject(\n await callService(\n ctx,\n TASK_MANAGER,\n 'list_tasks',\n compact({\n creator_user_id: inputString(input, 'owner'),\n schema_id: inputString(input, 'type'),\n phase: input.state === undefined ? undefined : normalizePhase(String(input.state)),\n created_after: parseTimestamp(input.since, 'since'),\n created_before: parseTimestamp(input.until, 'until'),\n cursor: inputString(input, 'cursor'),\n limit,\n include_archived: input.include_archived === true,\n }),\n ),\n 'TaskManager list_tasks response',\n )\n const items = response.tasks\n if (!Array.isArray(items)) invalidResponse('list_tasks.tasks')\n return { items, next_cursor: response.next_cursor ?? null }\n },\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return {\n verb: 'get',\n summary: 'Get one Task snapshot and its direct children',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n options: [\n {\n name: 'children-cursor',\n property: 'children_cursor',\n description: 'Child page cursor',\n type: 'string',\n },\n {\n name: 'children-limit',\n property: 'children_limit',\n description: 'Child page size',\n type: 'integer',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n children_cursor: { type: 'string', minLength: 1 },\n children_limit: { type: 'integer', minimum: 1 },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task get t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n const [taskResponse, childrenResponse] = await Promise.all([\n callService(ctx, TASK_MANAGER, 'get_task', { task_id: taskId }),\n callService(\n ctx,\n TASK_MANAGER,\n 'get_subtasks',\n compact({\n task_id: taskId,\n cursor: inputString(input, 'children_cursor'),\n limit: normalizeLimit(input.children_limit),\n }),\n ),\n ])\n const taskEnvelope = expectObject(taskResponse, 'TaskManager get_task response')\n const childrenEnvelope = expectObject(childrenResponse, 'TaskManager get_subtasks response')\n if (!Array.isArray(childrenEnvelope.tasks)) invalidResponse('get_subtasks.tasks')\n return {\n task: expectObject(taskEnvelope.task ?? taskEnvelope, 'TaskManager task'),\n children: {\n items: childrenEnvelope.tasks,\n next_cursor: childrenEnvelope.next_cursor ?? null,\n },\n }\n },\n }\n}\n\nfunction waitCommand(): CommandDefinition {\n return {\n verb: 'wait',\n summary: 'Stream changes until a Task becomes terminal',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n inputSchema: taskIdSchema(),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'stream',\n requiresSession: true,\n examples: ['buckyos --timeout 10m task wait t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n return await waitForTask(ctx, taskId, {\n failOnTaskFailure: false,\n onObservation: async (observation) => {\n await ctx.io.stdout(`${\n JSON.stringify({\n schema_version: 1,\n type: 'task-progress',\n task_id: taskId,\n revision: observation.revision ?? null,\n phase: observation.phase,\n outcome: observation.outcome ?? null,\n progress: observation.progress ?? null,\n message: observation.message ?? null,\n })\n }\\n`)\n },\n })\n },\n }\n}\n\nfunction cancelCommand(): CommandDefinition {\n return {\n verb: 'cancel',\n summary: 'Request Task cancellation',\n positionals: [{ name: 'task_id', description: 'Opaque Task ID', required: true }],\n options: [\n { name: 'recursive', description: 'Request cancellation for descendants', type: 'boolean' },\n {\n name: 'expected-revision',\n property: 'expected_revision',\n description: 'Optimistic revision fence',\n type: 'integer',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n recursive: { type: 'boolean' },\n expected_revision: { type: 'integer', minimum: 0 },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos task cancel t-0123456789abcdef0123456789abcdef --recursive'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n return await callService(\n ctx,\n TASK_MANAGER,\n 'request_control',\n compact({\n task_id: taskId,\n action: 'Cancel',\n request_id: ctx.idempotencyKey ?? `ctl-${crypto.randomUUID().replaceAll('-', '')}`,\n recursive: input.recursive === true,\n expected_revision: input.expected_revision,\n }),\n )\n },\n }\n}\n\nfunction retryCommand(): CommandDefinition {\n return {\n verb: 'retry',\n summary: 'Create a new Task through the owning domain retry handler',\n positionals: [{ name: 'task_id', description: 'Failed terminal Task ID', required: true }],\n options: [{\n name: 'no-wait',\n property: 'no_wait',\n description: 'Return after creation',\n type: 'boolean',\n }],\n inputSchema: {\n type: 'object',\n properties: {\n task_id: { type: 'string', minLength: 1 },\n no_wait: { type: 'boolean' },\n },\n required: ['task_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: ['buckyos --idempotency-key retry-42 task retry t-0123456789abcdef0123456789abcdef'],\n handler: async (ctx, input) => {\n const taskId = requiredInputString(input, 'task_id')\n const oldEnvelope = expectObject(\n await callService(ctx, TASK_MANAGER, 'get_task', { task_id: taskId }),\n 'TaskManager get_task response',\n )\n const oldTask = expectObject(oldEnvelope.task ?? oldEnvelope, 'TaskManager task')\n if (oldTask.phase !== 'Terminal' || oldTask.outcome !== 'Failed') {\n throw new UsageError('TASK_NOT_RETRYABLE', 'only a terminal failed Task can be retried')\n }\n const response = expectObject(\n await callService(ctx, CONTROL_PANEL, 'task.retry', {\n task_id: taskId,\n idempotency_key: ctx.idempotencyKey ?? `retry-${crypto.randomUUID()}`,\n }),\n 'Control Panel task.retry response',\n )\n const retryTaskId = expectString(response.task_id, 'task.retry.task_id')\n if (retryTaskId === taskId || response.retry_of !== taskId) {\n invalidResponse('task.retry identity')\n }\n if (input.no_wait === true) return response\n return await waitForTask(ctx, retryTaskId)\n },\n }\n}\n\nfunction taskIdSchema(): JsonSchema {\n return {\n type: 'object',\n properties: { task_id: { type: 'string', minLength: 1 } },\n required: ['task_id'],\n additionalProperties: false,\n }\n}\n\nfunction pageSchema(): JsonSchema {\n return {\n type: 'object',\n properties: {\n items: { type: 'array', items: {} },\n next_cursor: {},\n },\n required: ['items', 'next_cursor'],\n additionalProperties: false,\n }\n}\n\nfunction normalizePhase(value: string): string {\n const normalized = value.trim().toLowerCase()\n const phase = ['promised', 'accepted', 'running', 'waiting', 'paused', 'terminal']\n .find((candidate) => candidate === normalized)\n if (!phase) throw new UsageError('INVALID_ARGUMENT', `unknown Task phase: ${value}`)\n return phase[0].toUpperCase() + phase.slice(1)\n}\n\nfunction normalizeLimit(value: unknown): number | undefined {\n if (value === undefined) return undefined\n if (!Number.isSafeInteger(value) || Number(value) < 1 || Number(value) > 500) {\n throw new UsageError('INVALID_ARGUMENT', 'limit must be an integer between 1 and 500')\n }\n return Number(value)\n}\n\nfunction compact(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined))\n}\n\nfunction invalidResponse(label: string): never {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `${label} is invalid`, EXIT_INTERNAL)\n}\n","import type {\n CommandDefinition,\n CommandModule,\n JsonSchema,\n OptionDefinition,\n} from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport {\n EXIT_OPERATION,\n EXIT_PARTIAL,\n EXIT_PERMISSION,\n EXIT_USAGE,\n ToolError,\n UsageError,\n} from '../core/errors.ts'\nimport { getHost, isHostError } from '../runtime/host.ts'\nimport { TOOL_VERSION } from '../version.ts'\nimport * as provisionSdk from 'buckyos/provision'\n\n// provision: first activation of an installed, not yet activated BuckyOS root on\n// this machine (single OOD, did:web, no SN/BNS). Every command is local: no\n// Zone session, no verify-hub, no TaskManager, no network. The activation\n// implementation lives in the SDK (buckyos/provision); this module is the thin\n// argv/confirmation/secret/output layer described in doc/modules/provision.md.\n\n// The built SDK entry is untyped for `deno check` (as buckyos/node is for the\n// core); these interfaces mirror the API documented in src/provision_activate.ts.\nexport type ActivationState = 'not_installed' | 'unactivated' | 'partial' | 'configured' | 'invalid'\n\nexport interface ActivationProblem {\n code: string\n message: string\n}\n\nexport interface ActivationFileEntry {\n path: string\n role: string\n required: boolean\n secret: boolean\n}\n\nexport interface ObservedActivationFile extends ActivationFileEntry {\n present: boolean\n}\n\nexport interface CommittedActivationFile extends ActivationFileEntry {\n sha256: string | null\n}\n\nexport interface ActivationDnsRecord {\n type: 'A' | 'AAAA'\n name: string\n value: string\n}\n\nexport interface ActivationLockInfo {\n path: string\n schemaVersion: number | null\n traceId: string | null\n startedAt: number | null\n domain: string | null\n stage: string | null\n committedFiles: string[]\n ownerKeyBackupPath: string | null\n corrupt: boolean\n}\n\nexport interface ActivationStatus {\n rootDir: string\n state: ActivationState\n startupRequired: boolean\n observedAt: number\n zoneDid: string | null\n ownerDid: string | null\n deviceDid: string | null\n deviceName: string | null\n accessHostname: string | null\n files: ObservedActivationFile[]\n problems: ActivationProblem[]\n warnings: string[]\n lock: ActivationLockInfo | null\n}\n\nexport interface OfflineActivationCheckOptions {\n rootDir: string\n domain: string\n ownerName: string\n ownerKeyBackupPath: string\n rtcpPort?: number\n guestAccess?: boolean\n publicIp?: string\n}\n\nexport interface OfflineActivationOptions extends OfflineActivationCheckOptions {\n adminPassword: string\n traceId?: string\n}\n\nexport interface OfflineActivationPrecheck {\n ready: boolean\n rootDir: string\n state: ActivationState\n domain: string\n ownerName: string\n ownerDid: string\n zoneDid: string\n deviceDid: string\n deviceName: string\n accessHostname: string\n rtcpPort: number\n guestAccess: boolean\n publicIp: string | null\n dnsRecords: ActivationDnsRecord[]\n ownerKeyBackup: { path: string; directoryExists: boolean; exists: boolean }\n plannedFiles: ActivationFileEntry[]\n problems: ActivationProblem[]\n status: ActivationStatus\n}\n\nexport interface OfflineActivationResult {\n rootDir: string\n state: 'configured'\n startupRequired: true\n domain: string\n ownerName: string\n ownerDid: string\n zoneDid: string\n deviceDid: string\n deviceName: string\n accessHostname: string\n rtcpPort: number\n guestAccess: boolean\n publicIp: string | null\n documentIat: number\n documentExp: number\n ownerKeyBackup: { path: string; saved: true }\n dnsRecords: ActivationDnsRecord[]\n committedFiles: CommittedActivationFile[]\n warnings: string[]\n}\n\ninterface ProvisionSdk {\n inspectActivationRoot(rootDir: string): Promise<ActivationStatus>\n checkOfflineActivation(options: OfflineActivationCheckOptions): Promise<OfflineActivationPrecheck>\n activateOfflineZone(options: OfflineActivationOptions): Promise<OfflineActivationResult>\n}\n\nconst sdk = provisionSdk as unknown as ProvisionSdk\n\nexport interface ProvisionModuleDependencies {\n inspect?: ProvisionSdk['inspectActivationRoot']\n check?: ProvisionSdk['checkOfflineActivation']\n activate?: ProvisionSdk['activateOfflineZone']\n}\n\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\n\nconst ROOT_OPTION: OptionDefinition = {\n name: 'root',\n description:\n 'Installed BuckyOS root on this machine (BUCKYOS_ROOT); read by status/check, written by activate',\n type: 'string',\n required: true,\n}\n\nconst TARGET_OPTIONS: OptionDefinition[] = [\n ROOT_OPTION,\n {\n name: 'domain',\n description: 'Fixed public host name; Owner DID and Zone DID become did:web:<domain>',\n type: 'string',\n required: true,\n },\n {\n name: 'owner-name',\n property: 'owner_name',\n description: 'Local administrator / OwnerDocument name (lowercase DNS label)',\n type: 'string',\n required: true,\n },\n {\n name: 'owner-key-backup',\n property: 'owner_key_backup',\n description:\n 'New file for the Owner private-key recovery copy; its directory must exist and the file must not',\n type: 'string',\n required: true,\n },\n {\n name: 'public-ip',\n property: 'public_ip',\n description: 'Fixed public IP used only for the A/AAAA record instructions',\n type: 'string',\n },\n {\n name: 'rtcp-port',\n property: 'rtcp_port',\n description: 'RTCP port, default 2980',\n type: 'integer',\n },\n {\n name: 'guest-access',\n property: 'guest_access',\n description: 'Enable guest access in the first-boot configuration',\n type: 'boolean',\n },\n]\n\nconst TARGET_INPUT_PROPERTIES: Record<string, JsonSchema> = {\n root: { type: 'string', minLength: 1 },\n domain: { type: 'string', minLength: 1 },\n owner_name: { type: 'string', minLength: 1 },\n owner_key_backup: { type: 'string', minLength: 1 },\n public_ip: { type: 'string' },\n rtcp_port: { type: 'integer', minimum: 1 },\n guest_access: { type: 'boolean' },\n}\n\nconst TARGET_REQUIRED = ['root', 'domain', 'owner_name', 'owner_key_backup']\n\nconst POLICY_NOTE =\n 'Paths are read from argv by the launcher to grant the minimal filesystem permissions; ' +\n 'root and owner_key_backup given only inside --input are limited to the policy roots (cwd, ' +\n 'and the paired BUCKYOS_ROOT of the system distribution).'\n\nexport function createProvisionModule(\n dependencies: ProvisionModuleDependencies = {},\n): CommandModule {\n const deps: ResolvedDependencies = {\n inspect: dependencies.inspect ?? sdk.inspectActivationRoot,\n check: dependencies.check ?? sdk.checkOfflineActivation,\n activate: dependencies.activate ?? sdk.activateOfflineZone,\n }\n return {\n name: 'provision',\n summary: 'Activate an installed BuckyOS root on this machine (first Zone, Owner, and OOD)',\n commands: [statusCommand(deps), checkCommand(deps), activateCommand(deps)],\n }\n}\n\ntype ResolvedDependencies = Required<ProvisionModuleDependencies>\n\nfunction statusCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'status',\n summary: 'Inspect the local activation material of an installed BuckyOS root',\n description:\n 'Read-only. Reports not_installed, unactivated, partial, configured, or invalid from the ' +\n 'files under the root; configured only means the first-boot material is complete and internally ' +\n 'consistent (startup_required=true). Service health, DNS, TLS, and public DID discovery are not checked. ' +\n POLICY_NOTE,\n options: [ROOT_OPTION],\n inputSchema: {\n type: 'object',\n properties: { root: { type: 'string', minLength: 1 } },\n required: ['root'],\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n root: { type: 'string' },\n state: {\n type: 'string',\n enum: ['not_installed', 'unactivated', 'partial', 'configured', 'invalid'],\n },\n startup_required: { type: 'boolean' },\n },\n required: ['root', 'state', 'startup_required'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: ['buckyos provision status --root /opt/buckyos'],\n handler: async (ctx, input) => {\n const root = resolvePath(ctx, requiredString(input, 'root'))\n await assertHostAccess(root, 'read')\n return statusView(await runSdk(() => deps.inspect(root)))\n },\n }\n}\n\nfunction checkCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'check',\n summary: 'Validate activation parameters and the target root without writing anything',\n description:\n 'Read-only precheck shared with activate: parameters, target state, and the owner key ' +\n 'backup location. No keys are generated, no backup is written, and no operation is produced; ' +\n 'activate re-validates the target itself. Fails with the first problem code when the target is not ready. ' +\n POLICY_NOTE,\n options: TARGET_OPTIONS,\n inputSchema: {\n type: 'object',\n properties: TARGET_INPUT_PROPERTIES,\n required: TARGET_REQUIRED,\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n ready: { type: 'boolean' },\n root: { type: 'string' },\n state: { type: 'string' },\n },\n required: ['ready', 'root', 'state'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos provision check --root /opt/buckyos --domain corp.example.com --owner-name admin --owner-key-backup /secure-backup/corp-owner.pem',\n ],\n handler: async (ctx, input) => {\n const options = activationOptions(ctx, input)\n await assertHostAccess(options.rootDir, 'read')\n await assertHostAccess(getHost().path.dirname(options.ownerKeyBackupPath), 'read')\n const precheck = await runSdk(() => deps.check(options))\n if (!precheck.ready) throw precheckError(precheck)\n return precheckView(precheck)\n },\n }\n}\n\nfunction activateCommand(deps: ResolvedDependencies): CommandDefinition {\n return {\n verb: 'activate',\n summary:\n 'Activate the root: create the first Zone, Owner, and OOD identity and the first-boot configuration',\n description:\n 'Privileged local write. Generates random Ed25519 Owner/device keys and current-time documents, ' +\n 'saves the Owner private-key backup, then commits the identity, Zone, and start_config files; ' +\n 'etc/node_identity.json is written last because node-daemon treats it as the activation switch. ' +\n 'The administrator password is read from the secret admin_password field of --input JSON or from a ' +\n 'hidden terminal prompt; there is no --admin-password option. Non-interactive runs require --yes. ' +\n 'Repeated, partial, and invalid targets are rejected; there is no --force. After success restart ' +\n 'BuckyOS through the installer or node control entry; this command never reports the Zone as online. ' +\n POLICY_NOTE,\n options: TARGET_OPTIONS,\n inputSchema: {\n type: 'object',\n properties: {\n ...TARGET_INPUT_PROPERTIES,\n admin_password: {\n type: 'string',\n secret: true,\n description: 'Administrator password (secret; --input JSON or hidden prompt only)',\n },\n },\n required: TARGET_REQUIRED,\n additionalProperties: false,\n },\n outputSchema: {\n ...OBJECT_OUTPUT,\n properties: {\n root: { type: 'string' },\n state: { type: 'string', enum: ['configured'] },\n startup_required: { type: 'boolean' },\n },\n required: ['root', 'state', 'startup_required'],\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'privileged' },\n asyncMode: 'sync',\n requiresSession: false,\n execution: 'local',\n networkAccess: false,\n examples: [\n 'buckyos provision activate --root /opt/buckyos --domain corp.example.com --owner-name admin --owner-key-backup /secure-backup/corp-owner.pem',\n 'buckyos --non-interactive --yes --input activation.json provision activate --root /opt/buckyos --owner-key-backup /secure-backup/corp-owner.pem',\n ],\n handler: async (ctx, input) => {\n const options = activationOptions(ctx, input)\n const backupDirectory = getHost().path.dirname(options.ownerKeyBackupPath)\n await assertHostAccess(options.rootDir, 'read')\n await assertHostAccess(options.rootDir, 'write')\n await assertHostAccess(backupDirectory, 'read')\n await assertHostAccess(backupDirectory, 'write')\n const precheck = await runSdk(() => deps.check(options))\n if (!precheck.ready) throw precheckError(precheck)\n const adminPassword = await obtainAdminPassword(ctx, input)\n await confirmActivation(ctx, precheck)\n const result = await runSdk(() =>\n deps.activate({ ...options, adminPassword, traceId: ctx.traceId })\n )\n return resultView(ctx, input, result)\n },\n }\n}\n\n// ---------------------------------------------------------------------------\n// input handling\n// ---------------------------------------------------------------------------\n\nfunction activationOptions(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): OfflineActivationCheckOptions {\n return {\n rootDir: resolvePath(ctx, requiredString(input, 'root')),\n domain: requiredString(input, 'domain'),\n ownerName: requiredString(input, 'owner_name'),\n ownerKeyBackupPath: resolvePath(ctx, requiredString(input, 'owner_key_backup')),\n publicIp: optionalString(input, 'public_ip'),\n rtcpPort: typeof input.rtcp_port === 'number' ? input.rtcp_port : undefined,\n guestAccess: input.guest_access === true,\n }\n}\n\nfunction requiredString(input: Record<string, unknown>, key: string): string {\n const value = optionalString(input, key)\n if (!value) throw new UsageError('INVALID_ARGUMENT', `${key} is required`)\n return value\n}\n\nfunction optionalString(input: Record<string, unknown>, key: string): string | undefined {\n const value = input[key]\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n}\n\nfunction resolvePath(ctx: CommandContext, value: string): string {\n const path = getHost().path\n return path.isAbsolute(value) ? path.resolve(value) : path.resolve(ctx.cwd, value)\n}\n\nasync function assertHostAccess(path: string, operation: 'read' | 'write'): Promise<void> {\n try {\n await getHost().assertAccess(path, operation)\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n throw new ToolError(\n 'HOST_ACCESS_DENIED',\n `${error.message}; pass the path on the command line (--root / --owner-key-backup) so the launcher can grant it`,\n EXIT_PERMISSION,\n false,\n { path, operation },\n )\n }\n throw error\n }\n}\n\nasync function obtainAdminPassword(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<string> {\n if (typeof input.admin_password === 'string') return input.admin_password\n if (ctx.config.nonInteractive) {\n throw new UsageError(\n 'SECRET_REQUIRED',\n 'admin_password must be provided through --input JSON in non-interactive mode',\n )\n }\n if (!ctx.io.inputIsTerminal) {\n throw new UsageError(\n 'SECRET_INPUT_UNAVAILABLE',\n 'the administrator password requires an interactive terminal or --input JSON',\n )\n }\n const host = getHost()\n let password: string\n let confirmation: string\n try {\n password = await host.readSecret('Administrator password: ')\n confirmation = await host.readSecret('Confirm administrator password: ')\n } catch (error) {\n if (isHostError(error, 'PermissionDenied')) {\n throw new UsageError('SECRET_INPUT_UNAVAILABLE', error.message)\n }\n throw error\n }\n if (password !== confirmation) {\n throw new UsageError('PASSWORD_MISMATCH', 'the administrator passwords do not match')\n }\n return password\n}\n\nasync function confirmActivation(\n ctx: CommandContext,\n precheck: OfflineActivationPrecheck,\n): Promise<void> {\n if (ctx.confirmed) return\n if (ctx.config.nonInteractive) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'provision activate requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n )\n }\n if (!ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'provision activate requires an interactive terminal or --yes',\n EXIT_PERMISSION,\n )\n }\n await ctx.io.stderr(\n [\n 'Activation summary',\n ` BUCKYOS_ROOT : ${precheck.rootDir}`,\n ` Owner/Zone : ${precheck.zoneDid}`,\n ` Device : ${precheck.deviceDid}`,\n ` Admin : ${precheck.ownerName}`,\n ` Network : ${'wan'} (no SN, no BNS)`,\n ` RTCP port : ${precheck.rtcpPort}`,\n ` Guest access : ${precheck.guestAccess}`,\n ` Owner backup : ${precheck.ownerKeyBackup.path}`,\n '',\n ].join('\\n'),\n )\n const answer = (await ctx.io.prompt('Write this activation to disk? [y/N] '))?.trim()\n .toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', 'activation was declined', EXIT_PERMISSION)\n }\n}\n\n// ---------------------------------------------------------------------------\n// SDK error mapping\n// ---------------------------------------------------------------------------\n\ninterface SdkError extends Error {\n code: string\n details: Record<string, unknown>\n}\n\nfunction isSdkError(error: unknown): error is SdkError {\n return error instanceof Error && error.name === 'ActivationError' &&\n typeof (error as { code?: unknown }).code === 'string'\n}\n\nasync function runSdk<T>(run: () => Promise<T>): Promise<T> {\n try {\n return await run()\n } catch (error) {\n if (isSdkError(error)) {\n const exitCode = error.code === 'INVALID_ARGUMENT'\n ? EXIT_USAGE\n : error.code === 'ACTIVATION_COMMIT_FAILED'\n ? EXIT_PARTIAL\n : EXIT_OPERATION\n throw new ToolError(error.code, error.message, exitCode, false, error.details ?? {})\n }\n throw error\n }\n}\n\nfunction precheckError(precheck: OfflineActivationPrecheck): ToolError {\n const [first] = precheck.problems\n const single = precheck.problems.length === 1\n return new ToolError(\n single ? first.code : 'ACTIVATION_PRECHECK_FAILED',\n single\n ? first.message\n : `activation precheck failed: ${precheck.problems.map((p) => p.message).join('; ')}`,\n EXIT_OPERATION,\n false,\n precheckView(precheck),\n )\n}\n\n// ---------------------------------------------------------------------------\n// output views (snake_case, never secrets)\n// ---------------------------------------------------------------------------\n\nfunction statusView(status: ActivationStatus): Record<string, unknown> {\n return {\n root: status.rootDir,\n state: status.state,\n startup_required: status.startupRequired,\n observed_at: status.observedAt,\n zone_did: status.zoneDid,\n owner_did: status.ownerDid,\n device_did: status.deviceDid,\n device_name: status.deviceName,\n access_hostname: status.accessHostname,\n files: status.files.map((file) => ({\n path: file.path,\n role: file.role,\n required: file.required,\n secret: file.secret,\n present: file.present,\n })),\n problems: status.problems,\n warnings: status.warnings,\n lock: status.lock\n ? {\n path: status.lock.path,\n stage: status.lock.stage,\n trace_id: status.lock.traceId,\n started_at: status.lock.startedAt,\n domain: status.lock.domain,\n committed_files: status.lock.committedFiles,\n owner_key_backup: status.lock.ownerKeyBackupPath,\n corrupt: status.lock.corrupt,\n }\n : null,\n }\n}\n\nfunction precheckView(precheck: OfflineActivationPrecheck): Record<string, unknown> {\n return {\n ready: precheck.ready,\n root: precheck.rootDir,\n state: precheck.state,\n domain: precheck.domain,\n owner_name: precheck.ownerName,\n owner_did: precheck.ownerDid,\n zone_did: precheck.zoneDid,\n device_did: precheck.deviceDid,\n device_name: precheck.deviceName,\n access_hostname: precheck.accessHostname,\n rtcp_port: precheck.rtcpPort,\n guest_access: precheck.guestAccess,\n public_ip: precheck.publicIp,\n dns_records: precheck.dnsRecords,\n owner_key_backup: {\n path: precheck.ownerKeyBackup.path,\n directory_exists: precheck.ownerKeyBackup.directoryExists,\n exists: precheck.ownerKeyBackup.exists,\n },\n planned_files: precheck.plannedFiles,\n problems: precheck.problems,\n target: statusView(precheck.status),\n }\n}\n\nfunction resultView(\n ctx: CommandContext,\n input: Record<string, unknown>,\n result: OfflineActivationResult,\n): Record<string, unknown> {\n const dnsNotes = [\n ...result.dnsRecords.map((record) => `${record.type} ${record.name} ${record.value}`),\n ...(result.publicIp ? [] : [`A/AAAA ${result.domain} <this node's fixed public IP>`]),\n `The address record is also saved in etc/zone_dns_records.json under ${result.rootDir}.`,\n `Local boot uses etc/${result.domain}.zone.json; no DNS BOOT/PKX/DEV records are required.`,\n 'TLS/ACME is not provided by SN in this mode; configure it on the public gateway.',\n ]\n return {\n root: result.rootDir,\n state: result.state,\n startup_required: result.startupRequired,\n domain: result.domain,\n owner_name: result.ownerName,\n owner_did: result.ownerDid,\n zone_did: result.zoneDid,\n device_did: result.deviceDid,\n device_name: result.deviceName,\n access_hostname: result.accessHostname,\n rtcp_port: result.rtcpPort,\n guest_access: result.guestAccess,\n public_ip: result.publicIp,\n document_iat: result.documentIat,\n document_exp: result.documentExp,\n owner_key_backup: result.ownerKeyBackup,\n dns_records: result.dnsRecords,\n dns_notes: dnsNotes,\n committed_files: result.committedFiles,\n warnings: result.warnings,\n next_steps: [\n 'Restart BuckyOS through the installer or the node control entry to leave activation mode and boot the new Zone.',\n 'Check the running Zone afterwards with system status; activation does not verify service health, DNS, or TLS.',\n `Keep the Owner private-key backup ${result.ownerKeyBackup.path} offline; it is the only recovery copy.`,\n ],\n audit: {\n module: ctx.command.module,\n verb: ctx.command.verb,\n trace_id: ctx.traceId,\n tool_version: TOOL_VERSION,\n input_fingerprint: inputFingerprint(input),\n },\n }\n}\n\nfunction inputFingerprint(input: Record<string, unknown>): string {\n const material: Record<string, unknown> = {}\n for (const key of Object.keys(TARGET_INPUT_PROPERTIES).sort()) {\n if (input[key] !== undefined) material[key] = input[key]\n }\n const hash = getHost().createHash('sha256')\n hash.update(new TextEncoder().encode(JSON.stringify(material)))\n return hash.digestHex()\n}\n","import type { CommandModule, JsonSchema, OptionDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, EXIT_PERMISSION, ToolError, UsageError } from '../core/errors.ts'\nimport { callService, requiredInputString } from '../core/service.ts'\nimport { getHost } from '../runtime/host.ts'\nimport { openZip, readTarGz, readZipEntry, sha256Bytes } from './pikg_archive.ts'\nimport { inspectPikg } from './pikg_protocol.ts'\n\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst SKILL_KINDS = ['cmd', 'goal']\nconst SKILLS_SUB_PKG = 'agent_skills'\nconst SKILL_DIRS = ['cmd_skills', 'goal_skills', 'tools']\nconst MAX_SKILL_PAYLOAD_BYTES = 64 * 1024 * 1024\nconst AGENT_ID = /^[A-Za-z0-9][A-Za-z0-9._-]*$/\n\nconst AGENT_OPTION: OptionDefinition = {\n name: 'agent',\n property: 'agent_id',\n description: 'Agent ID; the Agent serves kRPC at /kapi/<agent_id>',\n type: 'string',\n required: true,\n}\n\nconst KIND_OPTION: OptionDefinition = {\n name: 'kind',\n description: 'Skill kind',\n type: 'string',\n enum: SKILL_KINDS,\n}\n\nexport function createSkillModule(): CommandModule {\n return {\n name: 'skill',\n summary: 'List, install, and remove the cmd/goal skills of an Agent',\n commands: [\n {\n verb: 'list',\n summary: 'List the skills of an Agent',\n options: [AGENT_OPTION, KIND_OPTION],\n inputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: SKILL_KINDS },\n },\n required: ['agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos skill list --agent jarvis.example.zone',\n 'buckyos skill list --agent jarvis.example.zone --kind cmd',\n ],\n handler: async (ctx, input) => {\n const agentId = agentIdFrom(input)\n const kind = typeof input.kind === 'string' ? input.kind : undefined\n const skills = await listSkills(ctx, agentId, kind)\n return { agent_id: agentId, ...(kind ? { kind } : {}), total: skills.length, skills }\n },\n },\n {\n verb: 'install',\n summary: 'Install the skills of a skill PIKG into an Agent',\n description:\n 'Verifies the PIKG offline, requires app_type agent_skills, and sends the files of its agent_skills sub package (cmd_skills/, goal_skills/, tools/) to the Agent. Sessions created before keep their frozen manuals.',\n positionals: [{ name: 'pikg_path', description: 'Local skill .pikg file' }],\n options: [\n AGENT_OPTION,\n {\n name: 'replace',\n description: 'Replace skills of the same names from another package',\n type: 'boolean',\n },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n pikg_path: { type: 'string', minLength: 1 },\n agent_id: { type: 'string', minLength: 1 },\n replace: { type: 'boolean' },\n },\n required: ['pikg_path', 'agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos skill install ./dapp_dist/hello-skills-0.1.0.pikg --agent jarvis.example.zone',\n 'buckyos skill install ./hello-skills-0.2.0.pikg --agent jarvis.example.zone --replace',\n ],\n handler: async (ctx, input) => await installSkills(ctx, input),\n },\n {\n verb: 'remove',\n summary: 'Remove an installed skill from an Agent',\n description:\n 'Only installed skills can be removed. Without --kind the kind is looked up by name.',\n positionals: [{ name: 'name', description: 'Skill name' }],\n options: [AGENT_OPTION, KIND_OPTION],\n inputSchema: {\n type: 'object',\n properties: {\n name: { type: 'string', minLength: 1 },\n agent_id: { type: 'string', minLength: 1 },\n kind: { type: 'string', enum: SKILL_KINDS },\n },\n required: ['name', 'agent_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos --yes skill remove hello --agent jarvis.example.zone --kind cmd'],\n handler: async (ctx, input) => await removeSkill(ctx, input),\n },\n ],\n }\n}\n\nasync function installSkills(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const agentId = agentIdFrom(input)\n const raw = requiredInputString(input, 'pikg_path')\n const path = getHost().path.isAbsolute(raw)\n ? getHost().path.resolve(raw)\n : getHost().path.resolve(ctx.cwd, raw)\n const inspection = await inspectPikg(path)\n if (inspection.app.app_type !== SKILLS_SUB_PKG) {\n throw new UsageError(\n 'NOT_A_SKILL_PACKAGE',\n `PIKG app_type is ${inspection.app.app_type}; a skill package has app_type ${SKILLS_SUB_PKG} (buckyos pikg init --kind agent-skills)`,\n )\n }\n const payload = inspection.subpackages.find((item) => item.key === SKILLS_SUB_PKG)\n ?.payload as { path: string; digest: string }\n const archive = await openZip(path)\n const bytes = await readZipEntry(\n archive,\n archive.byName.get(payload.path)!,\n MAX_SKILL_PAYLOAD_BYTES,\n )\n if (`sha256:${sha256Bytes(bytes)}` !== payload.digest) {\n throw new ToolError('INVALID_PACKAGE', 'PIKG changed after it was verified')\n }\n const files: Record<string, { content: string; executable: boolean }> = {}\n const ignored: string[] = []\n for (const entry of await readTarGz(bytes, MAX_SKILL_PAYLOAD_BYTES)) {\n if (!SKILL_DIRS.includes(entry.path.split('/')[0])) {\n ignored.push(entry.path)\n continue\n }\n files[entry.path] = { content: base64(entry.bytes), executable: entry.executable }\n }\n const result = await callService<unknown>(ctx, agentId, 'skills.install', {\n package: {\n package: inspection.app.name,\n version: inspection.app.version,\n pikg_digest: inspection.pikg_digest,\n files,\n },\n replace: input.replace === true,\n })\n return {\n agent_id: agentId,\n pikg_path: inspection.pikg_path,\n pikg_digest: inspection.pikg_digest,\n ...expectObject(result, 'skills.install'),\n ...(ignored.length ? { ignored_files: ignored } : {}),\n }\n}\n\nasync function removeSkill(\n ctx: CommandContext,\n input: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n const agentId = agentIdFrom(input)\n const name = requiredInputString(input, 'name')\n let kind = typeof input.kind === 'string' ? input.kind : undefined\n if (!kind) {\n const kinds = (await listSkills(ctx, agentId)).filter((skill) => skill.name === name)\n .map((skill) => String(skill.kind))\n if (kinds.length === 0) {\n throw new ToolError('RESOURCE_NOT_FOUND', `Agent ${agentId} has no skill named ${name}`)\n }\n if (kinds.length > 1) {\n throw new UsageError('AMBIGUOUS_SKILL', `${name} is both a cmd and a goal skill; use --kind`)\n }\n kind = kinds[0]\n }\n if (!ctx.confirmed) {\n if (ctx.config.nonInteractive || !ctx.io.inputIsTerminal) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'skill remove requires --yes in non-interactive execution',\n EXIT_PERMISSION,\n )\n }\n const answer = (await ctx.io.prompt(`Remove ${kind} skill ${name} from ${agentId}? [y/N] `))\n ?.trim().toLowerCase()\n if (answer !== 'y' && answer !== 'yes') {\n throw new ToolError('CONFIRMATION_DECLINED', 'skill remove was declined', EXIT_PERMISSION)\n }\n }\n const removed = await callService<unknown>(ctx, agentId, 'skills.remove', { kind, name })\n return { agent_id: agentId, removed: expectObject(removed, 'skills.remove') }\n}\n\nasync function listSkills(\n ctx: CommandContext,\n agentId: string,\n kind?: string,\n): Promise<Record<string, unknown>[]> {\n const skills = await callService<unknown>(ctx, agentId, 'skills.list', kind ? { kind } : {})\n if (!Array.isArray(skills)) invalidResponse('skills.list')\n return (skills as unknown[]).map((skill) => expectObject(skill, 'skills.list'))\n}\n\nfunction agentIdFrom(input: Record<string, unknown>): string {\n const agentId = requiredInputString(input, 'agent_id')\n if (!AGENT_ID.test(agentId)) {\n throw new UsageError('INVALID_AGENT_ID', `invalid Agent ID: ${agentId}`)\n }\n return agentId\n}\n\nfunction expectObject(value: unknown, method: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) invalidResponse(method)\n return value as Record<string, unknown>\n}\n\nfunction invalidResponse(method: string): never {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n `Agent returned an invalid response for ${method}`,\n EXIT_INTERNAL,\n )\n}\n\nfunction base64(bytes: Uint8Array): string {\n let binary = ''\n for (let index = 0; index < bytes.length; index += 0x8000) {\n binary += String.fromCharCode(...bytes.subarray(index, index + 0x8000))\n }\n return btoa(binary)\n}\n","import type { CommandModule, JsonSchema, PositionalDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { callService, expectObject, requiredInputString } from '../core/service.ts'\n\nconst CONTROL_PANEL = 'control-panel'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst AGENT_POSITIONAL: PositionalDefinition = {\n name: 'agent_id',\n description: 'Agent ID as `agent list` prints it (raw host name, e.g. jarvis.example.zone)',\n}\nconst AGENT_INPUT: JsonSchema = {\n type: 'object',\n properties: { agent_id: { type: 'string', minLength: 1 } },\n required: ['agent_id'],\n additionalProperties: false,\n}\nconst PROFILE_FIELDS = ['display_name', 'bio']\n\n// Control Panel answers for Agents the caller owns; admins (and the device identity) see all.\nexport function createAgentModule(): CommandModule {\n return {\n name: 'agent',\n summary: 'List Agents and read or change their profiles',\n commands: [\n {\n verb: 'list',\n summary: 'List the Agents visible to the caller',\n description: 'Owners see their own Agents; admins see every Agent in the Zone.',\n inputSchema: { type: 'object', properties: {}, additionalProperties: false },\n outputSchema: {\n type: 'object',\n properties: { agents: { type: 'array', items: OBJECT_OUTPUT } },\n required: ['agents'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent list'],\n handler: async (ctx) => {\n const response = await callAgent(ctx, 'agent.list', {})\n if (!Array.isArray(response.agents)) {\n throw new ToolError(\n 'INVALID_SERVICE_RESPONSE',\n 'agent.list agents must be an array',\n EXIT_INTERNAL,\n )\n }\n return { agents: response.agents }\n },\n },\n {\n verb: 'get',\n summary: 'Get one Agent: profile, settings, install state, template, and runtime',\n positionals: [AGENT_POSITIONAL],\n inputSchema: AGENT_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent get jarvis.example.zone'],\n handler: async (ctx, input) =>\n await callAgent(ctx, 'agent.get', { agent_id: requiredInputString(input, 'agent_id') }),\n },\n {\n verb: 'profile-get',\n summary: 'Get the public profile (display name, bio, avatar) of an Agent',\n positionals: [AGENT_POSITIONAL],\n inputSchema: AGENT_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos agent profile-get jarvis.example.zone'],\n handler: async (ctx, input) => {\n const agentId = requiredInputString(input, 'agent_id')\n return {\n agent_id: agentId,\n ...await callAgent(ctx, 'agent.profile.get', { agent_id: agentId }),\n }\n },\n },\n {\n verb: 'profile-set',\n summary: 'Change the display name or bio of an Agent',\n description:\n 'Only the given fields change; an empty value clears the field. Returns the profile before and after the change, and Message Center reloads the new name.',\n positionals: [AGENT_POSITIONAL],\n options: [\n {\n name: 'display-name',\n description: 'New display name; empty clears it',\n type: 'string',\n },\n { name: 'bio', description: 'New bio; empty clears it', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string', minLength: 1 },\n display_name: { type: 'string' },\n bio: { type: 'string' },\n },\n required: ['agent_id'],\n additionalProperties: false,\n },\n outputSchema: {\n type: 'object',\n properties: {\n agent_id: { type: 'string' },\n before: OBJECT_OUTPUT,\n profile: OBJECT_OUTPUT,\n },\n required: ['agent_id', 'before', 'profile'],\n additionalProperties: false,\n },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n \"buckyos agent profile-set jarvis.example.zone --display-name 'Jarvis'\",\n \"buckyos agent profile-set jarvis.example.zone --bio ''\",\n ],\n handler: async (ctx, input) => {\n const agentId = requiredInputString(input, 'agent_id')\n const changes = Object.fromEntries(\n PROFILE_FIELDS.filter((field) => typeof input[field] === 'string')\n .map((field) => [field, input[field]]),\n )\n if (Object.keys(changes).length === 0) {\n throw new UsageError('INVALID_ARGUMENT', 'give --display-name or --bio')\n }\n const before = await callAgent(ctx, 'agent.profile.get', { agent_id: agentId })\n const after = await callAgent(ctx, 'agent.profile.set', { agent_id: agentId, ...changes })\n return {\n agent_id: agentId,\n before: expectObject(before.profile, 'agent.profile.get profile'),\n profile: expectObject(after.profile, 'agent.profile.set profile'),\n }\n },\n },\n ],\n }\n}\n\nasync function callAgent(\n ctx: CommandContext,\n method: string,\n params: Record<string, unknown>,\n): Promise<Record<string, unknown>> {\n try {\n return expectObject(await callService(ctx, CONTROL_PANEL, method, params), method)\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n if (message.includes('agent_not_found')) {\n throw new ToolError('RESOURCE_NOT_FOUND', `Agent not found or not yours: ${params.agent_id}`)\n }\n throw error\n }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport { UsageError } from '../core/errors.ts'\nimport {\n callService,\n expectObject,\n inputString,\n parseTimestamp,\n splitServices,\n} from '../core/service.ts'\n\nconst AICC = 'aicc'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst EMPTY_INPUT: JsonSchema = { type: 'object', properties: {}, additionalProperties: false }\nconst RANGES = ['last1d', 'last7d', 'last30d']\nconst GROUPS = [\n 'provider_instance_name',\n 'provider_model',\n 'request_model',\n 'method',\n 'capability',\n 'caller_app_id',\n 'user_id',\n 'tenant_id',\n]\n\n// Read views of the AICC service (/kapi/aicc); provider and routing changes stay in Control Panel.\nexport function createAiModule(): CommandModule {\n return {\n name: 'ai',\n summary: 'Read AI provider, routing, usage and token quota state of the AICC service',\n commands: [\n readCommand({\n verb: 'providers',\n summary: 'List configured AI provider instances with auth, health, and model inventory',\n method: 'provider.list',\n description:\n 'Credentials are reported only as configured/kind; secrets are never returned.',\n }),\n readCommand({\n verb: 'routing',\n summary: 'Get the AICC routing overlay and its settings revision',\n method: 'routing.get',\n description: 'An empty routing object means the default routing of the model catalog.',\n }),\n usageCommand(),\n quotaCommand(),\n ],\n }\n}\n\nfunction quotaCommand(): CommandDefinition {\n return {\n verb: 'quota',\n summary: \"Show the token quota rules that limit the caller's AI calls and what is left\",\n description:\n 'Admin rules on the caller and the caller\\'s Apps, shared App rules, and the caller\\'s own App limits, each with its current window or total account. A refused call returns quota_exhausted / quota_budget_exceeded with the blocking rules.',\n options: [\n { name: 'app', description: 'Only the rules that apply to calls of this App (an AppId or AgentId)', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: { app: { type: 'string', minLength: 1 } },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos ai quota', 'buckyos ai quota --app aiworkspace'],\n handler: async (ctx, input) =>\n expectObject(\n await callService(ctx, AICC, 'quota.query', inputString(input, 'app') ? { app_id: inputString(input, 'app') } : {}),\n 'quota.query',\n ),\n }\n}\n\nfunction readCommand(options: {\n verb: string\n summary: string\n method: string\n description: string\n}): CommandDefinition {\n return {\n verb: options.verb,\n summary: options.summary,\n description: options.description,\n inputSchema: EMPTY_INPUT,\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [`buckyos ai ${options.verb}`],\n handler: async (ctx) =>\n expectObject(await callService(ctx, AICC, options.method, {}), options.method),\n }\n}\n\nfunction usageCommand(): CommandDefinition {\n return {\n verb: 'usage',\n summary: \"Aggregate the caller's AI usage: requests, tokens, and cost\",\n description:\n \"Scoped to the caller's own user (a device identity sees only its own calls, not the Zone total). Without --since the range defaults to last7d; --until defaults to now.\",\n options: [\n {\n name: 'range',\n description: 'last1d, last7d (default), or last30d',\n type: 'string',\n enum: RANGES,\n },\n { name: 'since', description: 'RFC 3339 or Unix ms lower bound', type: 'string' },\n { name: 'until', description: 'RFC 3339 or Unix ms upper bound', type: 'string' },\n {\n name: 'group-by',\n description: `Comma-separated: ${GROUPS.join(', ')}`,\n type: 'string',\n },\n {\n name: 'bucket',\n description: 'Time buckets: hour or day',\n type: 'string',\n enum: ['hour', 'day'],\n },\n { name: 'events', description: 'Also return the individual usage events', type: 'boolean' },\n { name: 'limit', description: 'Event page size', type: 'integer' },\n { name: 'cursor', description: 'Opaque event page cursor', type: 'string' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n range: { type: 'string', enum: RANGES },\n since: { type: 'string', minLength: 1 },\n until: { type: 'string', minLength: 1 },\n group_by: { type: 'string', minLength: 1 },\n bucket: { type: 'string', enum: ['hour', 'day'] },\n events: { type: 'boolean' },\n limit: { type: 'integer', minimum: 1 },\n cursor: { type: 'string', minLength: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos ai usage --range last1d --group-by provider_instance_name,provider_model',\n 'buckyos ai usage --since 2026-10-01T00:00:00Z --bucket day',\n ],\n handler: async (ctx, input) => {\n const groupBy = splitServices(input.group_by)\n const unknown = groupBy.filter((group) => !GROUPS.includes(group))\n if (unknown.length > 0) {\n throw new UsageError(\n 'INVALID_ARGUMENT',\n `unknown group-by ${unknown.join(', ')}; use ${GROUPS.join(', ')}`,\n )\n }\n return expectObject(\n await callService(ctx, AICC, 'usage.query', {\n time_range: timeRange(input),\n ...(groupBy.length > 0 ? { group_by: groupBy } : {}),\n ...(input.bucket ? { time_bucket: input.bucket } : {}),\n output_mode: input.events === true ? 'summary_and_events' : 'summary',\n ...(input.limit !== undefined ? { limit: input.limit } : {}),\n ...(inputString(input, 'cursor') ? { cursor: inputString(input, 'cursor') } : {}),\n }),\n 'usage.query',\n )\n },\n }\n}\n\nfunction timeRange(input: Record<string, unknown>): Record<string, unknown> {\n const since = parseTimestamp(input.since, 'since')\n const until = parseTimestamp(input.until, 'until')\n if (since === undefined) {\n if (until !== undefined) throw new UsageError('INVALID_ARGUMENT', '--until requires --since')\n return { kind: inputString(input, 'range') ?? 'last7d' }\n }\n if (input.range !== undefined) {\n throw new UsageError('ARGUMENT_CONFLICT', '--range cannot be combined with --since')\n }\n return { kind: 'explicit', start_time_ms: since, end_time_ms: until ?? Date.now() }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { EXIT_INTERNAL, ToolError, UsageError } from '../core/errors.ts'\nimport { expectObject, inputString, parseTimestamp, requiredInputString } from '../core/service.ts'\n\n// Share links of the Zone file service (nfs-server `share.*` over NFSP,\n// buckyos notepads/share-content-mgr-tech-design-todo.md §3.6).\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst DAY_MS = 86_400_000\nconst EXPIRES_HELP = '1d, 7d (default), 30d, none, or an RFC 3339 time'\n\nexport function createShareModule(): CommandModule {\n return {\n name: 'share',\n summary: 'Share files and folders as links, and manage what you have shared',\n commands: [\n createCommand(),\n listCommand(),\n getCommand(),\n updateCommand(),\n stopCommand(),\n statsCommand(),\n ],\n }\n}\n\ninterface NfspSession {\n call(method: string, args: Record<string, unknown>, write?: boolean): Promise<Record<string, unknown>>\n}\n\nasync function openNfsp(ctx: CommandContext): Promise<NfspSession> {\n const session = ctx.session\n if (!session) throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n const token = (await session.ensureValid()).token\n const base = gatewayOrigin(ctx.connection.endpoint)\n let seq = 0\n const post = async (method: string, body: Record<string, unknown>) => {\n const response = await fetch(`${base}/nfs/v1/${method}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },\n body: JSON.stringify(body),\n signal: ctx.signal,\n })\n let parsed: { ok?: boolean; result?: unknown; error?: Record<string, unknown> }\n try {\n parsed = await response.json()\n } catch {\n throw new ToolError('INVALID_SERVICE_RESPONSE', `file service answered HTTP ${response.status}`, EXIT_INTERNAL)\n }\n if (parsed.ok !== true) {\n const error = parsed.error ?? {}\n const reason = typeof error.reason === 'string' ? error.reason.toUpperCase() : String(error.code ?? 'INTERNAL')\n throw new ToolError(`SHARE_${reason}`, String(error.message ?? 'share request failed'))\n }\n return expectObject(parsed.result, `${method} result`)\n }\n const hello = await post('hello', { args: { versions: ['nfsp/0'] } })\n const sessionId = String(hello.session ?? '')\n if (!Array.isArray(hello.features) || !hello.features.includes('share')) {\n throw new ToolError('SHARE_UNSUPPORTED', 'the file service of this Zone does not support sharing')\n }\n return {\n call: (method, args, write = false) =>\n post(method, { session: sessionId, args: { ...args, source_hint: 'cli' }, ...(write ? { seq: ++seq } : {}) }),\n }\n}\n\nfunction gatewayOrigin(endpoint: string): string {\n const url = new URL(endpoint)\n const marker = url.pathname.indexOf('/kapi')\n url.pathname = marker >= 0 ? url.pathname.slice(0, marker) || '/' : '/'\n url.search = ''\n url.hash = ''\n return url.toString().replace(/\\/$/, '')\n}\n\n/** `--expires` → unix seconds, `null` for no expiry, `undefined` for the server default (7 days). */\nexport function parseExpires(value: unknown): number | null | undefined {\n if (value === undefined) return undefined\n const text = String(value).trim().toLowerCase()\n if (text === 'none' || text === 'never') return null\n const days = text.match(/^(\\d+)d$/)\n if (days) return Math.floor((Date.now() + Number(days[1]) * DAY_MS) / 1000)\n const at = parseTimestamp(value, 'expires')\n if (at === undefined) return undefined\n if (at <= Date.now()) throw new UsageError('INVALID_ARGUMENT', 'expires must be in the future')\n return Math.floor(at / 1000)\n}\n\nfunction sourceLocator(path: string): Record<string, unknown> {\n if (path.startsWith('cyfs://')) return { uri: path }\n return { path: path.startsWith('/') ? path : `/${path}` }\n}\n\nfunction summary(share: Record<string, unknown>): Record<string, unknown> {\n const keep = ['share_id', 'kind', 'title', 'status', 'access', 'expires_at', 'url', 'target_app', 'delivery_state', 'source_path', 'revision', 'created_at', 'stats']\n return Object.fromEntries(keep.filter((key) => share[key] !== undefined).map((key) => [key, share[key]]))\n}\n\nfunction createCommand(): CommandDefinition {\n return {\n verb: 'create',\n summary: 'Share a file or folder as a link (a snapshot of its current content)',\n positionals: [{ name: 'path', description: 'File or folder, e.g. /home/alice/report.pdf or cyfs:///home/alice/report.pdf', required: true }],\n options: [\n { name: 'expires', description: `Link expiry: ${EXPIRES_HELP}`, type: 'string' },\n { name: 'password', description: 'Require this password to open the link', type: 'string' },\n { name: 'title', description: 'Title shown to visitors', type: 'string' },\n { name: 'no-download', property: 'no_download', description: 'Preview only, no download button', type: 'boolean' },\n { name: 'wait', description: 'Wait for a large snapshot to finish', type: 'boolean' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n path: { type: 'string', minLength: 1 },\n expires: { type: 'string', minLength: 1 },\n password: { type: 'string', minLength: 1 },\n title: { type: 'string', minLength: 1 },\n no_download: { type: 'boolean' },\n wait: { type: 'boolean' },\n },\n required: ['path'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'either',\n requiresSession: true,\n examples: [\n 'buckyos share create /home/alice/report.pdf',\n 'buckyos share create /home/alice/photos --expires 30d --password s3cret',\n ],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const expires = parseExpires(input.expires)\n const password = inputString(input, 'password')\n const policy: Record<string, unknown> = {\n access: password ? 'password' : 'holder',\n allow_download: input.no_download !== true,\n ...(password ? { password } : {}),\n ...(expires !== undefined ? { expires_at: expires } : {}),\n }\n let op = await nfsp.call('share.create', {\n source: sourceLocator(requiredInputString(input, 'path')),\n policy,\n title: inputString(input, 'title'),\n idempotency_key: ctx.idempotencyKey ?? crypto.randomUUID(),\n }, true)\n while (input.wait === true && (op.state === 'running' || op.state === 'preparing')) {\n await new Promise((resolve) => setTimeout(resolve, 1000))\n ctx.signal.throwIfAborted()\n op = await nfsp.call('share.operation', { operation_id: op.operation_id })\n }\n if (op.state === 'failed' || op.state === 'canceled') {\n const error = (op.error ?? {}) as Record<string, unknown>\n throw new ToolError(`SHARE_${String(error.reason ?? op.state).toUpperCase()}`, String(error.message ?? `share ${op.state}`))\n }\n return {\n operation_id: op.operation_id,\n state: op.state,\n share_id: op.share_id ?? null,\n url: op.url ?? null,\n source_changed: op.source_changed ?? false,\n ...(op.share ? { share: summary(op.share as Record<string, unknown>) } : {}),\n }\n },\n }\n}\n\nfunction listCommand(): CommandDefinition {\n return {\n verb: 'list',\n summary: 'List your shares',\n options: [\n { name: 'kind', description: 'link or app_delivery', type: 'string', enum: ['link', 'app_delivery'] },\n { name: 'status', description: 'active, stopped, expired, ...', type: 'string' },\n { name: 'q', description: 'Search title and path', type: 'string' },\n { name: 'include-hidden', property: 'include_hidden', description: 'Include hidden shares', type: 'boolean' },\n { name: 'cursor', description: 'Page cursor', type: 'string' },\n { name: 'limit', description: 'Page size, at most 200', type: 'integer' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n kind: { type: 'string', enum: ['link', 'app_delivery'] },\n status: { type: 'string', minLength: 1 },\n q: { type: 'string', minLength: 1 },\n include_hidden: { type: 'boolean' },\n cursor: { type: 'string', minLength: 1 },\n limit: { type: 'integer', minimum: 1 },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share list --kind link --status active'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const page = await nfsp.call('share.list', {\n kind: input.kind,\n status: input.status,\n q: input.q,\n include_hidden: input.include_hidden === true,\n cursor: input.cursor,\n limit: input.limit,\n })\n const items = Array.isArray(page.items) ? page.items as Record<string, unknown>[] : []\n return { items: items.map(summary), next_cursor: page.next_cursor ?? null }\n },\n }\n}\n\nfunction getCommand(): CommandDefinition {\n return {\n verb: 'get',\n summary: 'Show one share: link, policy, snapshot, delivery, statistics and history',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n inputSchema: {\n type: 'object',\n properties: { share_id: { type: 'string', minLength: 1 } },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share get sh_0123456789abcdef'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n return await nfsp.call('share.get', { share_id: requiredInputString(input, 'share_id') })\n },\n }\n}\n\nfunction updateCommand(): CommandDefinition {\n return {\n verb: 'update',\n summary: 'Change a link\\'s expiry, password, title or download setting',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n options: [\n { name: 'expires', description: `New expiry: ${EXPIRES_HELP}`, type: 'string' },\n { name: 'password', description: 'Set or change the password', type: 'string' },\n { name: 'no-password', property: 'no_password', description: 'Remove the password', type: 'boolean' },\n { name: 'title', description: 'New title', type: 'string' },\n { name: 'download', description: 'Allow (true) or forbid (false) downloading', type: 'boolean' },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n share_id: { type: 'string', minLength: 1 },\n expires: { type: 'string', minLength: 1 },\n password: { type: 'string', minLength: 1 },\n no_password: { type: 'boolean' },\n title: { type: 'string', minLength: 1 },\n download: { type: 'boolean' },\n },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share update sh_0123456789abcdef --expires none', 'buckyos share update sh_0123456789abcdef --password n3w'],\n handler: async (ctx, input) => {\n if (input.password !== undefined && input.no_password === true) {\n throw new UsageError('INVALID_ARGUMENT', 'use either --password or --no-password')\n }\n const changes: Record<string, unknown> = {}\n const expires = parseExpires(input.expires)\n if (expires !== undefined) changes.expires_at = expires\n if (input.password !== undefined) changes.password = String(input.password)\n if (input.no_password === true) changes.password = null\n if (input.title !== undefined) changes.title = String(input.title)\n if (input.download !== undefined) changes.allow_download = input.download === true\n if (!Object.keys(changes).length) throw new UsageError('INVALID_ARGUMENT', 'nothing to change')\n const nfsp = await openNfsp(ctx)\n const shareId = requiredInputString(input, 'share_id')\n const current = await nfsp.call('share.get', { share_id: shareId })\n const result = await nfsp.call('share.update', { share_id: shareId, revision: current.revision, changes }, true)\n return { revision: result.revision, share: summary(expectObject(result.share, 'share.update share')) }\n },\n }\n}\n\nfunction stopCommand(): CommandDefinition {\n return {\n verb: 'stop',\n summary: 'Stop a share: the link stops working and the kept snapshot is released',\n positionals: [{ name: 'share_id', description: 'Share ID (sh_…)', required: true }],\n options: [{ name: 'reason', description: 'Recorded in the share history', type: 'string' }],\n inputSchema: {\n type: 'object',\n properties: { share_id: { type: 'string', minLength: 1 }, reason: { type: 'string', minLength: 1 } },\n required: ['share_id'],\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'destructive' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share stop sh_0123456789abcdef --reason \"sent by mistake\"'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const shareId = requiredInputString(input, 'share_id')\n const current = await nfsp.call('share.get', { share_id: shareId })\n return await nfsp.call('share.stop', { share_id: shareId, revision: current.revision, reason: inputString(input, 'reason') }, true)\n },\n }\n}\n\nfunction statsCommand(): CommandDefinition {\n return {\n verb: 'stats',\n summary: 'Views, downloads, traffic and visitors of one share or all of yours',\n options: [\n { name: 'share-id', property: 'share_id', description: 'One share instead of all', type: 'string' },\n { name: 'days', description: 'How many days back (default 30)', type: 'integer' },\n { name: 'granularity', description: 'day or hour', type: 'string', enum: ['day', 'hour'] },\n ],\n inputSchema: {\n type: 'object',\n properties: {\n share_id: { type: 'string', minLength: 1 },\n days: { type: 'integer', minimum: 1 },\n granularity: { type: 'string', enum: ['day', 'hour'] },\n },\n additionalProperties: false,\n },\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos share stats --days 7', 'buckyos share stats --share-id sh_0123456789abcdef --granularity hour --days 2'],\n handler: async (ctx, input) => {\n const nfsp = await openNfsp(ctx)\n const to = Math.floor(Date.now() / 1000) + 1\n const days = typeof input.days === 'number' ? input.days : 30\n return await nfsp.call('share.stats', {\n share_id: inputString(input, 'share_id'),\n from: to - days * 86_400,\n to,\n granularity: input.granularity ?? 'day',\n })\n },\n }\n}\n","import { ExecutorCommandStream } from 'buckyos/node'\nimport type { CommandDefinition, CommandModule, JsonSchema } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError } from '../core/errors.ts'\nimport { getHost } from '../runtime/host.ts'\n\nconst text = { type: 'string' as const, minLength: 1 }\ntype ExecutorRoute = Parameters<typeof ExecutorCommandStream.connect>[0]\ntype ExecutorOperationLocator = Parameters<InstanceType<typeof ExecutorCommandStream>['query']>[0]\nconst object = { type: 'object' as const, additionalProperties: true }\nconst targetProperties = {\n executor_id: text, generation: { type: 'integer' as const, minimum: 1 },\n profile_id: text, store_id: text, locator: text,\n}\n\nfunction call<T>(ctx: CommandContext, method: string, params: Record<string, unknown>): Promise<T> {\n return ctx.clients.call('control-panel', method, params, {\n traceId: ctx.traceId, signal: ctx.signal, timeoutMs: Math.max(1, (ctx.deadline ?? Date.now() + 30000) - Date.now()),\n })\n}\n\nfunction management(verb: string, method: string, properties: Record<string, JsonSchema>, required: string[], write = false): CommandDefinition {\n return {\n verb, summary: `Executor ${verb}`, inputSchema: { ...object, properties, required, additionalProperties: false },\n outputSchema: object, resultSchemaVersion: 1, access: { mode: 'fixed', level: write ? 'write' : 'read' },\n asyncMode: 'sync', requiresSession: true,\n options: Object.entries(properties).filter(([, schema]) => schema.type !== 'object').map(([name, schema]) => ({\n name: name.replaceAll('_', '-'), property: name, description: name, type: schema.type === 'integer' ? 'integer' as const : 'string' as const,\n required: required.includes(name),\n })),\n handler: (ctx, input) => call(ctx, method, input),\n }\n}\n\nexport function createExecutorModule(): CommandModule {\n return {\n name: 'executor', summary: 'Manage lightweight devices and explicitly target online command/file executors',\n commands: [\n management('create', 'executor.device.create', { name: text, profiles: object, limits: object, expires_at_ms: { type: 'integer' } }, ['name', 'profiles'], true),\n management('list', 'executor.device.list', {}, []),\n management('issue', 'executor.device.issue', { executor_id: text, expires_at_ms: { type: 'integer' } }, ['executor_id'], true),\n management('revoke', 'executor.device.revoke', { executor_id: text }, ['executor_id'], true),\n management('delete', 'executor.device.delete', { executor_id: text }, ['executor_id'], true),\n management('online', 'executor.online.list', {}, []),\n operation('exec', { cmd: text, cwd: text, env: object, execution_timeout_ms: { type: 'integer', minimum: 1 } }, ['cmd', 'cwd']),\n operation('read', { path: text }, ['path']),\n operation('write', { path: text, content: { type: 'string' }, mode: { type: 'string', enum: ['replace', 'append', 'create_new'] } }, ['path', 'content']),\n operation('edit', { path: text, old_string: text, new_string: { type: 'string' } }, ['path', 'old_string', 'new_string']),\n operation('query', { channel: { type: 'string', enum: ['stdout', 'stderr', 'content'] }, offset: { type: 'integer', minimum: 0 }, wait_ms: { type: 'integer', minimum: 0 } }, []),\n operation('cancel', {}, []),\n ],\n }\n}\n\nfunction operation(verb: string, extra: Record<string, JsonSchema>, required: string[]): CommandDefinition {\n const recovery = verb === 'query' || verb === 'cancel'\n const properties: Record<string, JsonSchema> = { ...targetProperties, ...extra }\n return {\n verb, summary: `${verb} on an explicit executor; persist --locator before dispatch and query it after disconnection`,\n inputSchema: { ...object, properties, required: [...Object.keys(targetProperties), ...required], additionalProperties: false },\n outputSchema: object, resultSchemaVersion: 1,\n access: { mode: 'fixed', level: ['read', 'query'].includes(verb) ? 'read' : 'write' },\n asyncMode: 'sync', requiresSession: true,\n options: Object.entries(properties).filter(([, schema]) => schema.type !== 'object').map(([name, schema]) => ({\n name: name.replaceAll('_', '-'), property: name, description: name,\n type: schema.type === 'integer' ? 'integer' as const : 'string' as const,\n required: Object.keys(targetProperties).includes(name) || required.includes(name),\n })),\n handler: async (ctx, input) => {\n const target = { executor_id: String(input.executor_id), generation: Number(input.generation), profile_id: String(input.profile_id), store_id: String(input.store_id) }\n const path = String(input.locator)\n const host = getHost()\n let locator: ExecutorOperationLocator\n if (recovery) locator = JSON.parse(await host.readTextFile(path))\n else {\n locator = { ...target, op_id: crypto.randomUUID(), run_id: ctx.traceId, call_id: ctx.idempotencyKey ?? crypto.randomUUID() }\n await host.writeTextFile(path, JSON.stringify(locator) + '\\n', { createNew: true, mode: 0o600 })\n }\n if (!ctx.session) throw new ToolError('AUTH_REQUIRED', 'An authenticated App session is required')\n const { token } = await ctx.session.ensureValid()\n const route = await call<ExecutorRoute>(ctx, 'executor.stream.open', { executor_id: target.executor_id, generation: target.generation, profile_id: target.profile_id })\n const stream = await ExecutorCommandStream.connect(route, target, token, 'buckyos-cli', locator.run_id)\n if (!stream) throw new ToolError('INVALID_SERVICE_RESPONSE', 'Executor stream did not initialize')\n const abort = () => stream.close()\n ctx.signal.addEventListener('abort', abort, { once: true })\n try {\n let reply\n if (verb === 'exec') reply = await stream.exec(locator, String(input.cmd), String(input.cwd), (input.env ?? {}) as Record<string, string>, Number(input.execution_timeout_ms ?? 60000))\n else if (verb === 'read') reply = await stream.read(locator, String(input.path))\n else if (verb === 'write') reply = await stream.write(locator, String(input.path), new TextEncoder().encode(String(input.content)), (input.mode ?? 'replace') as 'replace' | 'append' | 'create_new')\n else if (verb === 'edit') reply = await stream.edit(locator, String(input.path), [{ old_string: String(input.old_string), new_string: String(input.new_string) }])\n else if (verb === 'cancel') reply = await stream.cancel(locator)\n else reply = await stream.query(locator, input.channel as 'stdout' | 'stderr' | 'content' | undefined, Number(input.offset ?? 0), Number(input.wait_ms ?? 0))\n return { locator, reply }\n } finally { ctx.signal.removeEventListener('abort', abort); stream.close() }\n },\n }\n}\n","import type { CommandDefinition, CommandModule, JsonSchema, OptionDefinition, PositionalDefinition } from '../core/command.ts'\nimport type { CommandContext } from '../core/context.ts'\nimport { ToolError, UsageError } from '../core/errors.ts'\nimport { callService, expectObject, inputString, requiredInputString } from '../core/service.ts'\nimport { getHost } from '../runtime/host.ts'\n\n// AI Workspace (`/kapi/aiworkspace`): reading a workspace, and the executor protocol of a wish run\n// (内核架构改进 M3): claim → heartbeat → report. Source of truth for the methods:\n// buckyos/src/frame/aiworkspace/README.md (Protocol).\nconst SERVICE = 'aiworkspace'\nconst OBJECT_OUTPUT: JsonSchema = { type: 'object', additionalProperties: true }\nconst WORKSPACE_OPTION: OptionDefinition = { name: 'workspace', property: 'workspace_id', description: 'Workspace id (ws_…)', type: 'string', required: true }\nconst RUN_OPTION: OptionDefinition = { name: 'run', property: 'run_id', description: 'Run id (run_…)', type: 'string', required: true }\nconst ATTEMPT_OPTION: OptionDefinition = { name: 'attempt', property: 'attempt', description: 'The attempt number `run-claim` answered', type: 'integer', required: true }\n\nfunction workspaceInput(extra: Record<string, JsonSchema>, required: string[] = []): JsonSchema {\n return { type: 'object', properties: { workspace_id: { type: 'string', minLength: 1 }, ...extra }, required: ['workspace_id', ...required], additionalProperties: false }\n}\n\nasync function aiws(ctx: CommandContext, method: string, params: Record<string, unknown>): Promise<Record<string, unknown>> {\n const result = expectObject(await callService<unknown>(ctx, SERVICE, method, params), method)\n if (result.ok === false) {\n const error = expectObject(result.error, `${method}.error`)\n const code = typeof error.code === 'string' ? error.code : 'AIWS_ERROR'\n const detail = typeof error.detail === 'string' ? error.detail : code\n throw new ToolError(code, `${code}${typeof error.sub_code === 'string' ? `/${error.sub_code}` : ''}: ${detail}`)\n }\n return result\n}\n\nasync function jsonInput(input: Record<string, unknown>, textKey: string, fileKey: string, label: string): Promise<unknown> {\n const text = inputString(input, textKey)\n const file = inputString(input, fileKey)\n if (text && file) throw new UsageError('AIWS_USAGE', `${textKey} and ${fileKey} are exclusive`)\n if (file) return JSON.parse(await getHost().readTextFile(file)) as unknown\n if (text) return JSON.parse(text) as unknown\n throw new UsageError('AIWS_USAGE', `${label}: pass --${textKey.replace(/_/g, '-')} or --${fileKey.replace(/_/g, '-')}`)\n}\n\nconst readCommand: CommandDefinition = {\n verb: 'read',\n summary: 'Read one entity of a workspace (envelope and content)',\n positionals: [{ name: 'entity_id', description: 'Entity id', required: true } satisfies PositionalDefinition],\n options: [WORKSPACE_OPTION, { name: 'selector', property: 'selector', description: 'Selector JSON, e.g. {\"kind\":\"table_record\",\"record_id\":\"r1\"}', type: 'string' }],\n inputSchema: workspaceInput({ entity_id: { type: 'string', minLength: 1 }, selector: { type: 'string' } }, ['entity_id']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws read orders --workspace ws_abc'],\n handler: (ctx, input) => {\n const selector = inputString(input, 'selector')\n return aiws(ctx, 'doc.read', { workspace_id: requiredInputString(input, 'workspace_id'), entity_id: requiredInputString(input, 'entity_id'), ...(selector ? { selector: JSON.parse(selector) } : {}) })\n },\n}\n\nconst queryCommand: CommandDefinition = {\n verb: 'query',\n summary: 'Query the rows of a table (or through a saved view)',\n options: [\n WORKSPACE_OPTION,\n { name: 'source', property: 'source_id', description: 'Table entity id', type: 'string' },\n { name: 'view', property: 'view_id', description: 'Table view (Block) id', type: 'string' },\n { name: 'filter', property: 'filter', description: 'Filter JSON (README: doc.query)', type: 'string' },\n { name: 'limit', property: 'limit', description: 'Rows per page (≤ 1000)', type: 'integer' },\n { name: 'cursor', property: 'cursor', description: 'Continue from a previous page', type: 'string' },\n ],\n inputSchema: workspaceInput({ source_id: { type: 'string' }, view_id: { type: 'string' }, filter: { type: 'string' }, limit: { type: 'integer' }, cursor: { type: 'string' } }),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws query --workspace ws_abc --source orders --limit 100'],\n handler: (ctx, input) => {\n const params: Record<string, unknown> = { workspace_id: requiredInputString(input, 'workspace_id') }\n for (const key of ['source_id', 'view_id', 'cursor']) { const value = inputString(input, key); if (value) params[key] = value }\n const filter = inputString(input, 'filter')\n if (filter) params.filter = JSON.parse(filter)\n if (typeof input.limit === 'number') params.limit = input.limit\n if (!params.source_id && !params.view_id) throw new UsageError('AIWS_USAGE', 'pass --source or --view')\n return aiws(ctx, 'doc.query', params)\n },\n}\n\nconst infoCommand: CommandDefinition = {\n verb: 'info',\n summary: 'Workspace info: versions, capabilities of the caller, usage, hosted execution configuration',\n options: [WORKSPACE_OPTION],\n inputSchema: workspaceInput({}),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws info --workspace ws_abc'],\n handler: (ctx, input) => aiws(ctx, 'ws.get_info', { workspace_id: requiredInputString(input, 'workspace_id') }),\n}\n\nconst runGetCommand: CommandDefinition = {\n verb: 'run-get',\n summary: 'A wish run: state, execution context, the brief an executor starts from, candidate and preview',\n options: [WORKSPACE_OPTION, RUN_OPTION],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 } }, ['run_id']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-get --workspace ws_abc --run run_xyz'],\n handler: (ctx, input) => aiws(ctx, 'proc.get', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id') }),\n}\n\nconst runClaimCommand: CommandDefinition = {\n verb: 'run-claim',\n summary: 'Take a run as its executor: starts an attempt, answers the attempt number, a run token and the lease',\n options: [WORKSPACE_OPTION, RUN_OPTION, { name: 'claim-token', property: 'claim_token', description: 'The claim token the run was dispatched with (ct_…)', type: 'string', required: true, secret: true }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, claim_token: { type: 'string', minLength: 1 } }, ['run_id', 'claim_token']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-claim --workspace ws_abc --run run_xyz --claim-token ct_…'],\n handler: (ctx, input) => aiws(ctx, 'proc.claim', {\n workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), claim_token: requiredInputString(input, 'claim_token'),\n executor: { kind: 'agent', principal: ctx.principal.id },\n }),\n}\n\nconst runHeartbeatCommand: CommandDefinition = {\n verb: 'run-heartbeat',\n summary: 'Keep the lease of a claimed run alive (every minute while working); optionally report progress',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'phase', property: 'phase', description: 'A short progress phase, e.g. \"reading inputs\"', type: 'string' }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, phase: { type: 'string' } }, ['run_id', 'attempt']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-heartbeat --workspace ws_abc --run run_xyz --attempt 1 --phase \"reading inputs\"'],\n handler: (ctx, input) => {\n const phase = inputString(input, 'phase')\n return aiws(ctx, 'proc.heartbeat', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, ...(phase ? { progress: { phase } } : {}) })\n },\n}\n\nconst runFilesCommand: CommandDefinition = {\n verb: 'run-files',\n summary: 'Write the stage of a claimed run into a directory: the snapshot (context/), request.json, the Renderer catalog and the program host (lib/)',\n description: 'Run the program there the way the service does: `deno run -A lib/run.js` reads program/main.js and writes output/.aiws/results.json.',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'dir', property: 'dir', description: 'Directory to write into (created)', type: 'string', required: true }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, dir: { type: 'string', minLength: 1 } }, ['run_id', 'attempt', 'dir']),\n outputSchema: { type: 'object', properties: { dir: { type: 'string' }, files: { type: 'array', items: { type: 'string' } } }, required: ['dir', 'files'], additionalProperties: true },\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'read' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-files --workspace ws_abc --run run_xyz --attempt 1 --dir work'],\n handler: async (ctx, input) => {\n const result = await aiws(ctx, 'proc.files', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt })\n const dir = requiredInputString(input, 'dir')\n const host = getHost()\n const written: string[] = []\n for (const [path, file] of Object.entries(expectObject(result.files, 'proc.files.files'))) {\n const f = expectObject(file, path)\n if (typeof f.text !== 'string' && typeof f.base64 !== 'string') continue\n const target = `${dir}/${path}`\n await host.mkdir(target.slice(0, target.lastIndexOf('/')), { recursive: true })\n if (typeof f.text === 'string') await host.writeTextFile(target, f.text)\n else await host.writeFile(target, Uint8Array.from(atob(f.base64 as string), (c) => c.charCodeAt(0)))\n written.push(path)\n }\n await host.mkdir(`${dir}/output`, { recursive: true })\n await host.mkdir(`${dir}/program`, { recursive: true })\n return { dir, files: written }\n },\n}\n\nconst runToolCommand: CommandDefinition = {\n verb: 'run-tool',\n summary: 'Call one stage tool of a claimed run (ws_profile, ws_read, ws_query, submit_analysis, put_result, check_results, finish, …): the service answers as it answers the model',\n options: [WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION, { name: 'name', property: 'name', description: 'Tool name (the claim answered the list, with their argument schemas)', type: 'string', required: true }, { name: 'args', property: 'args', description: 'Arguments JSON', type: 'string' }, { name: 'args-file', property: 'args_file', description: 'Path of a JSON file holding the arguments', type: 'string' }],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, name: { type: 'string', minLength: 1 }, args: { type: 'string' }, args_file: { type: 'string' } }, ['run_id', 'attempt', 'name']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-tool --workspace ws_abc --run run_xyz --attempt 1 --name ws_profile --args \\'{\"target\":\"@B1\"}\\'', 'buckyos aiws run-tool --workspace ws_abc --run run_xyz --attempt 1 --name finish --args \\'{\"summary\":\"done\"}\\''],\n handler: async (ctx, input) => {\n const args = inputString(input, 'args') || inputString(input, 'args_file') ? await jsonInput(input, 'args', 'args_file', 'arguments') : {}\n return aiws(ctx, 'proc.tool', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, name: requiredInputString(input, 'name'), args })\n },\n}\n\nconst runProgramCommand: CommandDefinition = {\n verb: 'run-program',\n summary: 'Hand in a program run: the program source, what lib/run.js wrote to output/.aiws/results.json, the files under output/ and the log; the service validates it like its own run_program',\n options: [\n WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION,\n { name: 'dir', property: 'dir', description: 'The stage directory written by run-files (program/main.js, output/)', type: 'string', required: true },\n { name: 'log-file', property: 'log_file', description: 'Path of the program log to attach (stdout/stderr of deno run)', type: 'string' },\n ],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, dir: { type: 'string', minLength: 1 }, log_file: { type: 'string' } }, ['run_id', 'attempt', 'dir']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: ['buckyos aiws run-program --workspace ws_abc --run run_xyz --attempt 1 --dir work --log-file work/run.log'],\n handler: async (ctx, input) => {\n const dir = requiredInputString(input, 'dir')\n const host = getHost()\n const source = await host.readTextFile(`${dir}/program/main.js`)\n let results: unknown = null\n try { results = JSON.parse(await host.readTextFile(`${dir}/output/.aiws/results.json`)) } catch { results = null }\n const logFile = inputString(input, 'log_file')\n const log = logFile ? await host.readTextFile(logFile).catch(() => '') : ''\n const files: Record<string, unknown> = {}\n const walk = async (rel: string) => {\n for (const entry of await host.readDir(`${dir}/output${rel ? `/${rel}` : ''}`)) {\n const name = rel ? `${rel}/${entry.name}` : entry.name\n if (name === '.aiws' || name.startsWith('.aiws/')) continue\n if (entry.isDirectory) await walk(name)\n else {\n const bytes = await host.readFile(`${dir}/output/${name}`)\n let text: string | null = null\n try { text = bytes.includes(0) ? null : new TextDecoder('utf-8', { fatal: true }).decode(bytes) } catch { text = null }\n files[`output/${name}`] = text ?? { base64: btoa(Array.from(bytes, (b) => String.fromCharCode(b)).join('')) }\n }\n }\n }\n await walk('')\n return aiws(ctx, 'proc.program', { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt, source, results, log, files })\n },\n}\n\nconst runReportCommand: CommandDefinition = {\n verb: 'run-report',\n summary: 'End a claimed run: --finished after the stage tools accepted the work (submit_analysis / finish), or the candidate itself (results / analysis), or a failure',\n description: 'The service validates and plans what is reported; the user confirms it in the workspace. A superseded attempt or a cancelled run gets RUN_REVOKED.',\n options: [\n WORKSPACE_OPTION, RUN_OPTION, ATTEMPT_OPTION,\n { name: 'finished', property: 'finished', description: 'The stage is done: what the tools collected becomes the candidate', type: 'boolean' },\n { name: 'results', property: 'results', description: 'Results JSON array (execute runs): [{ name, type, title?, content, config? }]', type: 'string' },\n { name: 'results-file', property: 'results_file', description: 'Path of a JSON file holding the results array', type: 'string' },\n { name: 'analysis', property: 'analysis', description: 'Analysis JSON (analyze runs, wish.analysis.v2)', type: 'string' },\n { name: 'analysis-file', property: 'analysis_file', description: 'Path of a JSON file holding the analysis', type: 'string' },\n { name: 'summary', property: 'summary', description: 'One paragraph on what was done', type: 'string' },\n { name: 'warning', property: 'warnings', description: 'A warning for the user (repeatable)', type: 'string' },\n { name: 'error', property: 'error', description: 'Report a failure instead: its reason', type: 'string' },\n ],\n inputSchema: workspaceInput({ run_id: { type: 'string', minLength: 1 }, attempt: { type: 'integer', minimum: 1 }, finished: { type: 'boolean' }, results: { type: 'string' }, results_file: { type: 'string' }, analysis: { type: 'string' }, analysis_file: { type: 'string' }, summary: { type: 'string' }, warnings: { type: 'string' }, error: { type: 'string' } }, ['run_id', 'attempt']),\n outputSchema: OBJECT_OUTPUT,\n resultSchemaVersion: 1,\n access: { mode: 'fixed', level: 'write' },\n asyncMode: 'sync',\n requiresSession: true,\n examples: [\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --finished',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --results-file out/results.json --summary \"monthly totals and a commentary\"',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --analysis-file out/analysis.json',\n 'buckyos aiws run-report --workspace ws_abc --run run_xyz --attempt 1 --error \"the input table is empty\"',\n ],\n handler: async (ctx, input) => {\n const params: Record<string, unknown> = { workspace_id: requiredInputString(input, 'workspace_id'), run_id: requiredInputString(input, 'run_id'), attempt: input.attempt }\n const error = inputString(input, 'error')\n if (error) {\n params.error = { code: 'EXECUTOR_FAILED', detail: error }\n } else if (input.finished === true) {\n params.finished = true\n } else if (inputString(input, 'analysis') || inputString(input, 'analysis_file')) {\n params.analysis = await jsonInput(input, 'analysis', 'analysis_file', 'an analysis')\n } else {\n params.results = await jsonInput(input, 'results', 'results_file', 'results')\n params.read_set = []\n }\n const summary = inputString(input, 'summary')\n if (summary) params.summary = summary\n const warning = inputString(input, 'warnings')\n if (warning) params.warnings = [warning]\n return aiws(ctx, 'proc.report', params)\n },\n}\n\nexport function createAiwsModule(): CommandModule {\n return {\n name: 'aiws',\n summary: 'AI Workspace: read a workspace, and execute wish runs as their executor (claim, heartbeat, report)',\n commands: [infoCommand, readCommand, queryCommand, runGetCommand, runClaimCommand, runHeartbeatCommand, runFilesCommand, runToolCommand, runProgramCommand, runReportCommand],\n }\n}\n","import type { GlobalOptions } from './argv.ts'\nimport { parseCommandArgs, parseDuration, parseInvocation, validateSchema } from './argv.ts'\nimport { AuthenticationSession, type SessionController } from './auth.ts'\nimport type { RegisteredCommand } from './command.ts'\nimport {\n type ConfigStore,\n type Environment,\n type ImplicitDeviceIdentity,\n localResolvedConfig,\n readEnvironment,\n resolveConfig,\n type ResolvedConfig,\n} from './config.ts'\nimport type { CommandContext } from './context.ts'\nimport { EXIT_PERMISSION, EXIT_SUCCESS, normalizeError, ToolError, UsageError } from './errors.ts'\nimport { applyImplicitDeviceIdentity, identityCandidateView } from './identity.ts'\nimport { errorEnvelope, renderError, renderSuccess, successEnvelope } from './output.ts'\nimport { CommandRegistry } from './registry.ts'\nimport { runRepl } from './repl.ts'\nimport {\n BuckyOSRuntimeAdapter,\n BuckyOSServiceClientRegistry,\n InteractiveSession,\n type RuntimeAdapter,\n type ServiceClientRegistry,\n} from './runtime.ts'\nimport { createAuthModule } from '../modules/auth.ts'\nimport { createCoreModules } from '../modules/core.ts'\nimport { createSystemModule } from '../modules/system.ts'\nimport { createSystemConfigModule } from '../modules/system_config.ts'\nimport { createPikgModule, type PikgModuleDependencies } from '../modules/pikg.ts'\nimport { type AppModuleDependencies, createAppModule } from '../modules/app.ts'\nimport { createDiagnosticModule, type DiagnosticModuleDependencies } from '../modules/diagnostic.ts'\nimport { createLogModule, type LogModuleDependencies } from '../modules/log.ts'\nimport { createTaskModule } from '../modules/task.ts'\nimport { createProvisionModule, type ProvisionModuleDependencies } from '../modules/provision.ts'\nimport { createSkillModule } from '../modules/skill.ts'\nimport { createAgentModule } from '../modules/agent.ts'\nimport { createAiModule } from '../modules/ai.ts'\nimport { createShareModule } from '../modules/share.ts'\nimport { createExecutorModule } from '../modules/executor.ts'\nimport { createAiwsModule } from '../modules/aiws.ts'\nimport {\n distributionManifestView,\n getHost,\n policyView,\n readDistributionManifest,\n} from '../runtime/host.ts'\nimport { PROTOCOL_VERSION, SDK_VERSION, TOOL_VERSION } from '../version.ts'\n\nexport const VERSION = TOOL_VERSION\n\nexport interface ToolStdio {\n stdout(value: string): Promise<void>\n stderr(value: string): Promise<void>\n readStdin(): Promise<string>\n prompt?(message: string): Promise<string | null>\n inputIsTerminal?(): boolean\n}\n\nexport interface ApplicationDependencies {\n environment?: Environment\n cwd?: string\n homeDir?: string\n stdio?: ToolStdio\n createAuthentication?: (config: ResolvedConfig) => SessionController\n runtime?: RuntimeAdapter\n createClients?: (\n config: ResolvedConfig,\n authentication: SessionController,\n ) => ServiceClientRegistry\n confirmDeviceIdentity?: (identity: ImplicitDeviceIdentity) => Promise<boolean>\n repl?: typeof runRepl\n pikg?: PikgModuleDependencies\n app?: AppModuleDependencies\n log?: LogModuleDependencies\n diagnostic?: DiagnosticModuleDependencies\n provision?: ProvisionModuleDependencies\n}\n\nexport class BuckyOSToolApplication {\n readonly registry: CommandRegistry\n readonly #environment: Environment\n readonly #cwd: string\n readonly #homeDir?: string\n readonly #stdio: ToolStdio\n readonly #createAuthentication: (config: ResolvedConfig) => SessionController\n readonly #runtime: RuntimeAdapter\n readonly #createClients: (\n config: ResolvedConfig,\n authentication: SessionController,\n ) => ServiceClientRegistry\n readonly #confirmDeviceIdentity: (identity: ImplicitDeviceIdentity) => Promise<boolean>\n readonly #repl: typeof runRepl\n\n constructor(dependencies: ApplicationDependencies = {}) {\n this.registry = createRegistry(\n dependencies.pikg,\n dependencies.app,\n dependencies.log,\n dependencies.diagnostic,\n dependencies.provision,\n )\n this.#environment = dependencies.environment ?? readEnvironment()\n this.#cwd = dependencies.cwd ?? getHost().cwd()\n this.#homeDir = dependencies.homeDir\n this.#stdio = dependencies.stdio ?? defaultStdio()\n this.#createAuthentication = dependencies.createAuthentication ??\n ((config) => new AuthenticationSession(config, this.#environment))\n this.#runtime = dependencies.runtime ?? new BuckyOSRuntimeAdapter()\n this.#createClients = dependencies.createClients ??\n ((config, authentication) => new BuckyOSServiceClientRegistry(config, authentication))\n this.#confirmDeviceIdentity = dependencies.confirmDeviceIdentity ?? confirmDeviceIdentity\n this.#repl = dependencies.repl ?? runRepl\n }\n\n async run(argv: string[]): Promise<number> {\n let fallbackTraceId: string = crypto.randomUUID()\n try {\n const invocation = parseInvocation(argv)\n fallbackTraceId = invocation.global.traceId ?? fallbackTraceId\n if (invocation.global.version) {\n if (invocation.module) {\n throw new UsageError('ARGUMENT_CONFLICT', '--version cannot be combined with a command')\n }\n if (invocation.global.verbose) {\n const distributionManifest = await readDistributionManifest()\n let identityCandidates: Record<string, unknown>\n try {\n const setup = await resolveConfig(invocation.global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n setup.resolved = await applyImplicitDeviceIdentity(\n setup.resolved,\n this.#environment,\n )\n identityCandidates = await identityCandidateView(\n setup.resolved,\n this.#environment,\n )\n } catch (error) {\n const normalized = normalizeError(error)\n identityCandidates = { mode: 'unavailable', error: normalized.code }\n }\n await this.#stdio.stdout(`${\n JSON.stringify(\n {\n buckyos: distributionManifest?.buckyos_version ?? null,\n buckyos_build_id: distributionManifest?.build_id ?? null,\n tool_version: TOOL_VERSION,\n sdk_version: SDK_VERSION,\n protocol_version: PROTOCOL_VERSION,\n target_zone: invocation.global.zone ?? getHost().env('BUCKYOS_TOOL_ZONE') ?? null,\n compatibility: 'not-checked',\n ...policyView(getHost()),\n identity_candidates: identityCandidates,\n distribution_manifest: distributionManifestView(distributionManifest),\n },\n null,\n 2,\n )\n }\\n`)\n } else {\n await this.#stdio.stdout(`buckyos ${VERSION}\\n`)\n }\n return EXIT_SUCCESS\n }\n if (invocation.global.cli) {\n return await this.#runInteractive(invocation.global, invocation.module, invocation.verb)\n }\n if (!invocation.module) {\n if (invocation.global.help) {\n await this.#stdio.stdout(`${topLevelHelp(this.registry)}\\n`)\n return EXIT_SUCCESS\n }\n throw new UsageError('COMMAND_REQUIRED', 'a module and verb are required')\n }\n if (!invocation.verb || invocation.verb === '--help' || invocation.verb === '-h') {\n await this.#stdio.stdout(`${moduleHelp(this.registry, invocation.module)}\\n`)\n return EXIT_SUCCESS\n }\n\n const command = this.registry.get(invocation.module, invocation.verb)\n if (\n invocation.global.help || invocation.actionArgv.includes('--help') ||\n invocation.actionArgv.includes('-h')\n ) {\n await this.#stdio.stdout(`${commandHelp(this.registry, command)}\\n`)\n return EXIT_SUCCESS\n }\n if (command.execution === 'local') assertNoSessionOptions(invocation.global, command)\n const setup = await this.#resolveForCommand(command, invocation.global)\n const inputObject = invocation.global.input\n ? await this.#readInputObject(invocation.global.input)\n : undefined\n const parsed = parseCommandArgs(command, invocation.actionArgv, inputObject)\n if (setup.resolved.output === 'raw' && !command.supportsRawOutput) {\n throw new UsageError(\n 'RAW_OUTPUT_UNSUPPORTED',\n `${command.module} ${command.verb} does not support raw output`,\n )\n }\n const session = command.requiresSession\n ? await this.#createSession(setup.resolved)\n : undefined\n return await this.#executeAndEmit(\n command,\n parsed.input,\n setup.resolved,\n setup.store,\n session,\n false,\n new AbortController().signal,\n )\n } catch (error) {\n const normalized = normalizeError(error)\n const envelope = errorEnvelope(normalized, { command: 'core', trace_id: fallbackTraceId })\n await this.#stdio.stdout(`${renderError(envelope, 'json')}\\n`)\n return normalized.exitCode\n }\n }\n\n async #runInteractive(global: GlobalOptions, module?: string, verb?: string): Promise<number> {\n if (module || verb) {\n throw new UsageError('ARGUMENT_CONFLICT', '--cli cannot be combined with a module or verb')\n }\n if (global.nonInteractive) {\n throw new UsageError('ARGUMENT_CONFLICT', '--cli conflicts with --non-interactive')\n }\n for (\n const [name, value] of [\n ['input', global.input],\n ['timeout', global.timeout],\n ['trace-id', global.traceId],\n ['idempotency-key', global.idempotencyKey],\n ['wait', global.wait],\n ['yes', global.yes],\n ] as const\n ) {\n if (value !== undefined) {\n throw new UsageError(\n 'ARGUMENT_CONFLICT',\n `--${name} is command-scoped and cannot be set when entering --cli`,\n )\n }\n }\n const setup = await resolveConfig(global, this.#environment, {\n interactive: true,\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n setup.resolved = await applyImplicitDeviceIdentity(setup.resolved, this.#environment)\n const session = await this.#createSession(setup.resolved)\n await this.#repl({\n registry: this.registry,\n config: setup.resolved,\n configStore: setup.store,\n session,\n execute: async (tokens, signal) =>\n await this.#executeInteractiveLine(tokens, signal, setup.resolved, setup.store, session),\n })\n return EXIT_SUCCESS\n }\n\n async #executeInteractiveLine(\n tokens: string[],\n signal: AbortSignal,\n frozen: ResolvedConfig,\n store: ConfigStore,\n session: InteractiveSession,\n ): Promise<void> {\n if (tokens.length < 2) throw new UsageError('COMMAND_REQUIRED', 'enter <module> <verb>')\n const command = this.registry.get(tokens[0], tokens[1])\n const actionArgv = tokens.slice(2)\n if (actionArgv.includes('--help') || actionArgv.includes('-h')) {\n await this.#stdio.stdout(`${commandHelp(this.registry, command)}\\n`)\n return\n }\n const preliminary = parseCommandArgs(command, actionArgv, undefined, true, true)\n if (preliminary.scoped.input === '-') {\n throw new UsageError('STDIN_UNAVAILABLE', '--input - is not available inside --cli')\n }\n const inputObject = preliminary.scoped.input\n ? await this.#readInputObject(preliminary.scoped.input)\n : undefined\n const parsed = parseCommandArgs(command, actionArgv, inputObject, true)\n const config: ResolvedConfig = {\n ...frozen,\n output: parsed.scoped.output ?? frozen.output,\n timeoutMs: parsed.scoped.timeout ? parseDuration(parsed.scoped.timeout) : frozen.timeoutMs,\n traceId: parsed.scoped.traceId,\n idempotencyKey: parsed.scoped.idempotencyKey,\n wait: parsed.scoped.wait ?? false,\n yes: parsed.scoped.yes ?? false,\n }\n if (config.output === 'raw' && !command.supportsRawOutput) {\n throw new UsageError(\n 'RAW_OUTPUT_UNSUPPORTED',\n `${command.module} ${command.verb} does not support raw output`,\n )\n }\n await this.#executeAndEmit(command, parsed.input, config, store, session, true, signal)\n }\n\n async #executeAndEmit(\n command: RegisteredCommand,\n input: Record<string, unknown>,\n config: ResolvedConfig,\n store: ConfigStore,\n session: InteractiveSession | undefined,\n interactive: boolean,\n signal: AbortSignal,\n ): Promise<number> {\n const traceId = config.traceId ?? crypto.randomUUID()\n const startedAt = Date.now()\n try {\n if (command.requiresSession && !session) {\n throw new ToolError('AUTH_REQUIRED', 'authenticated session is required', 3)\n }\n if (command.requiresSession) await session!.authentication.ensureValid()\n const principal = session?.authentication.current().principal ?? {\n id: 'local',\n appId: 'buckyos-tool',\n authentication: 'mock' as const,\n }\n const context: CommandContext = {\n command: { module: command.module, verb: command.verb },\n definition: command,\n connection: session?.connection ?? {\n zone: config.zone ?? 'local',\n endpoint: config.endpoint ?? 'local://',\n defaultProtocol: config.defaultProtocol,\n },\n principal,\n clients: session?.clients ?? unavailableClients,\n output: { format: config.output },\n traceId,\n idempotencyKey: config.idempotencyKey,\n deadline: Date.now() + config.timeoutMs,\n signal,\n cwd: this.#cwd,\n io: {\n stdout: (value) => this.#stdio.stdout(value),\n stderr: (value) => this.#stdio.stderr(value),\n prompt: (message) => this.#stdio.prompt?.(message) ?? Promise.resolve(null),\n inputIsTerminal: this.#stdio.inputIsTerminal?.() ?? false,\n },\n interactive,\n confirmed: config.yes,\n config,\n configStore: store,\n session: session?.authentication,\n }\n const data = await command.handler(context, input)\n try {\n validateSchema(data, command.outputSchema, 'output')\n } catch (error) {\n throw new ToolError(\n 'INVALID_HANDLER_OUTPUT',\n error instanceof Error ? error.message : String(error),\n 9,\n )\n }\n const envelope = successEnvelope(data, {\n command: `${command.module}.${command.verb}`,\n trace_id: traceId,\n duration_ms: Date.now() - startedAt,\n })\n await this.#stdio.stdout(\n `${renderSuccess(envelope, config.output)}${config.output === 'raw' ? '' : '\\n'}`,\n )\n return EXIT_SUCCESS\n } catch (error) {\n const normalized = normalizeError(error)\n const envelope = errorEnvelope(normalized, {\n command: `${command.module}.${command.verb}`,\n trace_id: traceId,\n duration_ms: Date.now() - startedAt,\n })\n await this.#stdio.stdout(`${renderError(envelope, config.output)}\\n`)\n if (config.verbose) await this.#stdio.stderr(`diagnostic: ${normalized.code}\\n`)\n return normalized.exitCode\n }\n }\n\n async #resolveForCommand(\n command: RegisteredCommand,\n global: GlobalOptions,\n ): Promise<{ resolved: ResolvedConfig; store: ConfigStore }> {\n if (command.requiresSession || (command.module === 'config' && command.verb === 'check')) {\n const setup = await resolveConfig(global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n if (command.requiresSession) {\n setup.resolved = await applyImplicitDeviceIdentity(setup.resolved, this.#environment)\n }\n return setup\n }\n return localResolvedConfig(global, this.#environment, {\n cwd: this.#cwd,\n homeDir: this.#homeDir,\n })\n }\n\n async #createSession(config: ResolvedConfig): Promise<InteractiveSession> {\n await this.#approveImplicitDeviceIdentity(config)\n const authentication = this.#createAuthentication(config)\n return await InteractiveSession.create(\n config,\n authentication,\n this.#runtime,\n this.#createClients(config, authentication),\n )\n }\n\n async #approveImplicitDeviceIdentity(config: ResolvedConfig): Promise<void> {\n const identity = config.implicitDeviceIdentity\n if (!identity || config.yes) return\n if (config.nonInteractive) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'using the current device identity requires --yes in non-interactive mode',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n if (!await this.#confirmDeviceIdentity(identity)) {\n throw new ToolError(\n 'CONFIRMATION_DECLINED',\n 'current device identity confirmation was declined',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n }\n\n async #readInputObject(path: string): Promise<Record<string, unknown>> {\n let raw: string\n try {\n raw = path === '-' ? await this.#stdio.readStdin() : await getHost().readTextFile(path)\n } catch (error) {\n throw new UsageError(\n 'INPUT_READ_FAILED',\n `failed to read input: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new UsageError('INVALID_INPUT_JSON', 'input is not valid JSON')\n }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new UsageError('INVALID_INPUT_JSON', 'input JSON must be an object')\n }\n return parsed as Record<string, unknown>\n }\n}\n\nexport function createRegistry(\n pikgDependencies?: PikgModuleDependencies,\n appDependencies?: AppModuleDependencies,\n logDependencies?: LogModuleDependencies,\n diagnosticDependencies?: DiagnosticModuleDependencies,\n provisionDependencies?: ProvisionModuleDependencies,\n): CommandRegistry {\n const registry = new CommandRegistry()\n for (const module of createCoreModules(registry)) registry.register(module)\n registry.register(createAuthModule())\n registry.register(createPikgModule(pikgDependencies))\n registry.register(createSystemModule())\n registry.register(createSystemConfigModule())\n registry.register(createAppModule(appDependencies))\n registry.register(createTaskModule())\n registry.register(createLogModule(logDependencies))\n registry.register(createDiagnosticModule(diagnosticDependencies))\n registry.register(createProvisionModule(provisionDependencies))\n registry.register(createSkillModule())\n registry.register(createAgentModule())\n registry.register(createAiModule())\n registry.register(createShareModule())\n registry.register(createExecutorModule())\n registry.register(createAiwsModule())\n return registry\n}\n\n// Commands that declare execution=local run without a Zone, profile, identity,\n// or network; online-only session options must not silently retarget them.\nfunction assertNoSessionOptions(global: GlobalOptions, command: RegisteredCommand): void {\n for (\n const [name, value] of [\n ['profile', global.profile],\n ['zone', global.zone],\n ['endpoint', global.endpoint],\n ['identity', global.identity],\n ['session-token', global.sessionToken],\n ['session-token-file', global.sessionTokenFile],\n ] as const\n ) {\n if (value !== undefined) {\n throw new UsageError(\n 'ARGUMENT_CONFLICT',\n `--${name} cannot be combined with the local command ${command.module} ${command.verb}`,\n )\n }\n }\n}\n\nconst unavailableClients: ServiceClientRegistry = {\n call: () => Promise.reject(new ToolError('INTERNAL_ERROR', 'service clients are unavailable', 9)),\n}\n\nfunction topLevelHelp(registry: CommandRegistry): string {\n return [\n `BuckyOS Tool ${VERSION}`,\n '',\n 'Usage:',\n ' buckyos [global-options] <module> <verb> [primary-selector] [action-options]',\n ' buckyos [session-options] --cli',\n '',\n 'Modules:',\n ...registry.modules().map((module) => ` ${module.name.padEnd(12)} ${module.summary}`),\n '',\n 'Global options:',\n ' --config-dir <path> --profile <name> --zone <host-or-did>',\n ' --allow-read <path> Add a readable filesystem root (repeatable)',\n ' --endpoint <url> --identity <did-or-name>',\n ' --session-token <token> | --session-token-file <path>',\n ' Prefer --session-token-file for automation; argv tokens may appear in process listings.',\n ' --output <json|jsonl|table|text|raw> --input <path|->',\n ' --timeout <duration> --trace-id <id> --non-interactive --yes',\n ' --cli --help --version',\n '',\n 'Use `buckyos command describe <module> <verb>` for machine-readable schemas.',\n ].join('\\n')\n}\n\nfunction moduleHelp(registry: CommandRegistry, moduleName: string): string {\n const module = registry.modules().find((candidate) => candidate.name === moduleName)\n if (!module) throw new UsageError('UNKNOWN_MODULE', `unknown module: ${moduleName}`)\n return [\n `${module.name}: ${module.summary}`,\n '',\n 'Commands:',\n ...module.commands.map((command) => ` ${command.verb.padEnd(18)} ${command.summary}`),\n ].join('\\n')\n}\n\nfunction commandHelp(registry: CommandRegistry, command: RegisteredCommand): string {\n return [\n command.summary,\n '',\n `Usage: ${registry.syntax(command)}`,\n ...(command.description ? ['', command.description] : []),\n ...((command.positionals?.length ?? 0) > 0\n ? [\n '',\n 'Arguments:',\n ...command.positionals!.map((position) =>\n ` ${position.name.padEnd(20)} ${position.description}`\n ),\n ]\n : []),\n ...((command.options?.length ?? 0) > 0\n ? [\n '',\n 'Options:',\n ...command.options!.map((option) => ` --${option.name.padEnd(18)} ${option.description}`),\n ]\n : []),\n ...((command.examples?.length ?? 0) > 0\n ? ['', 'Examples:', ...command.examples!.map((example) => ` ${example}`)]\n : []),\n ].join('\\n')\n}\n\nfunction defaultStdio(): ToolStdio {\n return {\n stdout: async (value) => await getHost().stdout(value),\n stderr: async (value) => await getHost().stderr(value),\n readStdin: async () => await getHost().readStdin(),\n prompt: async (message) => await getHost().readLine(message),\n inputIsTerminal: () => getHost().inputIsTerminal(),\n }\n}\n\nasync function confirmDeviceIdentity(identity: ImplicitDeviceIdentity): Promise<boolean> {\n if (!getHost().inputIsTerminal()) {\n throw new ToolError(\n 'CONFIRMATION_REQUIRED',\n 'using the current device identity requires an interactive terminal or --yes',\n EXIT_PERMISSION,\n false,\n { identity: identity.did },\n )\n }\n const prompt = `Use current device identity ${identity.name} (${identity.did})? ` +\n 'This identity may have broad privileges. Continue? [y/N] '\n const answer = (await getHost().readLine(prompt))?.trim() ?? ''\n return answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes'\n}\n","import { BuckyOSToolApplication } from './core/app.ts'\nimport type { ToolHost } from './runtime/host.ts'\nimport { installHost } from './runtime/host.ts'\n\nexport async function runCli(host: ToolHost, argv: string[]): Promise<number> {\n installHost(host)\n return await new BuckyOSToolApplication().run(argv)\n}\n","import { type DistributionPolicy, HostError, type HostPath, isHostError } from './host.ts'\n\nexport async function assertPathAccess(\n policy: DistributionPolicy,\n path: HostPath,\n realPath: (value: string) => Promise<string>,\n candidate: string,\n operation: 'read' | 'write',\n resolveLinks = true,\n): Promise<void> {\n const roots = operation === 'read' ? policy.readPaths : policy.writePaths\n const absolute = path.resolve(candidate)\n const physicalRoots: string[] = []\n for (const root of roots) {\n try {\n physicalRoots.push(await realPath(path.resolve(root)))\n } catch (error) {\n if (!isHostError(error, 'NotFound') && !isHostError(error, 'PermissionDenied')) throw error\n }\n }\n if (!insideAny(absolute, roots, path) && !insideAny(absolute, physicalRoots, path)) {\n throw new HostError(\n 'PermissionDenied',\n `${operation} access is outside ${policy.name}: ${absolute}`,\n absolute,\n )\n }\n if (!resolveLinks) return\n try {\n const physical = await realPath(absolute)\n if (!insideAny(physical, physicalRoots, path)) {\n throw new HostError(\n 'PermissionDenied',\n `${operation} access escapes ${policy.name}: ${absolute}`,\n absolute,\n )\n }\n } catch (error) {\n if (!isHostError(error, 'NotFound')) throw error\n }\n}\n\nfunction insideAny(candidate: string, roots: readonly string[], path: HostPath): boolean {\n return roots.some((root) => {\n const relative = path.relative(path.resolve(root), candidate)\n return relative === '' || relative !== '..' && !relative.startsWith(`..${path.sep}`) &&\n !path.isAbsolute(relative)\n })\n}\n","import { createHash as nodeCreateHash } from 'node:crypto'\nimport {\n chmod,\n copyFile,\n lstat,\n mkdir,\n mkdtemp,\n open,\n readdir,\n readFile,\n realpath,\n rename,\n rm,\n stat,\n symlink,\n writeFile,\n} from 'node:fs/promises'\nimport { createReadStream, createWriteStream } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport * as nodePath from 'node:path'\nimport { spawn } from 'node:child_process'\nimport process from 'node:process'\nimport { createInterface } from 'node:readline/promises'\nimport { Readable } from 'node:stream'\nimport { pipeline } from 'node:stream/promises'\nimport { constants as zlibConstants, createGzip } from 'node:zlib'\nimport { assertPathAccess } from './path_policy.ts'\nimport {\n type DistributionPolicy,\n HostError,\n type HostFile,\n type HostFileInfo,\n type HostLineReader,\n type ToolHost,\n} from './host.ts'\n\nexport class NodeHost implements ToolHost {\n readonly kind = 'node' as const\n readonly runtimeName = 'node'\n readonly runtimeVersion = process.versions.node\n readonly platform = normalizePlatform(process.platform)\n readonly arch = normalizeArch(process.arch)\n readonly pid = process.pid\n readonly executable = process.argv[1] ? nodePath.resolve(process.argv[1]) : process.execPath\n readonly runtimeExecutable = process.execPath\n readonly path = nodePath\n readonly policy: DistributionPolicy\n\n constructor(policy: DistributionPolicy) {\n this.policy = policy\n }\n\n cwd(): string {\n return process.cwd()\n }\n\n homeDir(): string {\n return process.env.HOME ?? process.env.USERPROFILE ?? process.cwd()\n }\n\n env(name: string): string | undefined {\n if (!this.policy.environment.includes(name)) {\n throw new HostError('PermissionDenied', `environment access is not allowed: ${name}`)\n }\n return process.env[name]\n }\n\n exit(code: number): never {\n process.exit(code)\n }\n\n setExitCode(code: number): void {\n process.exitCode = code\n }\n\n async readTextFile(path: string): Promise<string> {\n await this.assertPath(path, 'read')\n try {\n return await readFile(path, 'utf8')\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async readFile(path: string): Promise<Uint8Array> {\n await this.assertPath(path, 'read')\n try {\n return new Uint8Array(await readFile(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async writeTextFile(\n path: string,\n value: string,\n options: { createNew?: boolean; mode?: number } = {},\n ): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await writeFile(path, value, {\n flag: options.createNew ? 'wx' : 'w',\n mode: options.mode,\n })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async writeFile(\n path: string,\n value: Uint8Array,\n options: { createNew?: boolean; mode?: number } = {},\n ): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await writeFile(path, value, {\n flag: options.createNew ? 'wx' : 'w',\n mode: options.mode,\n })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async readDir(path: string) {\n await this.assertPath(path, 'read')\n try {\n return (await readdir(path, { withFileTypes: true })).map((entry) => ({\n name: entry.name,\n isFile: entry.isFile(),\n isDirectory: entry.isDirectory(),\n isSymlink: entry.isSymbolicLink(),\n }))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async stat(path: string): Promise<HostFileInfo> {\n await this.assertPath(path, 'read')\n try {\n return fileInfo(await stat(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async lstat(path: string): Promise<HostFileInfo> {\n await this.assertPath(path, 'read', false)\n try {\n return fileInfo(await lstat(path))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async realPath(path: string): Promise<string> {\n await this.assertPath(path, 'read')\n try {\n return await realpath(path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async makeTempDir(options: { dir?: string; prefix?: string } = {}): Promise<string> {\n const directory = options.dir ?? tmpdir()\n await this.assertPath(directory, 'write')\n try {\n return await mkdtemp(nodePath.join(directory, options.prefix ?? 'buckyos-'))\n } catch (error) {\n throw translateNodeError(error, directory)\n }\n }\n\n async makeTempFile(options: { dir?: string; prefix?: string } = {}): Promise<string> {\n const directory = await this.makeTempDir({ dir: options.dir, prefix: options.prefix })\n const path = nodePath.join(directory, 'file')\n await this.writeFile(path, new Uint8Array(), { createNew: true, mode: 0o600 })\n return path\n }\n\n async rename(from: string, to: string): Promise<void> {\n await this.assertPath(from, 'write')\n await this.assertPath(to, 'write')\n try {\n await rename(from, to)\n } catch (error) {\n throw translateNodeError(error, `${from} -> ${to}`)\n }\n }\n\n async remove(path: string, options: { recursive?: boolean } = {}): Promise<void> {\n await this.assertPath(path, 'write', false)\n try {\n await rm(path, { recursive: options.recursive ?? false })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async mkdir(path: string, options: { recursive?: boolean; mode?: number } = {}): Promise<void> {\n await this.assertPath(path, 'write', false)\n try {\n await mkdir(path, { recursive: options.recursive, mode: options.mode })\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async chmod(path: string, mode: number): Promise<void> {\n await this.assertPath(path, 'write')\n try {\n await chmod(path, mode)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async symlink(target: string, path: string): Promise<void> {\n await this.assertPath(target, 'read')\n await this.assertPath(path, 'write', false)\n try {\n await symlink(target, path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async copyFile(from: string, to: string): Promise<void> {\n await this.assertPath(from, 'read')\n await this.assertPath(to, 'write', false)\n try {\n await copyFile(from, to)\n } catch (error) {\n throw translateNodeError(error, `${from} -> ${to}`)\n }\n }\n\n async open(\n path: string,\n options: { read?: boolean; write?: boolean; createNew?: boolean; mode?: number },\n ): Promise<HostFile> {\n await this.assertPath(path, options.write ? 'write' : 'read', !options.createNew)\n const flags = options.read && options.write\n ? 'r+'\n : options.write\n ? options.createNew ? 'wx' : 'w'\n : 'r'\n try {\n return new NodeHostFile(await open(path, flags, options.mode))\n } catch (error) {\n throw translateNodeError(error, path)\n }\n }\n\n async assertAccess(path: string, operation: 'read' | 'write'): Promise<void> {\n await this.assertPath(path, operation)\n }\n\n createHash(_algorithm: 'sha256') {\n const hash = nodeCreateHash('sha256')\n return {\n update(bytes: Uint8Array) {\n hash.update(bytes)\n },\n digestHex() {\n return hash.digest('hex')\n },\n }\n }\n\n async gzipFile(source: string, destination: string): Promise<void> {\n await this.assertPath(source, 'read')\n await this.assertPath(destination, 'write', false)\n try {\n await pipeline(\n Readable.from(fixedChunks(createReadStream(source))),\n createGzip({ level: 6, strategy: zlibConstants.Z_RLE }),\n createWriteStream(destination, { flags: 'wx', mode: 0o600 }),\n )\n } catch (error) {\n throw translateNodeError(error, destination)\n }\n }\n\n async run(command: string, args: string[]) {\n this.assertCommand(command)\n return await capture(command, args)\n }\n\n async runGzip(command: string, args: string[], destination: string) {\n this.assertCommand(command)\n await this.assertPath(destination, 'write', false)\n const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: false })\n const stderr: Uint8Array[] = []\n child.stderr.on('data', (chunk) => stderr.push(new Uint8Array(chunk)))\n try {\n await pipeline(\n Readable.from(fixedChunks(child.stdout)),\n createGzip({ level: 6, strategy: zlibConstants.Z_RLE }),\n createWriteStream(destination, { flags: 'wx', mode: 0o600 }),\n )\n const code = await childStatus(child)\n return { success: code === 0, code, stdout: new Uint8Array(), stderr: concat(stderr) }\n } catch (error) {\n child.kill()\n throw translateNodeError(error, destination)\n }\n }\n\n async stdout(value: string | Uint8Array): Promise<void> {\n await writeStream(process.stdout, value)\n }\n\n async stderr(value: string | Uint8Array): Promise<void> {\n await writeStream(process.stderr, value)\n }\n\n async readStdin(): Promise<string> {\n const chunks: Uint8Array[] = []\n for await (const chunk of process.stdin) chunks.push(new Uint8Array(chunk))\n return new TextDecoder().decode(concat(chunks))\n }\n\n async readLine(prompt: string): Promise<string | null> {\n const reader = createInterface({ input: process.stdin, output: process.stderr })\n try {\n return await reader.question(prompt)\n } catch {\n return null\n } finally {\n reader.close()\n }\n }\n\n async readSecret(prompt: string): Promise<string> {\n if (!this.inputIsTerminal() || typeof process.stdin.setRawMode !== 'function') {\n throw new HostError('PermissionDenied', 'secret input requires a terminal')\n }\n await this.stderr(prompt)\n process.stdin.setRawMode(true)\n process.stdin.resume()\n const bytes: number[] = []\n try {\n while (true) {\n const chunk = await readInputChunk()\n if (chunk === null) break\n const byte = chunk[0]\n if (byte === 10 || byte === 13) break\n if (byte === 3) throw new HostError('PermissionDenied', 'secret input canceled')\n if (byte === 8 || byte === 127) bytes.pop()\n else bytes.push(byte)\n }\n } finally {\n process.stdin.setRawMode(false)\n process.stdin.pause()\n await this.stderr('\\n')\n }\n return new TextDecoder().decode(Uint8Array.from(bytes))\n }\n\n inputIsTerminal(): boolean {\n return Boolean(process.stdin.isTTY)\n }\n\n createLineReader(options: {\n history: string[]\n historySize: number\n completer(line: string): [string[], string]\n onSigint(): void\n }): HostLineReader {\n const reader = createInterface({\n input: process.stdin,\n output: process.stderr,\n terminal: true,\n history: options.history,\n historySize: options.historySize,\n completer: options.completer,\n })\n reader.on('SIGINT', options.onSigint)\n return {\n [Symbol.asyncIterator]: () => reader[Symbol.asyncIterator](),\n write: (value) => process.stderr.write(value),\n setPrompt: (value) => reader.setPrompt(value),\n prompt: () => reader.prompt(),\n close: () => reader.close(),\n }\n }\n\n private assertCommand(command: string): void {\n if (!this.policy.subprocesses.includes(command)) {\n throw new HostError('PermissionDenied', `subprocess is not allowed: ${command}`)\n }\n }\n\n private async assertPath(\n candidate: string,\n operation: 'read' | 'write',\n resolveLinks = true,\n ): Promise<void> {\n await assertPathAccess(\n this.policy,\n nodePath,\n async (path) => {\n try {\n return await realpath(path)\n } catch (error) {\n throw translateNodeError(error, path)\n }\n },\n candidate,\n operation,\n resolveLinks,\n )\n }\n}\n\nasync function* fixedChunks(\n source: AsyncIterable<Uint8Array>,\n): AsyncGenerator<Uint8Array> {\n const size = 64 * 1024\n let pending = new Uint8Array(size)\n let used = 0\n for await (const chunk of source) {\n let offset = 0\n while (offset < chunk.byteLength) {\n const copied = Math.min(size - used, chunk.byteLength - offset)\n pending.set(chunk.subarray(offset, offset + copied), used)\n used += copied\n offset += copied\n if (used === size) {\n yield pending\n pending = new Uint8Array(size)\n used = 0\n }\n }\n }\n if (used > 0) yield pending.slice(0, used)\n}\n\nclass NodeHostFile implements HostFile {\n readonly handle\n #position = 0\n\n constructor(handle: Awaited<ReturnType<typeof open>>) {\n this.handle = handle\n }\n\n async read(buffer: Uint8Array): Promise<number | null> {\n const result = await this.handle.read(buffer, 0, buffer.length, this.#position)\n if (result.bytesRead === 0) return null\n this.#position += result.bytesRead\n return result.bytesRead\n }\n\n async write(buffer: Uint8Array): Promise<number> {\n const result = await this.handle.write(buffer, 0, buffer.length, this.#position)\n this.#position += result.bytesWritten\n return result.bytesWritten\n }\n\n seek(offset: number): Promise<number> {\n this.#position = offset\n return Promise.resolve(offset)\n }\n\n async stat(): Promise<HostFileInfo> {\n return fileInfo(await this.handle.stat())\n }\n\n async sync(): Promise<void> {\n await this.handle.sync()\n }\n\n close(): Promise<void> {\n return this.handle.close()\n }\n}\n\nfunction fileInfo(value: {\n isFile(): boolean\n isDirectory(): boolean\n isSymbolicLink(): boolean\n size: number\n mode: number\n mtime: Date\n dev: number\n ino: number\n}): HostFileInfo {\n return {\n isFile: value.isFile(),\n isDirectory: value.isDirectory(),\n isSymlink: value.isSymbolicLink(),\n size: value.size,\n mode: value.mode ?? null,\n mtime: value.mtime ?? null,\n dev: value.dev ?? null,\n ino: value.ino ?? null,\n }\n}\n\nasync function capture(command: string, args: string[]) {\n return await new Promise<{\n success: boolean\n code: number\n stdout: Uint8Array\n stderr: Uint8Array\n }>((resolve, reject) => {\n const child = spawn(command, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: false })\n const stdout: Uint8Array[] = []\n const stderr: Uint8Array[] = []\n child.stdout.on('data', (chunk) => stdout.push(new Uint8Array(chunk)))\n child.stderr.on('data', (chunk) => stderr.push(new Uint8Array(chunk)))\n child.once('error', reject)\n child.once('close', (code) =>\n resolve({\n success: code === 0,\n code: code ?? 1,\n stdout: concat(stdout),\n stderr: concat(stderr),\n }))\n })\n}\n\nasync function childStatus(child: ReturnType<typeof spawn>): Promise<number> {\n if (child.exitCode !== null) return child.exitCode\n return await new Promise((resolve, reject) => {\n child.once('error', reject)\n child.once('close', (code) => resolve(code ?? 1))\n })\n}\n\nfunction concat(chunks: Uint8Array[]): Uint8Array {\n const output = new Uint8Array(chunks.reduce((size, chunk) => size + chunk.length, 0))\n let offset = 0\n for (const chunk of chunks) {\n output.set(chunk, offset)\n offset += chunk.length\n }\n return output\n}\n\nasync function writeStream(\n stream: NodeJS.WritableStream,\n value: string | Uint8Array,\n): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n stream.write(value, (error?: Error | null) => error ? reject(error) : resolve())\n })\n}\n\nasync function readInputChunk(): Promise<Uint8Array | null> {\n return await new Promise((resolve, reject) => {\n const onData = (chunk: Uint8Array) => done(new Uint8Array(chunk))\n const onEnd = () => done(null)\n const onError = (error: Error) => {\n cleanup()\n reject(error)\n }\n const cleanup = () => {\n process.stdin.off('data', onData)\n process.stdin.off('end', onEnd)\n process.stdin.off('error', onError)\n }\n const done = (value: Uint8Array | null) => {\n cleanup()\n resolve(value)\n }\n process.stdin.once('data', onData)\n process.stdin.once('end', onEnd)\n process.stdin.once('error', onError)\n })\n}\n\nfunction translateNodeError(error: unknown, path?: string): HostError {\n if (error instanceof HostError) return error\n const code = (error as { code?: string }).code\n const kind = code === 'ENOENT'\n ? 'NotFound'\n : code === 'EACCES' || code === 'EPERM'\n ? 'PermissionDenied'\n : code === 'EEXIST'\n ? 'AlreadyExists'\n : code === 'EINVAL'\n ? 'InvalidInput'\n : 'Unknown'\n return new HostError(kind, error instanceof Error ? error.message : String(error), path, error)\n}\n\nfunction normalizePlatform(value: string): string {\n return value === 'win32' ? 'windows' : value === 'darwin' ? 'macos' : value\n}\n\nfunction normalizeArch(value: string): string {\n return value === 'x64' ? 'x86_64' : value === 'arm64' ? 'aarch64' : value\n}\n","import process from 'node:process'\nimport { fileURLToPath } from 'node:url'\nimport { dirname, resolve } from 'node:path'\nimport { runCli } from '../main.ts'\nimport { buildDistributionPolicy, installHost, TOOL_ENVIRONMENT_NAMES } from './host.ts'\nimport { NodeHost } from './host_node.ts'\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '../..')\nconst environment = Object.fromEntries(\n TOOL_ENVIRONMENT_NAMES.map((name) => [name, process.env[name]]),\n)\nconst policy = buildDistributionPolicy({\n distribution: 'developer',\n argv: process.argv.slice(2),\n cwd: process.cwd(),\n packageRoot,\n homeDir: process.env.HOME ?? process.env.USERPROFILE ?? process.cwd(),\n environment,\n path: await import('node:path'),\n})\nconst host = new NodeHost(policy)\ninstallHost(host)\nhost.setExitCode(await runCli(host, process.argv.slice(2)))\n"],"names":["property","value","consumed","object","host","packageRoot","environment","summary","dirname","isAbsolute","join","resolve","token","module","command","EMPTY_INPUT","OBJECT_OUTPUT","optionalString","rpcOptions","expectObject","expectString","milliseconds","CONTROL_PANEL","buckyos","invalidResponse","relative","text","offset","view","stat","commentLength","realDirectory","basename","OBJECT_ID","normalizeArch","open","VERSION","resolveFromCwd","sourceSummary","packageMeta","info","abortableSleep","isObject","listCommand","getCommand","cancelCommand","statusCommand","gatewayOrigin","id","body","policy","exportCommand","compact","queryCommand","pageSchema","operation","readCommand","setup","nodeCreateHash","zlibConstants"],"mappings":";;;;;;;;;;;;;;;AAqEO,SAAS,eAAe,QAAkC;AAC/D,SAAO,OAAO,YAAY,OAAO,KAAK,WAAW,KAAK,GAAG;AAC3D;ACvEO,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,YAAY;AAClB,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AAEtB,MAAM,kBAAkB,MAAM;AAAA,EAMnC,YACE,MACA,SACA,WAAW,gBACX,YAAY,OACZ,UAAmC,IACnC;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,UAAU;AAAA,EACjB;AACF;AAEO,MAAM,mBAAmB,UAAU;AAAA,EACxC,YAAY,MAAc,SAAiB,UAAmC,CAAA,GAAI;AAChF,UAAM,MAAM,SAAS,YAAY,OAAO,OAAO;AAAA,EACjD;AACF;AAEA,MAAM,cAAc;AACpB,MAAM,yBAAyB;AAC/B,MAAM,uBACJ;AAEK,SAAS,gBAAgB,SAAyB;AACvD,SAAO,QACJ,WAAW,aAAa,kBAAkB,EAC1C,WAAW,wBAAwB,eAAe,EAClD,WAAW,sBAAsB,yBAAyB,EAC1D;AAAA,IACC;AAAA,IACA;AAAA,EAAA;AAEN;AAEO,SAAS,eAAe,OAA2B;AACxD,MAAI,iBAAiB,WAAW;AAC9B,WAAO,IAAI;AAAA,MACT,MAAM;AAAA,MACN,gBAAgB,MAAM,OAAO;AAAA,MAC7B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EAEV;AAEA,QAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC3D,QAAA,UAAU,gBAAgB,GAAG;AAC7B,QAAA,QAAQ,QAAQ;AAEtB,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,QAAQ,GAAG;AACvD,WAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY;AAAA,EACrE;AACA,MAAI,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,WAAW,GAAG;AAC5D,WAAO,IAAI,UAAU,WAAW,uBAAuB,cAAc,IAAI;AAAA,EAC3E;AAEE,MAAA,MAAM,SAAS,mBAAmB,KAAK,MAAM,SAAS,eAAe,KACrE,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,qBAAqB,SAAS,eAAe;AAAA,EACpE;AACA,MACE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,cAAc,KACtE,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,iBAAiB,KACnE,MAAM,SAAS,eAAe,GAC9B;AACA,WAAO,IAAI;AAAA,MACT,MAAM,SAAS,SAAS,IAAI,oBAAoB;AAAA,MAChD,MAAM,SAAS,SAAS,IAAI,kCAAkC;AAAA,MAC9D;AAAA,IAAA;AAAA,EAEJ;AACA,MACE,MAAM,SAAS,cAAc,KAAK,MAAM,SAAS,oBAAoB,KACrE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,qBAAqB,KAC7E,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,uBAAuB,SAAS,kBAAkB,IAAI;AAAA,EAC7E;AACA,MAAI,MAAM,SAAS,WAAW,KAAK,MAAM,SAAS,eAAe,GAAG;AAClE,WAAO,IAAI,UAAU,sBAAsB,SAAS,cAAc;AAAA,EACpE;AACI,MAAA,MAAM,SAAS,iBAAiB,GAAG;AACrC,WAAO,IAAI,UAAU,oBAAoB,SAAS,cAAc;AAAA,EAClE;AACA,SAAO,IAAI,UAAU,kBAAkB,WAAW,kBAAkB,aAAa;AACnF;ACtGO,MAAM,iBAAiB,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAwCtE,MAAM,qCAAqB,IAAiC;AAAA,EAC1D,CAAC,cAAc,WAAW;AAAA,EAC1B,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,iBAAiB,cAAc;AAAA,EAChC,CAAC,sBAAsB,kBAAkB;AAAA,EACzC,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,SAAS,OAAO;AAAA,EACjB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,YAAY,SAAS;AAAA,EACtB,CAAC,mBAAmB,gBAAgB;AACtC,CAAC;AAED,MAAM,gDAAgC,IAAiC;AAAA,EACrE,CAAC,cAAc,WAAW;AAC5B,CAAC;AAED,MAAM,sCAAsB,IAAiC;AAAA,EAC3D,CAAC,OAAO,KAAK;AAAA,EACb,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,mBAAmB,gBAAgB;AAAA,EACpC,CAAC,OAAO,KAAK;AAAA,EACb,CAAC,YAAY,SAAS;AAAA,EACtB,CAAC,WAAW,SAAS;AAAA,EACrB,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,WAAW,SAAS;AACvB,CAAC;AAED,MAAM,iDAAiC,IAAI;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,MAAM,8BAAkC,oBAAA,IAAI,CAAC,QAAQ,KAAK,CAAC;AAEpD,SAAS,gBAAgB,MAA4B;AAC1D,QAAM,SAAwB,CAAA;AAC9B,MAAI,QAAQ;AACL,SAAA,QAAQ,KAAK,QAAQ;AACpB,UAAA,QAAQ,KAAK,KAAK;AACxB,QAAI,UAAU,MAAM;AACR,gBAAA,QAAQ,QAAQ,IAAI;AACrB,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,MAAM;AACT,eAAA;AACT;AAAA,IACF;AACI,QAAA,CAAC,MAAM,WAAW,IAAI;AAAG;AACvB,UAAA,SAAS,gBAAgB,KAAK;AACpC,UAAM,kBAAkB,gBAAgB,IAAI,OAAO,IAAI;AACvD,QAAI,iBAAiB;AACf,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACU,gBAAA,QAAQ,iBAAiB,IAAI;AAC9B,eAAA;AACT;AAAA,IACF;AACA,UAAM,iBAAiB,eAAe,IAAI,OAAO,IAAI;AACrD,UAAM,2BAA2B,0BAA0B,IAAI,OAAO,IAAI;AACtE,QAAA,CAAC,kBAAkB,CAAC,0BAA0B;AAChD,YAAM,IAAI,WAAW,kBAAkB,4BAA4B,OAAO,IAAI,EAAE;AAAA,IAClF;AACA,UAAM,EAAE,OAAO,aAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,QAAI,6BAA6B,aAAa;AAC5C,aAAO,YAAY,CAAC,GAAI,OAAO,aAAa,CAAA,GAAK,KAAK;AAAA,IAAA,OACjD;AACL,gBAAU,QAAQ,gBAAiB,qBAAqB,OAAO,MAAM,KAAK,CAAC;AAAA,IAC7E;AACS,aAAA;AAAA,EACX;AAEM,QAAA,SAAS,KAAK,KAAK;AACnB,QAAA,OAAO,KAAK,QAAQ,CAAC;AACrB,QAAA,aAAa,SAAS,KAAK,MAAM,SAAS,OAAO,IAAI,EAAE,IAAI;AAC7D,MAAA,QAAQ,WAAW,GAAG,GAAG;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iDAAiD,MAAM;AAAA,IAAA;AAAA,EAE3D;AACA,SAAO,EAAE,QAAQ,QAAQ,MAAM,WAAW;AAC5C;AAEO,SAAS,iBACd,SACA,MACA,aACA,yBAAyB,OACzB,kBAAkB,OACC;AACnB,QAAM,WAAoC,CAAA;AAC1C,QAAM,SAAwB,CAAA;AACxB,QAAA,cAAc,QAAQ,eAAe;AAC3C,QAAM,eAAe,IAAI,KAAK,QAAQ,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,MAAM,MAAM,CAAC,CAAC;AAC3F,MAAI,kBAAkB;AACtB,MAAI,OAAO;AAEX,WAAS,QAAQ,GAAG,QAAQ,KAAK,UAAS;AAClC,UAAA,QAAQ,KAAK,KAAK;AACpB,QAAA,UAAU,YAAY,UAAU,MAAM;AACjC,aAAA;AACE,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,MAAM;AAClB,iBAAW,mBAAmB,KAAK,MAAM,QAAQ,CAAC,GAAG;AACjC,0BAAA;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA;AAAA,IACF;AACA,QAAI,CAAC,MAAM,WAAW,IAAI,GAAG;AAC3B,wBAAkB,iBAAiB,UAAU,aAAa,iBAAiB,KAAK;AACvE,eAAA;AACT;AAAA,IACF;AAEM,UAAA,SAAS,gBAAgB,KAAK;AACpC,QAAI,0BAA0B,4BAA4B,IAAI,OAAO,IAAI,GAAG;AACtE,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACA,YAAMA,YAAW,gBAAgB,IAAI,OAAO,IAAI;AACtC,gBAAA,QAAQA,WAAU,IAAI;AACvB,eAAA;AACT;AAAA,IACF;AACA,QAAI,0BAA0B,2BAA2B,IAAI,OAAO,IAAI,GAAG;AACzE,YAAMA,YAAW,eAAe,IAAI,OAAO,IAAI;AACzC,YAAA,EAAE,OAAAC,QAAO,UAAAC,cAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,gBAAU,QAAQF,WAAU,qBAAqB,OAAO,MAAMC,MAAK,CAAC;AAC3DC,eAAAA;AACT;AAAA,IACF;AACA,QACE,2BACC,eAAe,IAAI,OAAO,IAAI,KAAK,0BAA0B,IAAI,OAAO,IAAI,KAC3E,gBAAgB,IAAI,OAAO,IAAI,IACjC;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,KAAK,OAAO,IAAI;AAAA,MAAA;AAAA,IAEpB;AAEA,UAAM,SAAS,aAAa,IAAI,OAAO,IAAI;AAC3C,QAAI,CAAC;AAAQ,YAAM,IAAI,WAAW,kBAAkB,qBAAqB,OAAO,IAAI,EAAE;AAChF,UAAA,WAAW,eAAe,MAAM;AACtC,QAAI,OAAO,OAAO,UAAU,QAAQ,GAAG;AACrC,YAAM,IAAI,WAAW,sBAAsB,qCAAqC,QAAQ,EAAE;AAAA,IAC5F;AACI,QAAA,OAAO,SAAS,WAAW;AACzB,UAAA,OAAO,gBAAgB,QAAW;AACpC,cAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,0BAA0B;AAAA,MACrF;AACA,eAAS,QAAQ,IAAI;AACZ,eAAA;AACT;AAAA,IACF;AACA,UAAM,EAAE,OAAO,aAAa,gBAAgB,MAAM,OAAO,MAAM;AAC/D,aAAS,QAAQ,IAAI,iBAAiB,OAAO,MAAM,OAAO,OAAO,IAAI;AAC5D,aAAA;AAAA,EACX;AAEA,WAAS,QAAQ,iBAAiB,CAAC,mBAAmB,QAAQ,YAAY,QAAQ,SAAS;AACzF,QACE,YAAY,KAAK,EAAE,aAAa,SAChC,CAAC,OAAO,OAAO,eAAe,CAAA,GAAI,YAAY,KAAK,EAAE,IAAI,GACzD;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,gCAAgC,YAAY,KAAK,EAAE,IAAI;AAAA,MAAA;AAAA,IAE3D;AAAA,EACF;AAEM,QAAA,QAAQ,kBAAkB,aAAa,QAAQ;AACrD,MAAI,CAAC;AAAgC,mBAAA,OAAO,QAAQ,aAAa,OAAO;AACjE,SAAA,EAAE,OAAO,QAAQ;AAC1B;AAEO,SAAS,cAAc,OAAuB;AACnD,QAAM,QAAQ,oBAAoB,KAAK,MAAM,KAAM,CAAA;AACnD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACA,QAAM,SAAS,OAAO,MAAM,CAAC,CAAC;AAC9B,QAAM,QAAQ,MAAM,CAAC,MAAM,OACvB,IACA,MAAM,CAAC,MAAM,MACb,MACA,MAAM,CAAC,MAAM,MACb,MACA;AACJ,QAAM,SAAS,SAAS;AACxB,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,UAAU,GAAG;AAChD,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACO,SAAA;AACT;AAEO,SAAS,eAAe,MAAwB;AACrD,QAAM,SAAmB,CAAA;AACzB,MAAI,UAAU;AACd,MAAI,QAAoC;AACxC,MAAI,UAAU;AACd,MAAI,UAAU;AAEd,aAAW,aAAa,MAAM;AAC5B,QAAI,SAAS;AACA,iBAAA;AACD,gBAAA;AACA,gBAAA;AACV;AAAA,IACF;AACI,QAAA,cAAc,QAAQ,UAAU,UAAU;AAClC,gBAAA;AACA,gBAAA;AACV;AAAA,IACF;AACA,QAAI,UAAU,UAAU;AACtB,UAAI,cAAc;AAAa,gBAAA;AAAA;AACf,mBAAA;AAChB;AAAA,IACF;AACA,QAAI,UAAU,UAAU;AACtB,UAAI,cAAc;AAAa,gBAAA;AAAA;AACf,mBAAA;AAChB;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACb,cAAA;AACE,gBAAA;AACV;AAAA,IACF;AACA,QAAI,cAAc,KAAK;AACb,cAAA;AACE,gBAAA;AACV;AAAA,IACF;AACI,QAAA,KAAK,KAAK,SAAS,GAAG;AACxB,UAAI,SAAS;AACX,eAAO,KAAK,OAAO;AACT,kBAAA;AACA,kBAAA;AAAA,MACZ;AACA;AAAA,IACF;AACW,eAAA;AACD,cAAA;AAAA,EACZ;AACI,MAAA;AAAe,UAAA,IAAI,WAAW,wBAAwB,4BAA4B;AAClF,MAAA;AAAO,UAAM,IAAI,WAAW,wBAAwB,gBAAgB,KAAK,QAAQ;AACjF,MAAA;AAAS,WAAO,KAAK,OAAO;AACzB,SAAA;AACT;AAEgB,SAAA,eAAe,OAAgB,QAAoB,MAAoB;AACrF,MAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,KAAK,CAAC,cAAc,OAAO,GAAG,WAAW,KAAK,CAAC,GAAG;AAChF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,IAAI,mBAAmB,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEpD;AACI,MAAA,OAAO,SAAS,UAAU;AACxB,QAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,oBAAoB;AAAA,IAC9E;AACA,UAAMC,UAAS;AACf,eAAW,YAAY,OAAO,YAAY,CAAA,GAAI;AAC5C,UAAI,CAAC,OAAO,OAAOA,SAAQ,QAAQ,GAAG;AACpC,cAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,IAAI,QAAQ,cAAc;AAAA,MACpF;AAAA,IACF;AACI,QAAA,OAAO,yBAAyB,OAAO;AACzC,iBAAW,OAAO,OAAO,KAAKA,OAAM,GAAG;AACjC,YAAA,CAAC,OAAO,OAAO,OAAO,cAAc,CAAA,GAAI,GAAG,GAAG;AAChD,gBAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,IAAI,GAAG,iBAAiB;AAAA,QAClF;AAAA,MACF;AAAA,IACF;AACA,eAAW,CAAC,KAAK,aAAa,KAAK,OAAO,QAAQA,OAAM,GAAG;AACnD,YAAA,iBAAiB,OAAO,aAAa,GAAG;AAC1C,UAAA;AAAgB,uBAAe,eAAe,gBAAgB,GAAG,IAAI,IAAI,GAAG,EAAE;AAAA,IACpF;AACA;AAAA,EACF;AACI,MAAA,OAAO,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,IAC7E;AACA,QAAI,OAAO,OAAO;AAChB,YAAM,QAAQ,CAAC,MAAM,UAAU,eAAe,MAAM,OAAO,OAAQ,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;AAAA,IACzF;AACA;AAAA,EACF;AACI,MAAA,OAAO,SAAS,UAAU;AACxB,QAAA,OAAO,UAAU,UAAU;AAC7B,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,IAC7E;AACA,QAAI,OAAO,cAAc,UAAa,MAAM,SAAS,OAAO,WAAW;AACrE,YAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,eAAe;AAAA,IACzE;AACA;AAAA,EACF;AACA,MAAI,OAAO,SAAS,aAAa,OAAO,UAAU,WAAW;AAC3D,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,oBAAoB;AAAA,EAC9E;AACI,MAAA,OAAO,SAAS,cAAc,CAAC,OAAO,UAAU,KAAK,KAAK,OAAO,UAAU,WAAW;AACxF,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,qBAAqB;AAAA,EAC/E;AACA,MAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AACzD,UAAM,IAAI,WAAW,4BAA4B,GAAG,IAAI,mBAAmB;AAAA,EAC7E;AACF;AAEA,SAAS,iBACP,OACA,aACA,OACA,OACQ;AACF,QAAA,aAAa,YAAY,KAAK;AACpC,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,WAAW,sBAAsB,mCAAmC,KAAK,EAAE;AAAA,EACvF;AACM,QAAA,WAAW,IAAI,IAAI;AACzB,SAAO,QAAQ;AACjB;AAEA,SAAS,gBAAgB,OAAuD;AACxE,QAAA,UAAU,MAAM,MAAM,CAAC;AACvB,QAAA,aAAa,QAAQ,QAAQ,GAAG;AACtC,SAAO,aAAa,IAChB,EAAE,MAAM,YACR,EAAE,MAAM,QAAQ,MAAM,GAAG,UAAU,GAAG,aAAa,QAAQ,MAAM,aAAa,CAAC;AACrF;AAEA,SAAS,gBACP,MACA,OACA,QACqC;AACjC,MAAA,OAAO,gBAAgB,QAAW;AAChC,QAAA,CAAC,OAAO,aAAa;AACvB,YAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,mBAAmB;AAAA,IAC9E;AACA,WAAO,EAAE,OAAO,OAAO,aAAa,UAAU,EAAE;AAAA,EAClD;AACM,QAAA,QAAQ,KAAK,QAAQ,CAAC;AAC5B,MAAI,UAAU,UAAa,MAAM,WAAW,IAAI,GAAG;AACjD,UAAM,IAAI,WAAW,oBAAoB,KAAK,OAAO,IAAI,mBAAmB;AAAA,EAC9E;AACO,SAAA,EAAE,OAAO,UAAU;AAC5B;AAEA,SAAS,iBAAiB,MAAc,OAAe,MAAuB;AAC5E,MAAI,SAAS;AAAiB,WAAA;AACxB,QAAA,SAAS,OAAO,KAAK;AACvB,MAAA,CAAC,OAAO,SAAS,MAAM,KAAM,SAAS,aAAa,CAAC,OAAO,UAAU,MAAM,GAAI;AACjF,UAAM,IAAI,WAAW,oBAAoB,KAAK,IAAI,eAAe,IAAI,EAAE;AAAA,EACzE;AACO,SAAA;AACT;AAEA,SAAS,kBACP,aACA,UACyB;AACzB,QAAM,SAAS,EAAE,GAAI,eAAe,CAAI,EAAA;AACxC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACnD,QAAI,OAAO,OAAO,QAAQ,GAAG,GAAG;AAC9B,YAAM,IAAI,WAAW,qBAAqB,GAAG,GAAG,sCAAsC;AAAA,IACxF;AACA,WAAO,GAAG,IAAI;AAAA,EAChB;AACO,SAAA;AACT;AAEA,SAAS,qBAAqB,MAAc,OAAsC;AAChF,MAAI,SAAS,UAAU;AACrB,QAAI,CAAC,eAAe,SAAS,KAAqB,GAAG;AACnD,YAAM,IAAI,WAAW,yBAAyB,0BAA0B,KAAK,EAAE;AAAA,IACjF;AACO,WAAA;AAAA,EACT;AACO,SAAA;AACT;AAEA,SAAS,UACP,QACA,UACA,OACM;AACF,MAAA,OAAO,QAAQ,MAAM,QAAW;AAClC,UAAM,IAAI,WAAW,sBAAsB,mCAAmC,QAAQ,EAAE;AAAA,EAC1F;AACA,SAAO,QAAQ,IAAI;AACrB;AC5bO,MAAM,kBAAkB,MAAM;AAAA,EAInC,YAAY,MAAqB,SAAiB,MAAe,OAAiB;AAC1E,UAAA,SAAS,EAAE,MAAA,CAAO;AACxB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,OAAO;AAAA,EACd;AACF;AAEgB,SAAA,YAAY,OAAgB,MAAyC;AAC5E,SAAA,iBAAiB,aAAa,MAAM,SAAS;AACtD;AA6IA,IAAI;AAEG,SAAS,YAAYC,OAAsB;AAChD,MAAI,cAAc,eAAeA;AAAY,UAAA,IAAI,MAAM,+BAA+B;AACzE,eAAAA;AACf;AAEO,SAAS,UAAoB;AAClC,MAAI,CAAC;AAAkB,UAAA,IAAI,MAAM,yCAAyC;AACnE,SAAA;AACT;AAMO,MAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAaO,SAAS,wBAAwB,SAA4C;AAClF,QAAM,EAAE,MAAM,KAAK,aAAAC,cAAa,SAAS,aAAAC,cAAa,KAAS,IAAA;AAC/D,QAAM,cAAc,KAAK;AAAA,IACvB,QAAQ,eAAeA,aAAY,gBAAgB,mBAAmB,OAAO;AAAA,EAAA;AAE/E,QAAM,aAAa,KAAK;AAAA,IACtBA,aAAY,2BAA2B,KAAK,KAAK,SAAS,eAAe;AAAA,EAAA;AAErE,QAAA,gCAAgB,IAAI;AAAA,IACxB,KAAK,QAAQD,YAAW;AAAA,IACxB,KAAK,QAAQ,GAAG;AAAA,IAChB;AAAA,IACA,KAAK,QAAQ,KAAK,KAAK,SAAS,UAAU,CAAC;AAAA,IAC3C,KAAK,QAAQ,KAAK,KAAK,SAAS,WAAW,CAAC;AAAA,EAAA,CAC7C;AACK,QAAA,iCAAiB,IAAI,CAAC,KAAK,QAAQ,GAAG,GAAG,UAAU,CAAC;AAC1D,MAAI,QAAQ,iBAAiB;AAAU,cAAU,IAAI,WAAW;AAE1D,QAAA,SAAS,qBAAqB,IAAI;AACxC,MACE,QAAQ,iBAAiB,YAAY,OAAO,WAAW,SACvD,CAAC,SAAS,SAAS,EAAE,SAAS,OAAO,QAAQ,EAAE,GAC/C;AACW,eAAA,IAAI,KAAK,KAAK,aAAa,SAAS,iBAAiB,gBAAgB,UAAU,CAAC;AAAA,EAC7F;AACA,aAAW,aAAa,OAAO;AAAM,cAAU,IAAI,iBAAiB,WAAW,KAAK,IAAI,CAAC;AAC9E,aAAA,aAAa,OAAO,aAAa;AAChC,cAAA,IAAI,KAAK,QAAQ,iBAAiB,WAAW,KAAK,IAAI,CAAC,CAAC;AAAA,EACpE;AACA,aAAW,aAAa,OAAO;AAAO,eAAW,IAAI,iBAAiB,WAAW,KAAK,IAAI,CAAC;AAChF,aAAA,aAAa,OAAO,cAAc;AAChC,eAAA,IAAI,KAAK,QAAQ,iBAAiB,WAAW,KAAK,IAAI,CAAC,CAAC;AAAA,EACrE;AACA,QAAM,eAAe,OAAO,WAAW,UAAU,CAAC,QAAQ,OAAO,EAAE,SAAS,OAAO,QAAQ,EAAE,IACzF,CAAC,QAAQ,IACT;AACJ,QAAM,UAAU,OAAO,WAAW,UAChC,CAAC,CAAC,QAAQ,WAAW,cAAc,UAAU,WAAW,EAAE,SAAS,OAAO,MAAM;AAC5E,QAAA,qBAAqB,QAAQ,iBAAiB,cAChD,uBAAuB,OAAO,CAAC,SAAS,SAAS,cAAc,IAC/D;AAEJ,SAAO,OAAO,OAAO;AAAA,IACnB,MAAM,QAAQ,iBAAiB,WAAW,mBAAmB;AAAA,IAC7D,cAAc,QAAQ;AAAA,IACtB,aAAa,KAAK,QAAQA,YAAW;AAAA,IACrC,WAAW,OAAO,OAAO,CAAC,GAAG,SAAS,CAAC;AAAA,IACvC,YAAY,OAAO,OAAO,CAAC,GAAG,UAAU,CAAC;AAAA,IACzC,aAAa,OAAO,OAAO,kBAAkB;AAAA,IAC7C,cAAc,OAAO,OAAO,YAAY;AAAA,IACxC;AAAA,IACA,GAAI,QAAQ,iBAAiB,WAAW,EAAE,gBAAgB,CAAC;AAAA,EAAA,CAC5D;AACH;AAEA,SAAS,mBAAmB,SAAgC;AACtD,MAAA,QAAQ,KAAK,QAAQ,MAAM;AAC7B,WAAO,QAAQ,YAAY,UACvB,QAAQ,KAAK,KAAK,QAAQ,YAAY,SAAS,SAAS,IACxD,QAAQ,KAAK,KAAK,QAAQ,SAAS,WAAW,WAAW,SAAS;AAAA,EACxE;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAe,KAAa,MAAwB;AACrE,SAAA,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,KAAK,KAAK;AAC/E;AAEA,SAAS,qBAAqB,MAO5B;AACA,QAAM,OAAiB,CAAA;AACvB,QAAM,cAAwB,CAAA;AAC9B,QAAM,QAAkB,CAAA;AACxB,QAAM,eAAyB,CAAA;AAC3B,MAAA;AACA,MAAA;AACJ,MAAI,aAAa;AACX,QAAA,mCAAmB,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACK,QAAA,qCAAqB,IAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,WAAS,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;AAC1C,UAAA,QAAQ,KAAK,KAAK;AACxB,QAAI,CAAC,UAAU,CAAC,MAAM,WAAW,GAAG,GAAG;AAC5B,eAAA;AACT;AAAA,IACF;AACA,QAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAG;AACtC,aAAA;AACP;AAAA,IACF;AACI,QAAA,MAAM,WAAW,IAAI,GAAG;AACpB,YAAA,QAAQ,MAAM,QAAQ,GAAG;AAC/B,YAAM,OAAO,MAAM,MAAM,GAAG,QAAQ,IAAI,SAAY,KAAK;AACrD,UAAA,eAAe,IAAI,IAAI;AAAG;AAC9B,YAAM,SAAS,QAAQ,IAAI,SAAY,MAAM,MAAM,QAAQ,CAAC;AAC5D,YAAM,QAAQ,UAAU,KAAK,QAAQ,CAAC;AACtC,UAAI,WAAW,UAAa,UAAU,UAAa,CAAC,MAAM,WAAW,IAAI;AAAG;AAC5E,UAAI,UAAU;AAAW;AACzB,UAAI,SAAS,cAAc;AACzB,aAAK,KAAK,KAAK;AACf,cAAM,KAAK,KAAK;AAAA,MAAA,WACP,SAAS,cAAc;AAChC,aAAK,KAAK,KAAK;AAAA,MAAA,WACN,CAAC,SAAS,sBAAsB,MAAM,EAAE,SAAS,IAAI,GAAG;AACjE,YAAI,UAAU;AAAK,eAAK,KAAK,KAAK;AAAA,MACzB,WAAA,SAAS,YAAY,WAAW,QAAQ;AACjD,aAAK,KAAK,KAAK;AAAA,MAAA,WACN,SAAS,QAAQ;AAC1B,aAAK,KAAK,KAAK;AACX,YAAA,WAAW,SAAS,SAAS;AAAS,gBAAM,KAAK,KAAK;AAAA,MAAA,WACjD,SAAS;AAAQ,cAAM,KAAK,KAAK;AAAA,eACnC,SAAS,aAAa,WAAW,SAAS,SAAS;AAAW,aAAK,KAAK,KAAK;AAAA,eAC7E,SAAS,UAAU,WAAW,mBAAmB,SAAS,YAAY;AAC7E,aAAK,KAAK,KAAK;AAAA,MACN,WAAA,SAAS,UAAU,WAAW,aAAa;AAEpD,aAAK,KAAK,KAAK;AACf,YAAI,SAAS;AAAY,gBAAM,KAAK,KAAK;AAAA,MAChC,WAAA,SAAS,sBAAsB,WAAW,aAAa;AAEhE,oBAAY,KAAK,KAAK;AACtB,YAAI,SAAS;AAAY,uBAAa,KAAK,KAAK;AAAA,MACvC,WAAA,CAAC,aAAa,IAAI,IAAI;AAAG;AACpC;AAAA,IACF;AACI,QAAA,WAAW,SAAS,CAAC,SAAS,SAAS,EAAE,SAAS,QAAQ,EAAE,KAAK,iBAAiB,GAAG;AACnF,UAAA,CAAC,gBAAgB,KAAK,KAAK;AAAG,aAAK,KAAK,KAAK;AAAA,IAAA,WACxC,WAAW,WAAW,SAAS,aAAa,iBAAiB,GAAG;AACzE,WAAK,KAAK,KAAK;AAAA,IACN,WAAA,WAAW,UAAU,iBAAiB,GAAG;AAClD,WAAK,KAAK,KAAK;AACX,UAAA,SAAS,UAAU,SAAS;AAAQ,cAAM,KAAK,KAAK;AAAA,eAC/C,SAAS,WAAW,SAAS;AAAS,qBAAa,KAAK,KAAK;AAAA,IACxE;AAAA,EACF;AACA,SAAO,EAAE,MAAM,aAAa,OAAO,cAAc,QAAQ;AAC3D;AAEO,SAAS,WAAWD,OAAyC;AAC3D,SAAA;AAAA,IACL,YAAYA,MAAK;AAAA,IACjB,oBAAoBA,MAAK;AAAA,IACzB,cAAcA,MAAK,OAAO;AAAA,IAC1B,QAAQA,MAAK,OAAO;AAAA,IACpB,MAAMA,MAAK;AAAA,IACX,SAASA,MAAK;AAAA,IACd,iBAAiBA,MAAK;AAAA,IACtB,UAAUA,MAAK;AAAA,IACf,MAAMA,MAAK;AAAA,IACX,cAAcA,MAAK,OAAO;AAAA,IAC1B,YAAY,CAAC,GAAGA,MAAK,OAAO,SAAS;AAAA,IACrC,aAAa,CAAC,GAAGA,MAAK,OAAO,UAAU;AAAA,IACvC,aAAa,CAAC,GAAGA,MAAK,OAAO,WAAW;AAAA,IACxC,cAAc,CAAC,GAAGA,MAAK,OAAO,YAAY;AAAA,IAC1C,SAASA,MAAK,OAAO;AAAA,EAAA;AAEzB;AAEsB,eAAA,yBACpBA,QAAiB,WACwB;AACzC,QAAM,OAAOA,MAAK,KAAK,KAAKA,MAAK,OAAO,aAAa,mBAAmB;AACpE,MAAA;AACF,UAAM,QAAQ,KAAK,MAAM,MAAMA,MAAK,aAAa,IAAI,CAAC;AAC/C,WAAA,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC7D,QACA;AAAA,WACG,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACrC,UAAA;AAAA,EACR;AACF;AAEO,SAAS,yBACd,UACgC;AAChC,MAAI,CAAC;AAAiB,WAAA;AACtB,QAAM,EAAE,WAAW,OAAO,GAAGG,aAAY;AAClC,SAAA;AAAA,IACL,GAAGA;AAAA,IACH,gBAAgB,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS;AAAA,EAAA;AAE1D;AClaA,MAAMC,YAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAMC,eAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAMC,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAMC,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAqDhE,MAAM,oBAAoB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,MAAM,eAAe;AACrB,MAAM,qBAAqB;AAEpB,MAAM,YAAY;AAAA,EAGvB,YAAY,MAAc;AACnB,SAAA,OAAOA,UAAQ,IAAI;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAkC;AACtC,WAAO,MAAM,KAAK,UAAsBD,OAAK,KAAK,MAAM,aAAa,GAAG;AAAA,MACtE,gBAAgB;AAAA,IAAA,CACjB;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,MAAkD;AAClE,wBAAoB,IAAI;AACxB,WAAO,MAAM,KAAK,UAAyB,KAAK,YAAY,IAAI,GAAG,MAAS;AAAA,EAC9E;AAAA,EAEA,MAAM,eAAkC;AACtC,UAAM,YAAYA,OAAK,KAAK,MAAM,UAAU;AACxC,QAAA;AACF,YAAM,QAAkB,CAAA;AACxB,iBAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,SAAS,GAAG;AACtD,YAAI,MAAM,UAAU,MAAM,KAAK,SAAS,OAAO,GAAG;AAChD,gBAAM,OAAO,MAAM,KAAK,MAAM,GAAG,EAAE;AAC/B,cAAA,aAAa,KAAK,IAAI;AAAG,kBAAM,KAAK,IAAI;AAAA,QAC9C;AAAA,MACF;AACA,aAAO,MAAM;aACN,OAAO;AACV,UAAA,YAAY,OAAO,UAAU;AAAG,eAAO;AACrC,YAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAAmC;AACnD,uBAAmB,QAAQ,aAAa;AACxC,UAAM,KAAK,aAAaA,OAAK,KAAK,MAAM,aAAa,GAAG,MAAM;AAAA,EAChE;AAAA,EAEA,MAAM,aAAa,MAAc,SAAuC;AACtE,wBAAoB,IAAI;AACF,0BAAA,SAAS,YAAY,IAAI,OAAO;AACtD,UAAM,KAAK,aAAa,KAAK,YAAY,IAAI,GAAG,OAAO;AAAA,EACzD;AAAA,EAEA,YAAY,MAAsB;AAChC,wBAAoB,IAAI;AACxB,WAAOA,OAAK,KAAK,MAAM,YAAY,GAAG,IAAI,OAAO;AAAA,EACnD;AAAA,EAEA,cAAsB;AACpB,WAAOA,OAAK,KAAK,MAAM,SAAS,cAAc;AAAA,EAChD;AAAA,EAEA,MAAM,UAAa,MAAc,SAAoC;AAC/D,QAAA;AACI,YAAA,SAAS,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACxD,UAAA,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAClE,cAAM,IAAI,WAAW,kBAAkB,GAAG,IAAI,6BAA6B;AAAA,MAC7E;AACK,UAAA,OAAmC,mBAAmB,GAAG;AAC5D,cAAM,IAAI;AAAA,UACR;AAAA,UACA,GAAG,IAAI;AAAA,QAAA;AAAA,MAEX;AACI,UAAA,KAAK,SAAS,aAAa,KAAK,CAAC,KAAK,SAAS,YAAY,GAAG;AAChE,2BAAmB,QAAsB,IAAI;AAAA,MAAA,OACxC;AACL,8BAAsB,QAAyB,IAAI;AAAA,MACrD;AACO,aAAA;AAAA,aACA,OAAO;AACd,UAAI,YAAY,OAAO,UAAU,KAAK,YAAY;AAAkB,eAAA;AACpE,UAAI,iBAAiB,aAAa;AAChC,cAAM,IAAI,WAAW,kBAAkB,GAAG,IAAI,oBAAoB;AAAA,MACpE;AACM,YAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAc,OAA+B;AAC9D,UAAMN,QAAO;AACP,UAAAA,MAAK,MAAMI,UAAQ,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAA,CAAO;AAC1D,UAAA,YAAY,GAAG,IAAI,QAAQJ,MAAK,GAAG,IAAI,OAAO,WAAA,CAAY;AAChE,UAAM,OAAO,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA;AAC1C,QAAA;AACI,YAAAA,MAAK,cAAc,WAAW,MAAM,EAAE,MAAM,KAAO,WAAW,KAAA,CAAM;AACpE,YAAAA,MAAK,OAAO,WAAW,IAAI;AACjC,UAAIA,MAAK,aAAa;AAAiB,cAAAA,MAAK,MAAM,MAAM,GAAK;AAAA,aACtD,OAAO;AACV,UAAA;AACI,cAAAA,MAAK,OAAO,SAAS;AAAA,eACpB,cAAc;AAAA,MAEvB;AACM,YAAA;AAAA,IACR;AAAA,EACF;AACF;AAEA,eAAsB,cACpB,UACAE,eAA2B,mBAC3B,UAAqE,CAAA,GACV;AAC3D,QAAM,MAAM,QAAQ,OAAO,UAAU,IAAI;AACnC,QAAA,UAAU,QAAQ,WAAWA,aAAY,QAAQA,aAAY,eACjE,UAAU;AACZ,QAAM,YAAY,kBAAkB,UAAUA,cAAa,KAAK,OAAO;AACjE,QAAA,QAAQ,IAAI,YAAY,SAAS;AACjC,QAAA,SAAS,MAAM,MAAM;AAC3B,QAAM,cAAc,SAAS,WAAWA,aAAY,wBAAwB,OAAO;AACnF,QAAM,UAAU,cAAc,MAAM,MAAM,YAAY,WAAW,IAAI;AACjE,MAAA,eAAe,CAAC,SAAS;AAC3B,UAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AAAA,EAC/E;AAEA,QAAM,UAAkC;AAAA,IACtC,YAAY;AAAA,MACV,SAAS;AAAA,MACTA,aAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACF;AAAA,EAAA;AAEF,QAAM,OAAO;AAAA,IACX;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,WAAW;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEF,QAAM,WAAW;AAAA,IACf;AAAA,IACA,SAAS;AAAA,IACTA,aAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAEE,MAAA;AACJ,MAAI,QAAQ,eAAe,SAAS,WAAW,QAAW;AAC/C,aAAA;AACT,YAAQ,SAAS;AAAA,EAAA,OACZ;AACI,aAAA;AAAA,MACP;AAAA,MACA,SAAS;AAAA,MACT,SAASA,aAAY,mBAAmB;AAAA,MACxC,SAAS;AAAA,MACT,OAAO,UAAU;AAAA,MACjB;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,kBAAkB,SAAS,oBAAoB,cAAc,QAAQ,KAAK;AAChF,QAAM,YAAY,SAAS,UAAU,cAAc,SAAS,OAAO,IAAI;AAEnE,MAAA;AAAU,qBAAiB,QAAQ;AACjC,QAAA,eAAe,SAAS,gBAAgBA,aAAY;AACtD,MAAA;AAAsB,YAAA,gBAAgB,SAAS,eAAe,aAAa;AAC/E,MAAI,aAAa;AACf,YAAQ,UAAU,SAAS,UACvB,aACAA,aAAY,uBACZ,gBACA;AAAA,EACN;AAEO,SAAA;AAAA,IACL;AAAA,IACA,UAAU;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB,SAAS;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,SAAS;AAAA,MAClB,gBAAgB,SAAS;AAAA,MACzB,MAAM,SAAS,QAAQ;AAAA,MACvB,gBAAgB,SAAS,kBAAkB;AAAA,MAC3C,KAAK,SAAS,OAAO;AAAA,MACrB,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS,SAAS,WAAW;AAAA,MAC7B;AAAA,IACF;AAAA,EAAA;AAEJ;AAEO,SAAS,kBACd,UACAA,cACA,MAAM,QAAA,EAAU,IAAI,GACpB,UAAUA,aAAY,QAAQA,aAAY,eAAe,QAAQ,EAAE,WAC3D;AACR,QAAM,QAAQ,SAAS,aAAaA,aAAY,2BAC9CI,OAAK,SAAS,eAAe;AAC/B,SAAOD,aAAW,KAAK,IAAI,QAAQE,UAAQ,KAAK,KAAK;AACvD;AAEO,SAAS,oBACd,UACAL,eAA2B,mBAC3B,UAAqE,CAAA,GACnB;AAClD,QAAM,MAAM,QAAQ,OAAO,UAAU,IAAI;AACnC,QAAA,UAAU,QAAQ,WAAWA,aAAY,QAAQA,aAAY,eACjE,UAAU;AACZ,QAAM,YAAY,kBAAkB,UAAUA,cAAa,KAAK,OAAO;AACvE,QAAM,SAAS,QAAQ,eAAe,SAAS,WAAW,SACtD,UACA,SAAS,UAAU,SAASA,aAAY,mBAAmB,KAAK;AAC7D,SAAA;AAAA,IACL,OAAO,IAAI,YAAY,SAAS;AAAA,IAChC,UAAU;AAAA,MACR;AAAA,MACA,aAAa,SAAS,WAAWA,aAAY;AAAA,MAC7C,MAAM,SAAS,QAAQA,aAAY;AAAA,MACnC,UAAU,SAAS,YAAYA,aAAY;AAAA,MAC3C,UAAU,SAAS,YAAYA,aAAY;AAAA,MAC3C,cAAc,SAAS,gBAAgBA,aAAY;AAAA,MACnD,kBAAkB,SAAS;AAAA,MAC3B;AAAA,MACA,iBAAiB,cAAc,SAAS,YAAYA,aAAY,qBAAqB,KACnF;AAAA,MACF,WAAW,SAAS,UAAU,cAAc,SAAS,OAAO,IAAI;AAAA,MAChE,SAAS,SAAS;AAAA,MAClB,gBAAgB,SAAS;AAAA,MACzB,MAAM,SAAS,QAAQ;AAAA,MACvB,gBAAgB,SAAS,kBAAkB;AAAA,MAC3C,KAAK,SAAS,OAAO;AAAA,MACrB,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS,SAAS,WAAW;AAAA,MAC7B,SAAS;AAAA,QACP,YAAY;AAAA,UACV,SAAS;AAAA,UACTA,aAAY;AAAA,UACZ;AAAA,UACA;AAAA,QACF;AAAA,QACA,QAAQ,SAAS,SACb,aACAA,aAAY,sBACZ,gBACA;AAAA,MACN;AAAA,IACF;AAAA,EAAA;AAEJ;AAEO,SAAS,kBAA+B;AACvC,QAAA,UAAU,UAAU,OAAO;AACjC,SAAO,OAAO;AAAA,IACZ,kBAAkB,IAAI,CACpB,SACG,CAAC,MAAM,QAAQ,SAAS,IAAI,IAAI,QAAU,EAAA,IAAI,IAAI,IAAI,MAAS,CAAC;AAAA,EAAA;AAEzE;AAEO,SAAS,oBAAoB,QAAiD;AAC5E,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY,OAAO;AAAA,IACnB,SAAS,OAAO,eAAe;AAAA,IAC/B,MAAM,OAAO,QAAQ;AAAA,IACrB,UAAU,UAAU,OAAO,QAAQ;AAAA,IACnC,UAAU,OAAO,YAAY;AAAA,IAC7B,eAAe,OAAO,gBAAgB;AAAA,IACtC,eAAe,OAAO,eAAe,iBAAiB;AAAA,IACtD,QAAQ,OAAO;AAAA,IACf,kBAAkB,OAAO;AAAA,IACzB,YAAY,OAAO;AAAA,IACnB,eAAe,OAAO,gBAAgB,OAAO,mBACzC;AAAA,MACA,SAAS;AAAA,MACT,QAAQ,OAAO,QAAQ,kBAAkB,OAAO,mBAAmB,SAAS;AAAA,MAC5E,SAAS;AAAA,IAAA,IAET,EAAE,SAAS,MAAM;AAAA,IACrB,SAAS,OAAO;AAAA,EAAA;AAEpB;AAEO,SAAS,oBAAoB,MAAoB;AACtD,MAAI,CAAC,aAAa,KAAK,IAAI,GAAG;AAC5B,UAAM,IAAI,WAAW,wBAAwB,yBAAyB,IAAI,EAAE;AAAA,EAC9E;AACF;AAEA,SAAS,mBAAmB,QAAoB,QAAsB;AAChE,MAAA,OAAO,mBAAmB,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,IAAA;AAAA,EAEb;AACA,MAAI,OAAO,oBAAoB;AAAW,wBAAoB,OAAO,eAAe;AACpF,MAAI,OAAO,WAAW;AAAoB,aAAA,OAAO,QAAQ,MAAM;AAC/D,oBAAkB,QAA8C;AAAA,IAC9D;AAAA,IACA;AAAA,IACA;AAAA,KACC,MAAM;AACX;AAEA,SAAS,sBAAsB,SAAwB,QAAsB;AACvE,MAAA,QAAQ,mBAAmB,GAAG;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,IAAA;AAAA,EAEb;AACA,MAAI,QAAQ,WAAW;AAAoB,aAAA,QAAQ,QAAQ,MAAM;AAE/D,MAAA,QAAQ,qBAAqB,UAC7B,CAAC,CAAC,WAAW,UAAU,EAAE,SAAS,QAAQ,gBAAgB,GAC1D;AACA,UAAM,IAAI,WAAW,kBAAkB,GAAG,MAAM,+CAA+C;AAAA,EACjG;AACA,MAAI,QAAQ;AAAU,qBAAiB,QAAQ,QAAQ;AACvD;AAAA,IACE;AAAA,IACA,CAAC,kBAAkB,QAAQ,YAAY,YAAY,oBAAoB,QAAQ;AAAA,IAC/E;AAAA,EAAA;AAEJ;AAEA,SAAS,kBACP,OACA,SACA,QACM;AACA,QAAA,aAAa,IAAI,IAAI,OAAO;AAClC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC;AACnE,MAAA,QAAQ,SAAS,GAAG;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM,iCAAiC,QAAQ,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEhE;AACF;AAEA,SAAS,SACP,OACA,SAAS,uBACiB;AAC1B,MAAI,UAAU;AAAkB,WAAA;AAC5B,MAAA,CAAC,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK,EAAE,SAAS,KAAK,GAAG;AAC9D,UAAM,IAAI,WAAW,yBAAyB,GAAG,MAAM,+BAA+B,KAAK,EAAE;AAAA,EAC/F;AACO,SAAA;AACT;AAEA,SAAS,OACP,MACA,UACAA,cACA,SACA,UACA,SACe;AACf,MAAI,aAAa,QAAW;AAC1B,YAAQ,IAAI,IAAI;AACT,WAAA;AAAA,EACT;AACA,MAAIA,iBAAgB,QAAW;AAC7B,YAAQ,IAAI,IAAI;AACT,WAAAA;AAAA,EACT;AACA,MAAI,YAAY,QAAW;AACzB,YAAQ,IAAI,IAAI;AACT,WAAA;AAAA,EACT;AACA,MAAI,aAAa;AAAW,YAAQ,IAAI,IAAI;AACrC,SAAA;AACT;AAEA,SAAS,SACP,UACAA,cACA,SACA,UACQ;AACD,SAAA,aAAa,SAChB,aACAA,iBAAgB,SAChB,gBACA,YAAY,SACZ,YACA;AACN;AAEA,SAAS,iBAAiB,OAAqB;AACzC,MAAA;AACA,MAAA;AACI,UAAA,IAAI,IAAI,KAAK;AAAA,EAAA,QACb;AACN,UAAM,IAAI,WAAW,oBAAoB,yBAAyB,KAAK,EAAE;AAAA,EAC3E;AACI,MAAA,CAAC,CAAC,SAAS,QAAQ,EAAE,SAAS,IAAI,QAAQ,GAAG;AACzC,UAAA,IAAI,WAAW,oBAAoB,iCAAiC;AAAA,EAC5E;AACF;AAEA,SAAS,cAAc,UAAkE;AACvF,MAAI,CAAC;AAAiB,WAAA;AACf,SAAA,SAAS,WAAW,SAAS,IAChC,YACA,SAAS,WAAW,UAAU,IAC9B,aACA;AACN;AAEA,SAAS,UAAU,OAA0C;AAC3D,MAAI,CAAC;AAAc,WAAA;AACf,MAAA;AACI,UAAA,MAAM,IAAI,IAAI,KAAK;AACrB,QAAA,IAAI,YAAY,IAAI,UAAU;AAChC,UAAI,WAAW;AACf,UAAI,WAAW;AAAA,IACjB;AACA,WAAO,IAAI;EAAS,QACd;AACC,WAAA;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,SAA4B;AAC3D,SAAO,IAAI,UAAU,wBAAwB,SAAS,CAAC;AACzD;AC5dO,MAAM,sBAAgD;AAAA,EAC3D,OAAO,IAAI,WAAW,MAAM;AAAA,EAE5B,MAAM,WACJ,QACA,SAC6B;AACvB,UAAA,gBAAgB,QAAQ;AACxB,UAAA,WAAW,gBAAgB,MAAM;AACjC,UAAA,aAAa,KAAK,KAAK;AAI7B,UAAM,WAAW,KAAK,KAAK,MAAM,cAAc,UAAU,OAAO;AAAA,MAC9D,OAAO,cAAc,UAAU;AAAA,MAC/B,aAAa,cAAc,UAAU;AAAA,MACrC,aAAa,YAAY;AAAA,MACzB;AAAA,MACA,iBAAiB,OAAO;AAAA,MACxB,cAAc,cAAc;AAAA,MAC5B,uBAAuB,CAAC;AAAA,MACxB,WAAW;AAAA,MACX,qBAAqB,kBAAkB,QAAQ,YAAY;AAAA,IAAA,CAC5D;AACM,WAAA;AAAA,MACL,MAAM,OAAO,QAAQ;AAAA,MACrB,UAAU,OAAO,YAAY,GAAG,OAAO,eAAe,GAAG,QAAQ;AAAA,MACjE,iBAAiB,OAAO;AAAA,IAAA;AAAA,EAE5B;AACF;AAEO,MAAM,6BAA8D;AAAA,EAChE;AAAA,EACA;AAAA,EACA,+BAAe;EAExB,YAAY,QAAwB,SAA4B;AAC9D,SAAK,UAAU;AACf,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,KACJ,SACA,QACA,QACA,SACY;AACZ,QAAI,SAAS,KAAK,SAAS,IAAI,OAAO;AACtC,QAAI,CAAC,QAAQ;AACX,YAAM,YAAY,QAAQ;AACjB,eAAA,IAAI,UAAU,kBAAkB,KAAK,SAAS,OAAO,GAAG,MAAM,MAAM;AAAA,QAC3E,sBAAsB,aAAa,MAAM,KAAK,SAAS,YAAe,GAAA;AAAA,MAAA,CACvE;AACI,WAAA,SAAS,IAAI,SAAS,MAAM;AAAA,IACnC;AACM,UAAA,UAAU,OAAO,KAAK,QAAQ,QAAQ,EAAE,SAAS,QAAQ,QAAA,CAAS;AACxE,WAAO,MAAM,aAAa,SAAS,QAAQ,WAAW,QAAQ,MAAM;AAAA,EACtE;AAAA,EAEA,MAAM,kBAAkB,SAAiB,QAA4C;AAC5E,WAAA,MAAM,QAAQ,kBAAkB,SAAS,EAAE,aAAa,KAAO,QAAQ;AAAA,EAChF;AACF;AAEO,MAAM,mBAAmB;AAAA,EAMtB,YACN,gBACA,SACA,YACA;AACA,SAAK,iBAAiB;AACtB,SAAK,UAAU;AACf,SAAK,aAAa;AACb,SAAA,YAAY,KAAK;EACxB;AAAA,EAEA,aAAa,OACX,QACA,gBACA,UAA0B,IAAI,yBAC9B,SAC6B;AAC7B,UAAM,eAAe;AACrB,UAAM,aAAa,MAAM,QAAQ,WAAW,QAAQ,cAAc;AAClE,WAAO,IAAI;AAAA,MACT;AAAA,MACA,WAAW,IAAI,6BAA6B,QAAQ,cAAc;AAAA,MAClE;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,YAA2B;AACzB,UAAA,KAAK,eAAe;EAC5B;AACF;AAEgB,SAAA,kBAAkB,QAAwB,SAAyB;AACjF,MAAI,OAAO,UAAU;AACnB,UAAM,WAAW,IAAI,IAAI,OAAO,QAAQ;AACxC,UAAM,SAAS,SAAS,SAAS,QAAQ,QAAQ;AACjD,QAAI,UAAU;AAAY,eAAA,WAAW,GAAG,SAAS,SAAS,MAAM,GAAG,MAAM,CAAC,SAAS,OAAO;AAAA,aACjF,SAAS,SAAS,SAAS,OAAO,GAAG;AAC5C,eAAS,WAAW,GAAG,SAAS,QAAQ,IAAI,OAAO;AAAA,IACrD;AAAgB,eAAA,WAAW,GAAG,SAAS,SAAS,QAAQ,OAAO,EAAE,CAAC,SAAS,OAAO;AAClF,aAAS,SAAS;AAClB,aAAS,OAAO;AAChB,WAAO,SAAS,SAAW,EAAA,QAAQ,OAAO,EAAE;AAAA,EAC9C;AACM,QAAAF,QAAO,gBAAgB,MAAM;AACnC,SAAO,GAAG,OAAO,eAAe,GAAGA,KAAI,SAAS,OAAO;AACzD;AAEO,SAAS,gBAAgB,QAAgC;AAC9D,MAAI,OAAO,MAAM;AACX,QAAA;AACF,aAAO,QAAQ,IAAI,QAAQ,OAAO,IAAI,EAAE;IAAc,QAChD;AACN,YAAM,IAAI,WAAW,gBAAgB,6BAA6B,OAAO,IAAI,EAAE;AAAA,IACjF;AAAA,EACF;AACA,MAAI,OAAO;AAAU,WAAO,IAAI,IAAI,OAAO,QAAQ,EAAE;AAC/C,QAAA,IAAI,WAAW,uBAAuB,qDAAqD;AACnG;AAEsB,eAAA,aACpB,SACA,WACA,QACY;AACZ,MAAI,QAAQ;AAAS,UAAM,IAAI,UAAU,YAAY,sBAAsB,CAAC;AACxE,MAAA;AACA,MAAA;AACJ,QAAM,SAA2B;AAAA,IAC/B,IAAI,QAAQ,CAAC,GAAG,WAAW;AACjB,cAAA;AAAA,QACN,MAAM,OAAO,IAAI,UAAU,WAAW,uBAAuB,GAAG,IAAI,CAAC;AAAA,QACrE;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAAA;AAEH,MAAI,QAAQ;AACH,WAAA;AAAA,MACL,IAAI,QAAQ,CAAC,GAAG,WAAW;AACzB,uBAAe,MAAM,OAAO,IAAI,UAAU,YAAY,sBAAsB,CAAC,CAAC;AAC9E,eAAO,iBAAiB,SAAS,cAAc,EAAE,MAAM,MAAM;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,EAEL;AACI,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;AAAA,EAAA,UAC9C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAC3C,QAAI,UAAU;AAAqB,aAAA,oBAAoB,SAAS,YAAY;AAAA,EAC9E;AACF;ACzMO,MAAM,oCAAoC;AA8BjD,eAAsB,0BACpB,QACkC;AAC9B,MAAA;AACI,UAAA,MAAM,kBAAkB,QAAQ,eAAe;AACrD,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACzC,UAAM,QAAQ,MAAM;AAAA,MAClB,OAAO,KAAc,uBAAuB,EAAE;AAAA,MAC9C,OAAO;AAAA,IAAA;AAEH,UAAA,SAAS,sBAAsB,KAAK;AAC1C,WAAO,OAAO,UACV,EAAE,OAAO,WAAW,QAAQ,OAAO,IACnC,EAAE,OAAO,YAAY,QAAQ,OAAO;AAAA,WACjC,OAAO;AACP,WAAA;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IAAA;AAAA,EAEjE;AACF;AAEO,SAAS,sBAAsB,OAAkC;AAClE,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AACzD,UAAA,IAAI,MAAM,oCAAoC;AAAA,EACtD;AACA,QAAM,SAAS;AACf,QAAM,OAAO,OAAO,KAAK,MAAM,EAAE,KAAK;AACtC,QAAM,eAAe,CAAC,WAAW,cAAc,cAAc,gBAAgB;AAC7E,MAAI,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,YAAY,GAAG;AACnD,UAAA,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACI,MAAA,OAAO,mBAAmB,mCAAmC;AAC/D,UAAM,IAAI,MAAM,+CAA+C,OAAO,OAAO,cAAc,CAAC,EAAE;AAAA,EAChG;AACI,MAAA,OAAO,OAAO,YAAY,WAAW;AACjC,UAAA,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAM,YAAY,OAAO;AACzB,QAAM,YAAY,OAAO;AACzB,QAAM,iBAAiB,OAAO,cAAc,SAAS,KAAM,YAAuB,KAChF,OAAO,cAAc,YAAY,UAAU,KAAA,EAAO,SAAS;AACvD,QAAA,mBAAmB,cAAc,QAAQ,cAAc;AACzD,MAAA,CAAC,kBAAkB,CAAC,kBAAkB;AAClC,UAAA,IAAI,MAAM,+EAA+E;AAAA,EACjG;AACI,MAAA,OAAO,WAAW,CAAC,gBAAgB;AAC/B,UAAA,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,SAAS,OAAO;AAAA,IAChB,YAAY;AAAA,IACZ,YAAY;AAAA,EAAA;AAEhB;AAEA,eAAe,YAAe,SAAqB,WAA+B;AAC5E,MAAA;AACJ,QAAM,UAAU,IAAI,QAAe,CAAC,GAAG,WAAW;AACxC,YAAA,WAAW,MAAM,OAAO,IAAI,MAAM,iCAAiC,CAAC,GAAG,SAAS;AAAA,EAAA,CACzF;AACG,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,EAAA,UAC5C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAAA,EAC7C;AACF;ACjGA,MAAMM,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AAEjE,MAAM,8BAA8B;AA0B7B,MAAM,2BAA2B;AAC3B,MAAA,2BAA2B,OAAO,OAAO;AAAA,EACpD;AAAA,EACA;AACF,CAAC;AAoBD,eAAsB,4BACpB,QACAJ,eAA2B,mBACF;AAEvB,MAAA,OAAO,gBAAgB,OAAO,oBAAoB,OAAO,YAAY,OAAO,QAC5E,OAAO,UACP;AACO,WAAA;AAAA,EACT;AACM,QAAA,SAAS,MAAM,0BAA0BA,YAAW;AAC1D,MAAI,CAAC;AAAe,WAAA;AACb,SAAA;AAAA,IACL,GAAG;AAAA,IACH,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,IACV,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,IACrB,iBAAiB;AAAA,IACjB,wBAAwB;AAAA,IACxB,SAAS;AAAA,MACP,GAAG,OAAO;AAAA,MACV,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,MACV,eAAe;AAAA,MACf,eAAe;AAAA,IACjB;AAAA,EAAA;AAEJ;AAEsB,eAAA,0BACpBA,eAA2B,mBACiD;AAC5E,MACE,QAAU,EAAA,OAAO,iBAAiB,eAAeA,aAAY,iBAAiB;AACvE,WAAA;AACT,QAAM,cAAcA,aAAY,gBAAgB,mBAAmBA,YAAW;AAC9E,QAAM,mBAAmBI,OAAK,aAAa,OAAO,oBAAoB;AAClE,MAAA;AACA,MAAA;AACF,YAAQ,KAAK,MAAM,MAAM,UAAU,aAAa,gBAAgB,CAAC;AAAA,WAC1D,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACvC,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sDAAsD,gBAAgB;AAAA,QACtE;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA,2CAA2C,gBAAgB;AAAA,MAC3D;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACA,QAAM,WAAW;AACX,QAAA,MAAM,eAAe,SAAS,UAAU;AACxC,QAAA,OAAO,eAAe,SAAS,WAAW;AAC1C,QAAA,UAAU,eAAe,SAAS,QAAQ;AAC5C,MAAA,SAAS,WAAW,8BAA8B,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;AAC/E,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACI,MAAA;AACM,YAAA,IAAI,QAAQ,GAAG;AACf,YAAA,IAAI,QAAQ,OAAO;AAAA,EAAA,QACrB;AACN,UAAM,sBAAsB,gBAAgB;AAAA,EAC9C;AACO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAYA,OAAK,aAAa,SAAS,UAAU;AAAA,IACjD,cAAcA,OAAK,aAAa,UAAU;AAAA,EAAA;AAE9C;AAEO,SAAS,kBACd,QACAJ,eAA2B,mBAC3B,UAA+B,CAAA,GACX;AACpB,QAAM,SAAS,OAAO;AACtB,MAAI,QAAQ;AACV,WAAO,CAAC;AAAA,MACN,YAAY,OAAO;AAAA,MACnB,cAAc,OAAO;AAAA,MACrB,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AAEA,QAAM,OAAOA,aAAY,QAAQA,aAAY,eAAe,QAAA,EAAU;AACtE,QAAM,QAA4B,CAAA;AAC9B,MAAA,QAAQ,qBAAqB,MAAM;AACrC,UAAM,KAAK;AAAA,MACT,YAAYI,OAAK,MAAM,YAAY,SAAS,UAAU;AAAA,MACtD,cAAcA,OAAK,MAAM,YAAY,UAAU;AAAA,MAC/C,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AACI,MAAA,QAAQ,oBAAoB,OAAO;AACrC,UAAM,KAAK;AAAA,MACT,YAAYA,OAAK,MAAM,aAAa,SAAS,UAAU;AAAA,MACvD,cAAcA,OAAK,MAAM,aAAa,UAAU;AAAA,MAChD,QAAQ;AAAA,IAAA,CACT;AAAA,EACH;AACA,SAAO,iBAAiB,KAAK;AAC/B;AAEsB,eAAA,wBACpB,kBACA,QACAJ,eAA2B,gBAC3B,GAAA,UAA+B,IACJ;AACrB,QAAA,WAAW,iBAAiB;AAClC,MAAI,CAAC;AAAgB,UAAA,IAAI,WAAW,qBAAqB,mBAAmB;AAE5E,aAAW,SAAS,kBAAkB,QAAQA,cAAa,OAAO,GAAG;AACnE,eAAW,aAAa,MAAM,qBAAqB,MAAM,YAAY,QAAQ,GAAG;AAC9E,YAAM,WAAW,MAAM,qBAAqB,OAAO,WAAW,QAAQ;AAClE,UAAA;AAAiB,eAAA;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,IACA,wDAAwD,QAAQ;AAAA,IAChE;AAAA,EAAA;AAEJ;AAEA,eAAsB,uBACpB,QACAA,eAA2B,mBAC3B,UAA+B,CAAA,GACC;AAChC,QAAM,aAAkC,CAAA;AACxC,QAAM,UAA4C,CAAA;AAC5C,QAAA,2BAAW;AACjB,QAAM,QAAQ,kBAAkB,QAAQA,cAAa,OAAO;AAC5D,aAAW,QAAQ,OAAO;AACpB,QAAA;AACA,QAAA;AACF,oBAAc,MAAM,qBAAqB,KAAK,YAAY,EAAE;AAAA,aACrD,OAAO;AACV,UAAA,YAAY,OAAO,kBAAkB,GAAG;AAClC,gBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,YAAY,QAAQ,gBAAiB,CAAA;AACpF;AAAA,MACF;AACM,YAAA;AAAA,IACR;AACA,eAAW,aAAa,aAAa;AACnC,UAAI,WAAW,UAAU;AAA0B;AACnD,YAAM,eAAeI,OAAK,KAAK,YAAY,WAAW,UAAU;AAC5D,UAAA;AACF,cAAM,WAAW,MAAM,qBAAqB,MAAM,SAAS;AAC3D,YAAI,CAAC,UAAU;AACL,kBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,cAAc,QAAQ,aAAA,CAAc;AAC9E;AAAA,QACF;AACA,YAAI,KAAK,IAAI,SAAS,GAAG,GAAG;AAC1B,kBAAQ,KAAK;AAAA,YACX,QAAQ,KAAK;AAAA,YACb,UAAU,SAAS;AAAA,YACnB,MAAM;AAAA,YACN,QAAQ;AAAA,UAAA,CACT;AACD;AAAA,QACF;AACK,aAAA,IAAI,SAAS,GAAG;AACrB,mBAAW,KAAK,EAAE,UAAU,QAAQ,KAAK,QAAQ,WAAW;AAAA,eACrD,OAAO;AACV,YAAA,YAAY,OAAO,kBAAkB,GAAG;AAClC,kBAAA,KAAK,EAAE,QAAQ,KAAK,QAAQ,MAAM,cAAc,QAAQ,gBAAA,CAAiB;AACjF;AAAA,QACF;AACA,YAAI,iBAAiB,aAAa,MAAM,SAAS,+BAA+B;AAC9E,kBAAQ,KAAK;AAAA,YACX,QAAQ,KAAK;AAAA,YACb,UAAU,OAAO,MAAM,QAAQ,aAAa,WACxC,MAAM,QAAQ,WACd;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,UAAA,CACT;AACD;AAAA,QACF;AACM,cAAA;AAAA,MACR;AAAA,IACF;AACA,QAAI,WAAW,UAAU;AAA0B;AAAA,EACrD;AACO,SAAA;AAAA,IACL,OAAO,OAAO,OAAO,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;AAAA,IACrD,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,eAAsB,sBACpB,QACAJ,eAA2B,gBAAgB,GAC3C,uBAAuB,OACW;AAClC,MAAI,OAAO,UAAU;AACf,QAAA;AACF,YAAM,WAAW,MAAM,wBAAwB,OAAO,UAAU,QAAQA,cAAa;AAAA,QACnF,kBAAkB;AAAA,MAAA,CACnB;AACM,aAAA;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,SAAS,GAAG;AAAA,QACpB,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,UACX,UAAU,SAAS;AAAA,UACnB,QAAQ,OAAO,QAAQ,YAAY;AAAA,UACnC,eAAe,SAAS;AAAA,QAAA,CACzB;AAAA,QACD,SAAS,CAAC;AAAA,MAAA;AAAA,aAEL,OAAO;AACP,aAAA;AAAA,QACL,MAAM;AAAA,QACN,OAAO,CAAC,OAAO,QAAQ;AAAA,QACvB,OAAO;AAAA,QACP,YAAY,CAAC;AAAA,QACb,SAAS,CAAC;AAAA,UACR,UAAU,OAAO;AAAA,UACjB,QAAQ,iBAAiB,YAAY,MAAM,OAAO;AAAA,QAAA,CACnD;AAAA,MAAA;AAAA,IAEL;AAAA,EACF;AACA,QAAM,OAAO,MAAM,uBAAuB,QAAQA,cAAa;AAAA,IAC7D,kBAAkB;AAAA,EAAA,CACnB;AACM,SAAA;AAAA,IACL,MAAM;AAAA,IACN,OAAO,KAAK;AAAA,IACZ,OAAO,KAAK;AAAA,IACZ,YAAY,KAAK,WAAW,IAAI,CAAC,eAAe;AAAA,MAC9C,UAAU,UAAU,SAAS;AAAA,MAC7B,QAAQ,UAAU;AAAA,MAClB,eAAe,UAAU,SAAS;AAAA,IAAA,EAClC;AAAA,IACF,SAAS,KAAK;AAAA,EAAA;AAElB;AAEA,eAAe,qBACb,OACA,WACA,UACuC;AACvC,QAAM,eAAeI,OAAK,MAAM,YAAY,WAAW,UAAU;AAC3D,QAAA,WAAW,MAAM,qBAAqB,YAAY;AACxD,MAAI,CAAC,YAAY,YAAY,CAAC,gBAAgB,UAAU,QAAQ;AAAU,WAAA;AAC1E,QAAM,MAAM,OAAO,SAAS,OAAO,WAAW,SAAS,KAAK;AAC5D,QAAM,UAAU,OAAO,SAAS,SAAS,YAAY,SAAS,KAAK,KAC/D,IAAA,SAAS,KAAK,KAAA,IACd;AACA,MAAA,CAAC,OAAO,CAAC;AAAgB,WAAA;AAE7B,QAAM,iBAAiBA,OAAK,MAAM,cAAc,WAAW,4BAA4B;AACnF,MAAA;AACF,UAAM,iBAAiB,MAAM,QAAA,EAAU,aAAa,cAAc,GAAG;AACrE,QAAI,CAAC;AAAsB,aAAA;AACpB,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,eAAe,OAAO,SAAS,gBAAgB,WAAW,WAAW;AAAA,MACrE,YAAY,MAAM;AAAA,MAClB,cAAc,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ,MAAM;AAAA,IAAA;AAAA,WAET,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AAEA,QAAM,aAAaA,OAAK,MAAM,cAAc,WAAW,4BAA4B;AAC/E,MAAA;AACI,UAAA,QAAU,EAAA,KAAK,UAAU;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,UAAU,KAAK,aAAa,WAAW;AAAA,IAAA;AAAA,WAEpC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACO,SAAA;AACT;AAEA,eAAe,qBAAqB,YAAoB,UAAqC;AACvF,MAAA,SAAS,WAAW,MAAM,GAAG;AAC3B,QAAA;AACF,aAAO,CAAC,QAAQ,IAAI,QAAQ,QAAQ,EAAE,YAAY;AAAA,IAAA,QAC5C;AACN,YAAM,IAAI,WAAW,oBAAoB,gBAAgB,QAAQ,EAAE;AAAA,IACrE;AAAA,EACF;AACA,QAAM,cAAwB,CAAA;AAC1B,MAAA;AACF,eAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,UAAU,GAAG;AACvD,UAAI,MAAM;AAAyB,oBAAA,KAAK,MAAM,IAAI;AAAA,IACpD;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG,aAAO;AACrC,UAAA;AAAA,EACR;AACA,SAAO,YAAY;AACrB;AAEA,eAAe,qBAAqB,MAAuD;AACrF,MAAA;AACI,UAAA,QAAQ,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACpD,WAAA,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,IAC7D,QACA;AAAA,WACG,OAAO;AACd,QAAI,YAAY,OAAO,UAAU,KAAK,iBAAiB;AAAoB,aAAA;AACrE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,gBAAgB,UAAmC,UAA2B;AACrF,MAAI,OAAO,SAAS,OAAO,YAAY,SAAS,OAAO;AAAiB,WAAA;AACxE,SAAO,OAAO,SAAS,SAAS,YAAY,SAAS,SAAS;AAChE;AAEgB,SAAA,mBAAmBJ,eAA2B,mBAA2B;AACnF,MAAA,QAAA,EAAU,aAAa,WAAW;AACpC,UAAM,UAAUA,aAAY;AAC5B,WAAO,UAAUI,OAAK,SAAS,SAAS,IAAI;AAAA,EAC9C;AACO,SAAA;AACT;AAEA,SAAS,sBAAsB,MAAyB;AACtD,SAAO,IAAI;AAAA,IACT;AAAA,IACA,uCAAuC,IAAI;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,OAAoC;AACnD,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,iBAAiB,OAA+C;AACjE,QAAA,2BAAW;AACV,SAAA,MAAM,OAAO,CAAC,SAAS;AAC5B,UAAM,MAAM,GAAG,KAAK,UAAU,KAAK,KAAK,YAAY;AAChD,QAAA,KAAK,IAAI,GAAG;AAAU,aAAA;AAC1B,SAAK,IAAI,GAAG;AACL,WAAA;AAAA,EAAA,CACR;AACH;ACjWA,MAAM,eAAe;AACrB,MAAM,0BAA0B,KAAK;AAE9B,MAAM,sBAAmD;AAAA,EAa9D,YACE,QACAJ,eAA2B,mBAC3B,eAA2C,CAAA,GAC3C;AANF,SAAA,oBAAgF;AAO9E,SAAK,SAAS;AACd,SAAK,eAAeA;AACpB,SAAK,aAAa,aAAa,aAAa,IAAI,2BAA2B;AACtE,SAAA,gBAAgB,aAAa,gBAAgB;AAC7C,SAAA,gBAAgB,aAAa,gBAAgB;AAC7C,SAAA,uBAAuB,aAAa,uBAAuB;AAC3D,SAAA,OAAO,aAAa,OAAO,KAAK;AAAA,EACvC;AAAA,EAvBS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAgBA,MAAM,UAAyC;AAC7C,QAAI,KAAK;AAAU,aAAO,KAAK;AAC/B,SAAK,WAAW,MAAM,KAAK,cAAc,KAAK;AAC9C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,cAA6C;AAC3C,UAAA,UAAU,MAAM,KAAK;AAC3B,UAAM,MAAM,YAAY,QAAQ,OAAO,GAAG;AAC1C,UAAM,aAAa,KAAK,MAAM,KAAK,KAAA,IAAS,GAAK;AAC7C,QAAA,QAAQ,UAAa,MAAM,aAAa;AAAW,aAAA;AACnD,QAAA,CAAC,QAAQ,WAAW;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,SAAK,WAAW,MAAM,KAAK,cAAc,IAAI;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,YAA2C;AAC/C,SAAK,WAAW,MAAM,KAAK,cAAc,IAAI;AAC7C,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,UAAgC;AAC1B,QAAA,CAAC,KAAK,UAAU;AAClB,YAAM,IAAI,UAAU,iBAAiB,8BAA8B,SAAS;AAAA,IAC9E;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,SAAkC;AAC1B,UAAA,UAAU,KAAK;AACf,UAAA,YAAY,QAAQ,UAAU;AACpC,UAAM,MAAM,YAAY,QAAQ,OAAO,GAAG;AAC1C,UAAM,mBAAmB,QAAQ,SAC7B,OACA,KAAK,IAAI,GAAG,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,GAAK,CAAC;AAC9C,WAAA;AAAA,MACL,eAAe;AAAA,MACf,WAAW,QAAQ,UAAU;AAAA,MAC7B,OAAO,QAAQ,UAAU;AAAA,MACzB,iBAAiB,QAAQ,UAAU,iBAAiB;AAAA,MACpD,gBAAgB,QAAQ,UAAU;AAAA,MAClC,WAAW,QAAQ;AAAA,MACnB,YAAY,aAAa;AAAA,MACzB,mBAAmB;AAAA,MACnB,gBAAgB,KAAK,kBAAkB,SAAS;AAAA,MAChD,mBAAmB,KAAK;AAAA,IAAA;AAAA,EAE5B;AAAA,EAEA,MAAM,cAAc,WAAmD;AACjE,QAAA,KAAK,OAAO,cAAc;AAC5B,YAAM,SAAS,KAAK,OAAO,QAAQ,kBAAkB,gBACjD,gBACA;AACJ,aAAO,gBAAgB,KAAK,OAAO,cAAc,QAAQ,KAAK,MAAM;AAAA,IACtE;AAEI,QAAA,KAAK,OAAO,kBAAkB;AAC5BM,UAAAA;AACA,UAAA;AACFA,kBAAS,MAAM,QAAQ,EAAE,aAAa,KAAK,OAAO,gBAAgB,GAAG;eAC9D,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,sCACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CACvD;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,UAAI,CAACA,QAAO;AACV,cAAM,IAAI,UAAU,yBAAyB,+BAA+B,SAAS;AAAA,MACvF;AACA,aAAO,gBAAgBA,QAAO,sBAAsB,KAAK,KAAM,CAAA;AAAA,IACjE;AAEA,UAAM,WAAW,KAAK,aAAa,iCAAiC,KAAK;AACrE,QAAA;AAAU,aAAO,gBAAgB,UAAU,eAAe,KAAK,KAAM,CAAA;AAEzE,QAAI,KAAK,mBAAmB;AACtB,UAAA,KAAK,kBAAkB,WAAW,iBAAiB;AACrD,cAAM,KAAK;MACb;AACA,aAAO,MAAM,KAAK,mBAAmB,KAAK,iBAAiB;AAAA,IAC7D;AAEI,QAAA,KAAK,OAAO,UAAU;AACxB,YAAM,WAAW,MAAM,KAAK,yBAAyB,KAAK,OAAO,QAAQ;AACzE,YAAM,UAAU,MAAM,KAAK,mBAAmB,QAAQ;AACtD,WAAK,oBAAoB;AAClB,aAAA;AAAA,IACT;AAEA,SAAK,oBAAoB;AACzB,UAAM,aAAa,MAAM,uBAAuB,KAAK,QAAQ,KAAK,YAAY;AAC9E,UAAM,oBAAoB,MAAM,KAAK,uBAAuB,WAAW,UAAU;AAC7E,QAAA;AAA0B,aAAA;AAExB,UAAA,kBAAkB,MAAM,KAAK;AACnC,QACE,gBAAgB,UAAU,aAC1B,WAAW,WAAW,SAAS,0BAC/B;AACA,YAAM,iBAAiB,IAAI;AAAA,QACzB,WAAW,WAAW,IAAI,CAAC,cAAc,UAAU,SAAS,GAAG;AAAA,MAAA;AAEjE,YAAM,YAAY,MAAM,uBAAuB,KAAK,QAAQ,KAAK,cAAc;AAAA,QAC7E,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,MAAA,CACnB;AACK,YAAA,YAAY,2BAA2B,WAAW,WAAW;AAC7D,YAAA,aAAa,UAAU,WAAW;AAAA,QAAO,CAAC,cAC9C,CAAC,eAAe,IAAI,UAAU,SAAS,GAAG;AAAA,MAAA,EAC1C,MAAM,GAAG,SAAS;AACpB,YAAM,mBAAmB,MAAM,KAAK,uBAAuB,UAAU;AACjE,UAAA;AAAyB,eAAA;AAAA,IAC/B;AACI,QAAA,KAAK,kBAAkB,SAAS,GAAG;AACrC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,OAAO,KAAK,kBAAkB,MAAM;AAAA,QACpC;AAAA,QACA;AAAA,QACA,EAAE,UAAU,KAAK,kBAAkB;AAAA,MAAA;AAAA,IAEvC;AAEI,QAAA,KAAK,OAAO,gBAAgB;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,WAAW,KAAK,OAAO,UAAU,WAAW,MAAM,IACpD,MAAM,KAAK,cAAc,YAAY,IACrC,KAAK,OAAO,YAAY,MAAM,KAAK,cAAc,YAAY;AAC7D,QAAA,CAAC,SAAS,KAAK;AAAG,YAAM,IAAI,UAAU,iBAAiB,wBAAwB,SAAS;AAC5F,UAAM,WAAW,MAAM,KAAK,cAAc,YAAY,2BAA2B,YAAY;AACvF,UAAA,QAAQ,MAAM,KAAK,WAAW;AAAA,MAClC,kBAAkB,KAAK,QAAQ,YAAY;AAAA,MAC3C,SAAS,KAAK;AAAA,MACd;AAAA,MACA,cAAc,SAAS,MAAM;AAAA,MAC7B,KAAK,OAAO;AAAA,IAAA;AAEd,WAAO,qBAAqB,OAAO,YAAY,MAAM,KAAK,MAAM;AAAA,EAClE;AAAA,EAEA,MAAM,yBAAyB,kBAAqD;AAC9E,QAAA,KAAK,OAAO,wBAAwB;AACtC,aAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,YAAY;AAAA,IACvF;AAEI,QAAA;AACF,aAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,YAAY;AAAA,aAC9E,OAAO;AACd,UAAI,EAAE,iBAAiB,cAAc,MAAM,SAAS;AAA4B,cAAA;AAAA,IAClF;AAEA,UAAM,KAAK;AACX,WAAO,MAAM,wBAAwB,kBAAkB,KAAK,QAAQ,KAAK,cAAc;AAAA,MACrF,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,IAAA,CACnB;AAAA,EACH;AAAA,EAEA,MAAM,uBACJ,YAC2C;AAC3C,eAAW,aAAa,YAAY;AAC9B,UAAA;AACF,cAAM,UAAU,MAAM,KAAK,mBAAmB,UAAU,QAAQ;AAChE,aAAK,oBAAoB,UAAU;AAC5B,eAAA;AAAA,eACA,OAAO;AACV,YAAA,CAAC,oBAAoB,KAAK;AAAS,gBAAA;AACvC,aAAK,kBAAkB,KAAK;AAAA,UAC1B,UAAU,UAAU,SAAS;AAAA,UAC7B,MAAM,MAAM;AAAA,UACZ,SAAS,gBAAgB,MAAM,OAAO;AAAA,QAAA,CACvC;AAAA,MACH;AAAA,IACF;AACO,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,mBAAmB,UAA2D;AAClF,UAAM,WAAW,MAAM;AAAA,MACrB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,KAAK,KAAK;AAAA,IAAA;AAEN,UAAA,QAAQ,MAAM,KAAK,WAAW;AAAA,MAClC,kBAAkB,KAAK,QAAQ,YAAY;AAAA,MAC3C;AAAA,MACA,mBAAmB,SAAS,eAAe,SAAS,OAAO;AAAA,MAC3D,KAAK,OAAO;AAAA,IAAA;AAEd,WAAO,qBAAqB,OAAO,YAAY,MAAM,KAAK,MAAM;AAAA,EAClE;AAAA,EAEA,MAAM,wBAA0D;AAC9D,SAAK,mBAAmB,MAAM,KAAK,qBAAqB,KAAK,MAAM;AACnE,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,kCAAiD;AAC/C,UAAA,WAAW,MAAM,KAAK;AAC5B,QAAI,SAAS,UAAU;AAAW;AAClC,SAAK,oBAAoB;AACrB,QAAA,SAAS,UAAU,YAAY;AACjC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,QAAQ,gBAAgB,SAAS,MAAM,EAAE;AAAA,IAAA;AAAA,EAE/C;AACF;AAEA,SAAS,oBAAoB,OAAoC;AAC/D,SAAO,iBAAiB,aAAa,yBAAyB,SAAS,MAAM,IAAI;AACnF;AAEO,MAAM,2BAA8D;AAAA,EACzE,MAAM,WACJ,KACA,KACA,QACA,WACiB;AACjB,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACzC,UAAM,WAAW,MAAM;AAAA,MACrB,IAAI,gBAAgB,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ;AAAA,MACtD;AAAA,IAAA;AAEF,QAAI,CAAC,SAAS;AAAqB,YAAA,IAAI,MAAM,sCAAsC;AACnF,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,gBACJ,KACA,UACA,UACA,QACA,WACiB;AACjB,UAAM,SAAS,IAAI,QAAQ,WAAW,GAAG;AACnC,UAAA,YAAY,IAAI,gBAAgB,MAAM;AACtC,UAAA,QAAQ,KAAK;AACnB,cAAU,OAAO,KAAK;AACtB,UAAM,WAAW,MAAM;AAAA,MACrB,UAAU,gBAAgB;AAAA,QACxB;AAAA,QACA,UAAW,QAAQ,aAIN,UAAU,UAAU,KAAK;AAAA,QACtC;AAAA,QACA,aAAa;AAAA,MAAA,CACd;AAAA,MACD;AAAA,IAAA;AAEF,QAAI,CAAC,SAAS;AAAqB,YAAA,IAAI,MAAM,sCAAsC;AACnF,WAAO,SAAS;AAAA,EAClB;AACF;AAEA,SAAS,mBACP,eACA,SACY;AACL,SAAA,kBAAkB,WACrB,EAAE,MAAM,UAAU,YAAY,aAC9B,IAAA,cAAc,OAAO;AAC3B;AAEA,SAAS,cAAc,aAAiC;AAC/C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,oBAAoB,cAAc,WAAW;AAAA,EAAA;AAElE;AAEO,SAAS,qBACd,OACA,gBACA,WACA,QAAQ,KAAK,OACS;AAChB,QAAA,SAAS,YAAY,KAAK;AAC1B,QAAA,MAAM,YAAY,OAAO,GAAG;AAClC,QAAM,aAAa,KAAK,MAAM,QAAQ,GAAK;AACvC,MAAA,QAAQ,UAAa,OAAO,YAAY;AAC1C,UAAM,IAAI,UAAU,mBAAmB,iCAAiC,SAAS;AAAA,EACnF;AACA,QAAM,KAAK,YAAY,OAAO,GAAG,KAAK,YAAY,OAAO,MAAM;AAC/D,QAAM,QAAQ,YAAY,OAAO,KAAK,KAAK,YAAY,OAAO,GAAG;AAC7D,MAAA,CAAC,MAAM,CAAC,OAAO;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,gBAAgB,YAAY,OAAO,eAAe,KACtD,YAAa,OAAO,OAA+C,eAAe;AAC7E,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,QAAQ,SAAY,SAAY,IAAI,KAAK,MAAM,GAAK,EAAE,YAAY;AAAA,IACpF;AAAA,EAAA;AAEJ;AAEA,SAAS,gBACP,OACA,gBAIA,OACsB;AACtB,SAAO,qBAAqB,OAAO,gBAAgB,OAAO,KAAK;AACjE;AAEA,SAAS,YAAY,OAAwC;AACrD,QAAA,SAAS,wBAAwB,KAAK;AAC5C,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,UAAU,yBAAyB,oCAAoC,SAAS;AAAA,EAC5F;AACO,SAAA;AACT;AAEA,eAAe,eACb,SACA,QACA,eACA,OACiB;AACjB,QAAM,MAAM,KAAK,MAAM,QAAQ,GAAK;AACpC,QAAM,SAAS,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK;AACjD,QAAM,UAAU;AAAA,IACd,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,KAAK,OAAO,WAAW;AAAA,IACvB,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,KAAK,MAAM;AAAA,IACX,MAAM;AAAA,IACN,OAAO,CAAC;AAAA,EAAA;AAEV,QAAM,eAAe,GAAG,UAAU,KAAK,UAAU,MAAM,CAAC,CAAC,IAAI,UAAU,KAAK,UAAU,OAAO,CAAC,CAAC;AACzF,QAAA,WAAW,SAAS,aAAa;AACnC,MAAA;AACA,MAAA;AACI,UAAA,MAAM,OAAO,OAAO;AAAA,MACxB;AAAA,MACA,SAAS,QAAQ;AAAA,MACjB,EAAE,MAAM,UAAU;AAAA,MAClB;AAAA,MACA,CAAC,MAAM;AAAA,IAAA;AAAA,EACT,QACM;AACN,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,YAAY,MAAM,OAAO,OAAO,KAAK,WAAW,KAAK,IAAI,YAAY,EAAE,OAAO,YAAY,CAAC;AAC1F,SAAA,GAAG,YAAY,IAAI,UAAU,IAAI,WAAW,SAAS,CAAC,CAAC;AAChE;AAEA,SAAS,SAAS,KAAyB;AACnC,QAAA,UAAU,IAAI,QAAQ,oBAAoB,EAAE,EAAE,WAAW,OAAO,EAAE;AAClE,QAAA,SAAS,KAAK,OAAO;AACpB,SAAA,WAAW,KAAK,QAAQ,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AACvE;AAEA,SAAS,UAAU,OAAoC;AAC/C,QAAA,QAAQ,OAAO,UAAU,WAAW,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI;AAC5E,MAAI,SAAS;AACb,aAAW,QAAQ;AAAiB,cAAA,OAAO,aAAa,IAAI;AAC5D,SAAO,KAAK,MAAM,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,EAAE;AAClF;AAEA,SAAS,YAAY,OAAoC;AAChD,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,YAAY,OAAoC;AACvD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,eAAe,iBAAoB,SAAqB,WAA+B;AACjF,MAAA;AACJ,QAAM,UAAU,IAAI,QAAe,CAAC,GAAG,WAAW;AACxC,YAAA;AAAA,MACN,MAAM,OAAO,IAAI,UAAU,WAAW,4BAA4B,GAAG,IAAI,CAAC;AAAA,MAC1E;AAAA,IAAA;AAAA,EACF,CACD;AACG,MAAA;AACF,WAAO,MAAM,QAAQ,KAAK,CAAC,SAAS,OAAO,CAAC;AAAA,EAAA,UAC5C;AACA,QAAI,UAAU;AAAW,mBAAa,KAAK;AAAA,EAC7C;AACF;AAEA,eAAe,YAAY,QAAiC;AAC1D,UAAQ,MAAM,UAAU,SAAS,MAAM,IAAI,KAAU,KAAA;AACvD;AAEA,eAAe,WAAW,QAAiC;AACzD,MAAI,CAAC,UAAU,mBAAmB;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,WAAW,MAAM;AAAA,WACjC,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACrD;AAAA,IAAA;AAAA,EAEJ;AACF;ACxhBgB,SAAA,gBAAgB,MAAe,MAAqC;AAClF,SAAO,EAAE,gBAAgB,GAAG,IAAI,MAAM,MAAM;AAC9C;AAEgB,SAAA,cACd,OACA,MACe;AACR,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,IAAI;AAAA,IACJ,OAAO;AAAA,MACL,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM;AAAA,MACf,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,IACjB;AAAA,IACA;AAAA,EAAA;AAEJ;AAEgB,SAAA,cAAc,UAA2B,QAA8B;AACjF,MAAA,WAAW,UAAU,WAAW;AAAgB,WAAA,KAAK,UAAU,QAAQ;AAC3E,MAAI,WAAW,OAAO;AAChB,QAAA,OAAO,SAAS,SAAS;AAAgB,YAAA,IAAI,MAAM,qCAAqC;AAC5F,WAAO,SAAS;AAAA,EAClB;AACA,MAAI,WAAW;AAAe,WAAA,WAAW,SAAS,IAAI;AAC/C,SAAA,YAAY,SAAS,IAAI;AAClC;AAEgB,SAAA,YAAY,UAAyB,QAA8B;AACjF,MAAI,WAAW,UAAU,WAAW,WAAW,WAAW;AAAc,WAAA,KAAK,UAAU,QAAQ;AAC/F,QAAM,YAAY,SAAS,MAAM,YAAY,iBAAiB;AACvD,SAAA,GAAG,SAAS,MAAM,IAAI,GAAG,SAAS,KAAK,SAAS,MAAM,OAAO;AACtE;AAEA,SAAS,WAAW,MAAuB;AACzC,MAAI,OAAO,SAAS;AAAiB,WAAA;AACjC,MAAA,QAAQ,OAAO,SAAS,YAAY,CAAC,MAAM,QAAQ,IAAI,GAAG;AAC5D,UAAMT,UAAS;AACX,QAAA,OAAOA,QAAO,WAAW;AAAU,aAAOA,QAAO;AACjD,QAAA,OAAOA,QAAO,SAAS;AAAU,aAAOA,QAAO;AAAA,EACrD;AACA,SAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACrC;AAEA,SAAS,YAAY,MAAuB;AACtC,MAAA,MAAM,QAAQ,IAAI;AAAG,WAAO,WAAW,IAAI;AAC3C,MAAA,QAAQ,OAAO,SAAS,UAAU;AACpC,UAAMA,UAAS;AACf,UAAM,aAAa,OAAO,QAAQA,OAAM,EAAE,KAAK,CAAC,CAAG,EAAA,KAAK,MAAM,MAAM,QAAQ,KAAK,CAAC;AAC9E,QAAA;AAAmB,aAAA,WAAW,WAAW,CAAC,CAAc;AAC5D,UAAM,OAAO,OAAO,QAAQA,OAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,OAAO,aAAa,KAAK,EAAI,EAAA;AAC/F,WAAO,WAAW,IAAI;AAAA,EACxB;AACO,SAAA,OAAO,QAAQ,EAAE;AAC1B;AAEA,SAAS,WAAW,MAAyB;AAC3C,MAAI,KAAK,WAAW;AAAU,WAAA;AAC9B,QAAM,UAAU,KAAK;AAAA,IAAI,CAAC,QACxB,OAAO,OAAO,QAAQ,YAAY,CAAC,MAAM,QAAQ,GAAG,IAChD,MACA,EAAE,OAAO,IAAI;AAAA,EAAA;AAEnB,QAAM,UAAU,CAAC,GAAG,IAAI,IAAI,QAAQ,QAAQ,CAAC,QAAQ,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC;AACvE,QAAM,WAAW,QAAQ,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,WAAW,aAAa,IAAI,MAAM,CAAC,CAAC,CAAC;AACxF,QAAM,SAAS,QAAQ;AAAA,IAAI,CAAC,QAAQ,UAClC,KAAK,IAAI,OAAO,QAAQ,GAAG,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,EAAE,MAAM,CAAC;AAAA,EAAA;AAErE,QAAM,SAAS,QAAQ,IAAI,CAAC,QAAQ,UAAU,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAC/E,QAAA,YAAY,OAAO,IAAI,CAAC,UAAU,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI;AACpE,QAAM,OAAO,SAAS;AAAA,IAAI,CAAC,QACzB,IAAI,IAAI,CAAC,OAAO,UAAU,MAAM,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI;AAAA,EAAA;AAElE,SAAO,CAAC,QAAQ,WAAW,GAAG,IAAI,EAAE,KAAK,IAAI;AAC/C;AAEA,SAAS,aAAa,OAAwB;AACxC,MAAA,UAAU,QAAQ,UAAU;AAAkB,WAAA;AAClD,MAAI,OAAO,UAAU;AAAiB,WAAA;AACtC,MAAI,OAAO,UAAU,YAAY,OAAO,UAAU;AAAW,WAAO,OAAO,KAAK;AACzE,SAAA,KAAK,UAAU,KAAK;AAC7B;AC5GA,MAAM,aAAa;AAEnB,MAAM,iBAAiB;AAAA,EACrB,EAAE,MAAM,cAAc,UAAU,aAAa,MAAM,UAAU,OAAO,UAAU;AAAA,EAC9E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,EACd;AAAA,EACA,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,UAAU,OAAO,UAAU;AAAA,EACzE,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,UAAU,OAAO,UAAU;AAAA,EACnE,EAAE,MAAM,YAAY,UAAU,YAAY,MAAM,UAAU,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,YAAY,UAAU,YAAY,MAAM,UAAU,OAAO,UAAU;AAAA,EAC3E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,EACV;AAAA,EACA,EAAE,MAAM,OAAO,UAAU,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,EAClE;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK;AAAA,EAChD;AAAA,EACA,EAAE,MAAM,SAAS,UAAU,SAAS,MAAM,UAAU,OAAO,UAAU;AAAA,EACrE,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,YAAY,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,YAAY,UAAU,WAAW,MAAM,UAAU,OAAO,UAAU;AAAA,EAC1E;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,WAAW,OAAO,UAAU;AAAA,EACpE;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,EAAE,MAAM,OAAO,UAAU,OAAO,MAAM,WAAW,OAAO,UAAU;AAAA,EAClE,EAAE,MAAM,YAAY,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAAA,EAC3E,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAAA,EAC1E,EAAE,MAAM,QAAQ,UAAU,QAAQ,MAAM,WAAW,OAAO,UAAU;AAAA,EACpE,EAAE,MAAM,WAAW,UAAU,WAAW,MAAM,WAAW,OAAO,UAAU;AAC5E;AAEA,MAAM,gDAAgC,IAAI;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,gBAAgB;AAAA,EAC3B,+BAAe;EACf,gCAAgB;EAEhB,SAAS,QAA6B;AACpC,QAAI,CAAC,WAAW,KAAK,OAAO,IAAI,GAAG;AACjC,YAAM,IAAI,MAAM,wBAAwB,OAAO,IAAI,EAAE;AAAA,IACvD;AACA,QAAI,KAAK,SAAS,IAAI,OAAO,IAAI,GAAG;AAClC,YAAM,IAAI,MAAM,qBAAqB,OAAO,IAAI,EAAE;AAAA,IACpD;AACW,eAAA,cAAc,OAAO,UAAU;AACnC,WAAA,oBAAoB,OAAO,MAAM,UAAU;AAChD,YAAM,MAAM,GAAG,OAAO,IAAI,IAAI,WAAW,IAAI;AACzC,UAAA,KAAK,UAAU,IAAI,GAAG;AAAG,cAAM,IAAI,MAAM,sBAAsB,GAAG,EAAE;AACnE,WAAA,UAAU,IAAI,KAAK;AAAA,QACtB,GAAG;AAAA,QACH,QAAQ,OAAO;AAAA,QACf,eAAe,OAAO;AAAA,MAAA,CACvB;AAAA,IACH;AACA,SAAK,SAAS,IAAI,OAAO,MAAM,MAAM;AAAA,EACvC;AAAA,EAEA,IAAI,QAAgB,MAAiC;AAC7C,UAAA,UAAU,KAAK,UAAU,IAAI,GAAG,MAAM,IAAI,IAAI,EAAE;AACtD,QAAI,CAAC,SAAS;AACZ,UAAI,CAAC,KAAK,SAAS,IAAI,MAAM,GAAG;AAC9B,cAAM,IAAI,WAAW,kBAAkB,mBAAmB,MAAM,EAAE;AAAA,MACpE;AACA,YAAM,IAAI,WAAW,mBAAmB,oBAAoB,MAAM,IAAI,IAAI,EAAE;AAAA,IAC9E;AACO,WAAA;AAAA,EACT;AAAA,EAEA,UAA2B;AACzB,WAAO,CAAC,GAAG,KAAK,SAAS,OAAQ,CAAA,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAAA,EAChF;AAAA,EAEA,WAAgC;AAC9B,WAAO,CAAC,GAAG,KAAK,UAAU,OAAA,CAAQ,EAAE;AAAA,MAAK,CAAC,GAAG,MAC3C,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,GAAG,cAAc,GAAG,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE;AAAA,IAAA;AAAA,EAEjE;AAAA,EAEA,SAAS,QAAgB,MAAuC;AAC9D,UAAM,UAAU,KAAK,IAAI,QAAQ,IAAI;AAC9B,WAAA;AAAA,MACL,gBAAgB;AAAA,MAChB,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,aAAa,QAAQ,eAAe,QAAQ;AAAA,MAC5C,QAAQ,KAAK,OAAO,OAAO;AAAA,MAC3B,gBAAgB;AAAA,MAChB,sBAAsB,eAAe;AAAA,QAAO,CAAC,WAC3C,0BAA0B,IAAI,OAAO,IAAI;AAAA,MAC3C;AAAA,MACA,aAAa,QAAQ,eAAe,CAAC;AAAA,MACrC,UAAU,QAAQ,WAAW,CAAA,GAAI,IAAI,CAAC,YAAY;AAAA,QAChD,GAAG;AAAA,QACH,UAAU,eAAe,MAAM;AAAA,MAAA,EAC/B;AAAA,MACF,cAAc,QAAQ;AAAA,MACtB,eAAe,QAAQ;AAAA,MACvB,uBAAuB,QAAQ;AAAA,MAC/B,QAAQ,QAAQ;AAAA,MAChB,YAAY,QAAQ;AAAA,MACpB,kBAAkB,QAAQ;AAAA,MAC1B,WAAW,QAAQ,cAAc,QAAQ,kBAAkB,YAAY;AAAA,MACvE,gBAAgB,QAAQ,iBAAiB,QAAQ;AAAA,MACjD,UAAU,QAAQ,YAAY,CAAC;AAAA,IAAA;AAAA,EAEnC;AAAA,EAEA,OAAO,SAAoC;AACzC,UAAM,eAAe,QAAQ,eAAe,CAAI,GAAA;AAAA,MAAI,CAAC,aACnD,SAAS,aAAa,QAAQ,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI;AAAA,IAAA;AAExE,UAAM,WAAW,QAAQ,WAAW,CAAI,GAAA;AAAA,MAAI,CAAC,WAC3C,OAAO,SAAS,YACZ,MAAM,OAAO,IAAI,MACjB,MAAM,OAAO,IAAI,KAAK,OAAO,YAAY,OAAO,IAAI;AAAA,IAAA;AAE1D,WAAO,CAAC,WAAW,QAAQ,QAAQ,QAAQ,MAAM,GAAG,aAAa,GAAG,OAAO,EAAE,KAAK,GAAG;AAAA,EACvF;AAAA,EAEA,qBAAqB,QAA4B;AAC/C,QAAI,OAAO,UAAU;AAAG,aAAO,KAAK,UAAU,IAAI,CAACU,YAAWA,QAAO,IAAI;AACzE,UAAM,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC;AAC1C,QAAI,CAAC;AAAQ,aAAO,KAAK,UAAU,IAAI,CAAC,cAAc,UAAU,IAAI;AAChE,QAAA,OAAO,WAAW,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,IAAI,GAAG;AAC/C,aAAA,OAAO,SAAS,IAAI,CAACC,aAAYA,SAAQ,IAAI,EAAE;IACxD;AACM,UAAA,OAAO,OAAO,CAAC;AACf,UAAA,UAAU,KAAK,UAAU,IAAI,GAAG,OAAO,IAAI,IAAI,IAAI,EAAE;AAC3D,QAAI,CAAC;AAAgB,aAAA,OAAO,SAAS,IAAI,CAAC,cAAc,UAAU,IAAI,EAAE;AACjE,WAAA;AAAA,MACL,IAAI,QAAQ,WAAW,CAAA,GAAI,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,EAAE;AAAA,MAC7D;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,KAAK;AAAA,EACT;AAAA,EAEA,oBAAoB,QAAgB,YAAqC;AACvE,QAAI,CAAC,WAAW,KAAK,WAAW,IAAI,GAAG;AACrC,YAAM,IAAI,MAAM,sBAAsB,MAAM,IAAI,WAAW,IAAI,EAAE;AAAA,IACnE;AACM,UAAA,cAAc,WAAW,eAAe;AACxC,UAAA,sCAAsB;AAC5B,eAAW,cAAc,aAAa;AACpC,UAAI,gBAAgB,IAAI,WAAW,IAAI,GAAG;AAClC,cAAA,IAAI,MAAM,wBAAwB,WAAW,IAAI,OAAO,MAAM,IAAI,WAAW,IAAI,EAAE;AAAA,MAC3F;AACgB,sBAAA,IAAI,WAAW,IAAI;AAAA,IACrC;AACM,UAAA,kCAAkB;AACxB,eAAW,UAAU,WAAW,WAAW,CAAA,GAAI;AACzC,UAAA,CAAC,WAAW,KAAK,OAAO,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,GAAG;AACjE,cAAM,IAAI;AAAA,UACR,iCAAiC,OAAO,IAAI,OAAO,MAAM,IAAI,WAAW,IAAI;AAAA,QAAA;AAAA,MAEhF;AACY,kBAAA,IAAI,OAAO,IAAI;AAAA,IAC7B;AACK,SAAA,oBAAoB,WAAW,aAAa,GAAG,MAAM,IAAI,WAAW,IAAI,QAAQ;AAChF,SAAA,oBAAoB,WAAW,cAAc,GAAG,MAAM,IAAI,WAAW,IAAI,SAAS;AAAA,EACzF;AAAA,EAEA,oBAAoB,QAAoB,OAAqB;AAC3D,QAAI,OAAO,SAAS;AAAU,YAAM,IAAI,MAAM,GAAG,KAAK,2BAA2B;AAAA,EACnF;AACF;AC/MA,MAAM,eACJ;AAEK,MAAM,YAAY;AAAA,EAKvB,YAAY,MAAc,QAAQ,KAAK;AAFvC,SAAA,WAAqB;AAGnB,SAAK,OAAO;AACZ,SAAK,QAAQ;AAAA,EACf;AAAA,EALA;AAAA,EAOA,MAAM,OAA0B;AAC1B,QAAA;AACG,WAAA,YAAY,MAAM,UAAU,aAAa,KAAK,IAAI,GACpD,MAAM,OAAO,EACb,IAAI,CAAC,SAAS,KAAK,KAAM,CAAA,EACzB,OAAO,OAAO,EACd,MAAM,CAAC,KAAK,KAAK;AAAA,aACb,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,UAAU;AAAS,cAAA;AAC3C,WAAK,WAAW;IAClB;AACO,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAEA,UAAoB;AACX,WAAA,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAEA,MAAM,IAAI,MAAc,SAA4C;AAC9D,QAAA,CAAC,qBAAqB,MAAM,OAAO;AAAG;AAC1C,QAAI,KAAK,SAAS,GAAG,EAAE,MAAM;AAAW,WAAA,SAAS,KAAK,IAAI;AAC1D,SAAK,WAAW,KAAK,SAAS,MAAM,CAAC,KAAK,KAAK;AAC/C,UAAMV,QAAO;AACb,UAAMA,MAAK,MAAMA,MAAK,KAAK,QAAQ,KAAK,IAAI,GAAG,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AACzE,UAAAA,MAAK,cAAc,KAAK,MAAM,GAAG,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,GAAM,EAAE,MAAM,IAAA,CAAO;AACpF,QAAIA,MAAK,aAAa;AAAW,YAAMA,MAAK,MAAM,KAAK,MAAM,GAAK;AAAA,EACpE;AACF;AAEgB,SAAA,qBAAqB,MAAc,SAAsC;AACnF,MAAA,aAAa,KAAK,IAAI;AAAU,WAAA;AACpC,MAAI,CAAC;AAAgB,WAAA;AACrB,MAAI,OAAO,OAAO,QAAQ,YAAY,cAAc,EAAE,EAAE,KAAK,CAAC,WAAW,OAAO,MAAM,GAAG;AAChF,WAAA;AAAA,EACT;AACI,MAAA;AACA,MAAA;AACF,aAAS,eAAe,IAAI;AAAA,EAAA,QACtB;AACC,WAAA;AAAA,EACT;AACA,QAAM,gBAAgB,IAAI;AAAA,KACvB,QAAQ,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,OAAO,MAAM,EAAE,QAAQ,CAAC,WAAW;AAAA,MAC5E,KAAK,OAAO,IAAI;AAAA,MAChB,eAAe,MAAM;AAAA,IAAA,CACtB;AAAA,EAAA;AAEH,SAAO,CAAC,OAAO,KAAK,CAAC,UAAU,cAAc,IAAI,MAAM,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E;ACjDA,eAAsB,QAAQ,SAAqC;AACjE,QAAM,UAAU,IAAI,YAAY,QAAQ,YAAY,aAAa;AAC3D,QAAA,eAAe,MAAM,QAAQ;AAC7B,QAAA,YAAY,CAAC,SAAqC;AACtD,UAAM,WAAW,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK;AAC/C,UAAM,SAAS,KAAK,MAAM,GAAG,KAAK,SAAS,SAAS,MAAM;AACtD,QAAA;AACA,QAAA;AACF,eAAS,eAAe,MAAM;AAAA,IAAA,QACxB;AACN,eAAS,OAAO,OAAO,MAAM,KAAK,EAAE,OAAO,OAAO;AAAA,IACpD;AACA,WAAO,KAAK,QAAQ;AACpB,UAAM,aAAa,QAAQ,SAAS,qBAAqB,MAAM;AACxD,WAAA,CAAC,WAAW,OAAO,CAAC,cAAc,UAAU,WAAW,QAAQ,CAAC,GAAG,QAAQ;AAAA,EAAA;AAEhF,MAAA;AACE,QAAA,WAA2B,QAAQ,EAAE,iBAAiB;AAAA,IAC1D,SAAS,CAAC,GAAG,YAAY,EAAE,QAAQ;AAAA,IACnC,aAAa,QAAQ;AAAA,IACrB;AAAA,IACA,UAAU,MAAM;AACV,UAAA;AAAS,gBAAQ,MAAM;AAAA,WACtB;AACH,iBAAS,MAAM,MAAM;AACrB,iBAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,EAAA,CACD;AACK,QAAA,SAAS,WAAW,QAAQ,MAAM;AACxC,WAAS,MAAM,0EAA0E;AACzF,WAAS,UAAU,MAAM;AACzB,WAAS,OAAO;AAEZ,MAAA;AACF,qBAAiB,WAAW,UAAU;AAC9B,YAAA,OAAO,QAAQ;AACrB,UAAI,CAAC,MAAM;AACT,iBAAS,OAAO;AAChB;AAAA,MACF;AACI,UAAA,KAAK,WAAW,GAAG,GAAG;AACxB,cAAM,aAAa,MAAM,cAAc,MAAM,SAAS,OAAO;AACzD,YAAA;AAAY;AAChB,iBAAS,OAAO;AAChB;AAAA,MACF;AAEI,UAAA;AACA,UAAA;AACF,iBAAS,eAAe,IAAI;AAAA,eACrB,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACvC,iBAAS,MAAM,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAC5D,iBAAS,OAAO;AAChB;AAAA,MACF;AACI,UAAA;AACA,UAAA;AACF,YAAI,OAAO,UAAU;AAAa,oBAAA,QAAQ,SAAS,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAAA,MAAA,QACrE;AACI,kBAAA;AAAA,MACZ;AACM,YAAA,QAAQ,IAAI,MAAM,OAAO;AAC/B,gBAAU,IAAI;AACV,UAAA;AACF,cAAM,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,eACrC,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACvC,iBAAS,MAAM,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAAA,MAAA,UAC5D;AACU,kBAAA;AAAA,MACZ;AACA,eAAS,OAAO;AAAA,IAClB;AAAA,EAAA,UACA;AACA,aAAS,MAAM;AAAA,EACjB;AACF;AAEA,eAAe,cACb,MACA,SACA,SACkB;AAClB,QAAM,UAAU,KAAK,MAAM,OAAO,CAAC,EAAE,CAAC;AACtC,UAAQ,SAAS;AAAA,IACf,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd;AAAA,UACE;AAAA,UACA;AAAA,UACA,YAAY,QAAQ,SAAS,QAAU,EAAA,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,IAAI,CAAC;AAAA,UAC9E;AAAA,QAAA,EACA,KAAK,IAAI;AAAA,MAAA;AAEb;AAAA,IACF,KAAK;AACH,YAAM,QAAQ,EAAE,OAAO,GAAG,KAAK,UAAU,oBAAoB,QAAQ,MAAM,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AAC1F;AAAA,IACF,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd,GAAG,KAAK,UAAU,QAAQ,QAAQ,eAAe,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA;AAAA,MAAA;AAErE;AAAA,IACF,KAAK;AACH,YAAM,QAAU,EAAA;AAAA,QACd,GAAG,QAAQ,QAAA,EAAU,IAAI,CAAC,OAAO,UAAU,GAAG,QAAQ,CAAC,KAAK,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,MAAA;AAEjF;AAAA,IACF,KAAK;AACC,UAAA;AACI,cAAA,QAAQ,QAAQ;AAChB,cAAA,QAAU,EAAA,OAAO,uBAAuB;AAAA,eACvC,OAAO;AACR,cAAA,aAAa,eAAe,KAAK;AACjC,cAAA,QAAA,EAAU,OAAO,GAAG,WAAW,IAAI,KAAK,WAAW,OAAO;AAAA,CAAI;AAAA,MACtE;AACA;AAAA,IACF;AACE,YAAM,QAAQ,EAAE,OAAO,yBAAyB,OAAO;AAAA,CAAI;AAAA,EAC/D;AACO,SAAA;AACT;AAEA,SAAS,WAAW,QAAgC;AAC5C,QAAA,UAAU,OAAO,eAAe;AAChC,QAAA,OAAO,OAAO,SAAS,OAAO,WAAW,IAAI,IAAI,OAAO,QAAQ,EAAE,OAAO;AACzE,QAAA,WAAW,OAAO,YAAY;AACpC,SAAO,WAAW,OAAO,IAAI,IAAI,IAAI,QAAQ;AAC/C;ACnJA,MAAMW,gBAAc,EAAE,MAAM,UAAmB,YAAY,IAAI,sBAAsB;AACrF,MAAMC,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAErE,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,0CAA0C;AAAA,QACrD,SAAS,CAAC,QACR,QAAQ,QAAQ;AAAA,UACd,WAAW,IAAI,UAAU;AAAA,UACzB,OAAO,IAAI,UAAU;AAAA,UACrB,iBAAiB,IAAI,UAAU,iBAAiB;AAAA,UAChD,gBAAgB,IAAI,UAAU;AAAA,UAC9B,MAAM,IAAI,WAAW;AAAA,QAAA,CACtB;AAAA,MACL;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,kDAAkD;AAAA,QAC7D,SAAS,CAAC,QAAQ;AACZ,cAAA,CAAC,IAAI,SAAS;AAChB,kBAAM,IAAI,UAAU,kBAAkB,wCAAwC,CAAC;AAAA,UACjF;AACA,iBAAO,QAAQ,QAAQ,IAAI,QAAQ,OAAQ,CAAA;AAAA,QAC7C;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;ACtCA,MAAMD,gBAAc;AAAA,EAClB,MAAM;AAAA,EACN,YAAY,CAAC;AAAA,EACb,sBAAsB;AACxB;AACA,MAAMC,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAErE,SAAS,kBAAkB,UAA4C;AACrE,SAAA,CAAC,oBAAoB,QAAQ,GAAG,sBAAsB,uBAAuB,QAAQ,CAAC;AAC/F;AAEA,SAAS,oBAAoB,UAA0C;AAC9D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,sBAAsB;AAAA,QACjC,SAAS,MACP,QAAQ,QAAQ;AAAA,UACd,SAAS,SAAS,QAAU,EAAA,IAAI,CAAC,YAAY;AAAA,YAC3C,MAAM,OAAO;AAAA,YACb,SAAS,OAAO;AAAA,YAChB,UAAU,OAAO,SAAS,IAAI,CAAC,aAAa;AAAA,cAC1C,MAAM,QAAQ;AAAA,cACd,SAAS,QAAQ;AAAA,YAAA,EACjB;AAAA,UAAA,EACF;AAAA,QAAA,CACH;AAAA,MACL;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,iBAAiB,aAAa,cAAc;AAAA,UACpD,EAAE,MAAM,eAAe,aAAa,YAAY;AAAA,QAClD;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,eAAe,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC9C,aAAa,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC9C;AAAA,UACA,UAAU,CAAC,iBAAiB,aAAa;AAAA,UACzC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,wCAAwC;AAAA,QACnD,SAAS,CAAC,MAAM,UACd,QAAQ;AAAA,UACN,SAAS,SAAS,OAAO,MAAM,aAAa,GAAG,OAAO,MAAM,WAAW,CAAC;AAAA,QAC1E;AAAA,MACJ;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,qBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAaD;AAAAA,QACb,cAAcC;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,qBAAqB;AAAA,QAChC,SAAS,OAAO,SAAS;AAAA,UACvB,QAAQ,MAAM,IAAI,YAAY,WAAW;AAAA,UACzC,UAAU,MAAM,IAAI,YAAY,aAAa;AAAA,QAAA;AAAA,MAEjD;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB,UAAU,OAAO;AAAA,QAChF,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACpC,cAAc,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC/C;AAAA,UACA,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,cAAcC,iBAAe,MAAM,YAAY;AAC/C,gBAAA,QAAQ,cACV,MAAM,IAAI,YAAY,YAAY,WAAW,IAC7C,MAAM,IAAI,YAAY,WAAW;AACrC,cAAI,CAAC;AAAO,kBAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AACnF,gBAAA,MAAMA,iBAAe,MAAM,GAAG;AACpC,cAAI,CAAC;AAAK,mBAAO,EAAE,MAAM;AACzB,cAAI,CAAC,OAAO,OAAO,OAAO,GAAG,GAAG;AAC9B,kBAAM,IAAI,WAAW,wBAAwB,gCAAgC,GAAG,EAAE;AAAA,UACpF;AACA,iBAAO,EAAE,KAAK,OAAQ,MAA6C,GAAG,EAAE;AAAA,QAC1E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,QAC/D,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,uBAAuB,MAAM,UAAU,UAAU,KAAK;AAAA,UACpF;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACpC,OAAO,EAAE,MAAM,SAAS;AAAA,YACxB,cAAc,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC/C;AAAA,UACA,UAAU,CAAC,OAAO,OAAO;AAAA,UACzB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcD;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,MAAM,OAAO,MAAM,GAAG;AACtB,gBAAA,WAAW,OAAO,MAAM,KAAK;AAC7B,gBAAA,cAAcC,iBAAe,MAAM,YAAY;AACrD,cAAI,aAAa;AACf,gCAAoB,WAAW;AACzB,kBAAA,UAAU,MAAM,IAAI,YAAY,YAAY,WAAW,KAAK,EAAE,gBAAgB;AACpE,4BAAA,SAAS,KAAK,QAAQ;AACtC,kBAAM,IAAI,YAAY,aAAa,aAAa,OAAO;AAChD,mBAAA;AAAA,cACL,SAAS;AAAA,cACT;AAAA,cACA,OAAQ,QAA+C,GAAG;AAAA,YAAA;AAAA,UAE9D;AACA,gBAAM,SAAS,MAAM,IAAI,YAAY,WAAW;AACjC,yBAAA,QAAQ,KAAK,QAAQ;AAC9B,gBAAA,IAAI,YAAY,YAAY,MAAM;AACxC,iBAAO,EAAE,SAAS,MAAM,KAAK,OAAQ,OAA8C,GAAG;QACxF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,gBAAgB,aAAa,gBAAgB;AAAA,QACnE,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UAC7D,UAAU,CAAC,cAAc;AAAA,UACzB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcD;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,+BAA+B;AAAA,QAC1C,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,cAAc,OAAO,MAAM,YAAY;AAC7C,cAAI,CAAC,MAAM,IAAI,YAAY,YAAY,WAAW,GAAG;AACnD,kBAAM,IAAI,WAAW,qBAAqB,sBAAsB,WAAW,EAAE;AAAA,UAC/E;AACA,gBAAM,SAAS,MAAM,IAAI,YAAY,WAAW;AAChD,iBAAO,kBAAkB;AACnB,gBAAA,IAAI,YAAY,YAAY,MAAM;AACjC,iBAAA,EAAE,iBAAiB;QAC5B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY;AAAA,UAC7C,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,uDAAuD;AAAA,QAClE,SAAS,OAAO,KAAK,WAAW;AAAA,UAC9B,OAAO;AAAA,UACP,gBAAgB,MAAM,IAAI,YAAY,aAAgB,GAAA;AAAA,UACtD,GAAI,MAAM,YAAY,EAAE,WAAW,oBAAoB,IAAI,MAAM,EAAE,IAAI,CAAC;AAAA,QAAA;AAAA,MAE5E;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,uBAAuB,UAA0C;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,UAAU;AAAA,YACV,MAAM,CAAC,QAAQ,OAAO,MAAM;AAAA,UAC9B;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,OAAO,MAAM,IAAI;AAAA,UACvE,UAAU,CAAC,OAAO;AAAA,UAClB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,GAAG,QAAQ,EAAE,MAAM,WAAW;AAAA,UACpE,UAAU,CAAC,SAAS,QAAQ;AAAA,UAC5B,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,wDAAwD;AAAA,QACnE,SAAS,CAAC,MAAM,UAAU;AAClB,gBAAA,QAAQ,OAAO,MAAM,KAAK;AACzB,iBAAA,QAAQ,QAAQ,EAAE,OAAO,QAAQ,iBAAiB,UAAU,KAAK,EAAA,CAAG;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,QAAoB,KAAa,OAAqB;AAC5E,MAAI,QAAQ,mBAAmB;AAC7B,wBAAoB,KAAK;AACzB,WAAO,kBAAkB;AAAA,EAAA,WAChB,QAAQ,UAAU;AACpB,WAAA,SAAS,YAAY,KAAK;AAAA,EAAA,OAC5B;AACC,UAAA,iBAAiB,yCAAyC,GAAG,EAAE;AAAA,EACvE;AACF;AAEA,SAAS,gBAAgB,SAAwB,KAAa,OAAqB;AACjF,MAAI,QAAQ,UAAU,QAAQ,cAAc,QAAQ;AAAY,YAAQ,GAAG,IAAI;AAAA,WACtE,QAAQ,oBAAoB;AAC/B,QAAA,UAAU,aAAa,UAAU,YAAY;AAC/C,YAAM,iBAAiB,8CAA8C;AAAA,IACvE;AACA,YAAQ,mBAAmB;AAAA,EAAA,WAClB,QAAQ;AAAkB,YAAA,SAAS,YAAY,KAAK;AAAA;AACpD,UAAA,iBAAiB,0CAA0C,GAAG,EAAE;AAC7E;AAEA,SAAS,YAAY,OAA4D;AAC3E,MAAA,CAAC,CAAC,QAAQ,SAAS,SAAS,QAAQ,KAAK,EAAE,SAAS,KAAK,GAAG;AACxD,UAAA,iBAAiB,0BAA0B,KAAK,EAAE;AAAA,EAC1D;AACO,SAAA;AACT;AAEA,SAASC,iBAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,QAAQ,QAAQ;AACtD;AAEA,SAAS,iBAAiB,UAA2B,OAAuB;AACpE,QAAA,UAAU,SAAS,QAAA,EAAU,IAAI,CAAC,WAAW,OAAO,IAAI,EAAE,KAAK,GAAG;AACxE,QAAM,WAAW,SAAS,SAAS,EAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI,EAAE,EAAE;AAAA,IACzF;AAAA,EAAA;AAEF,MAAI,UAAU,QAAQ;AACb,WAAA;AAAA,qDAA8E,OAAO;AAAA,IAAQ,QAAQ;AAAA;AAAA,EAC9G;AACA,MAAI,UAAU,OAAO;AACZ,WAAA;AAAA,wBAA2C,OAAO;AAAA,IAA8B,QAAQ;AAAA;AAAA,EACjG;AACO,SAAA;AAAA,UAAkC,eAAe;AAAA,gCAAkD,OAAO,SAAS,2BAA2B;AAAA;AAAA;AAAA;AAAA,IAA2D,QAAQ;AAAA;AAC1N;ACnVO,SAASC,aAAW,KAIzB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,eAAsB,YACpB,KACA,SACA,QACA,QACY;AACR,MAAA;AACK,WAAA,MAAM,IAAI,QAAQ,KAAQ,SAAS,QAAQ,QAAQA,aAAW,GAAG,CAAC;AAAA,WAClE,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC/D,UAAA,SAAS,QAAQ,MAAM,+CAA+C;AACxE,QAAA;AAAQ,YAAM,IAAI,UAAU,OAAO,CAAC,GAAG,OAAO;AAC5C,UAAA;AAAA,EACR;AACF;AAEgB,SAAAC,eAAa,OAAgB,OAAwC;AAC/E,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,aAAa;AAAA,EAC7F;AACO,SAAA;AACT;AAEgB,SAAAC,eAAa,OAAgB,OAAuB;AAClE,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,qBAAqB,aAAa;AAAA,EAC5F;AACO,SAAA;AACT;AAEgB,SAAA,YAAY,OAAgC,KAAiC;AACrF,QAAA,QAAQ,MAAM,GAAG;AAChB,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEgB,SAAA,oBAAoB,OAAgC,KAAqB;AACjF,QAAA,QAAQ,YAAY,OAAO,GAAG;AACpC,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,cAAc;AAClE,SAAA;AACT;AAEgB,SAAA,eAAe,OAAgB,KAAiC;AAC9E,MAAI,UAAU;AAAkB,WAAA;AAChC,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS;AAAU,WAAA;AACnF,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,wCAAwC;AAAA,EACzF;AACI,MAAA,QAAQ,KAAK,KAAK,GAAG;AACjBC,UAAAA,gBAAe,OAAO,KAAK;AAC7B,QAAA,OAAO,cAAcA,aAAY;AAAUA,aAAAA;AAAAA,EACjD;AACM,QAAA,eAAe,KAAK,MAAM,KAAK;AACrC,MAAI,CAAC,OAAO,SAAS,YAAY,GAAG;AAClC,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,wCAAwC;AAAA,EACzF;AACO,SAAA;AACT;AAEO,SAAS,cAAc,OAA0B;AACtD,QAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,OAAO,UAAU,WAAW,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5F,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC;AAC9E;ACxEA,MAAMC,kBAAgB;AACtB,MAAMP,gBAA0B,EAAE,MAAM,UAAU,YAAY,IAAI,sBAAsB;AACxF,MAAM,eAA2B;AAAA,EAC/B,MAAM;AAAA,EACN,YAAY;AAAA,IACV,SAAS,EAAE,MAAM,SAAS;AAAA,IAC1B,eAAe,EAAE,MAAM,SAAS;AAAA,IAChC,iBAAiB,EAAE,MAAM,SAAS;AAAA,IAClC,QAAQ,EAAE,MAAM,SAAS;AAAA,EAC3B;AAAA,EACA,sBAAsB;AACxB;AAEO,SAAS,qBAAoC;AAC3C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAaA;AAAAA,QACb,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,SAAS,aAAa;AAAA,UACpC,UAAU,CAAC,SAAS;AAAA,UACpB,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,4CAA4C;AAAA,QACvD,SAAS,OAAO,QAAQ;AACtB,gBAAM,CAAC,QAAQQ,QAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,YAC1C,YAAY,KAAKD,iBAAe,iBAAiB,CAAA,CAAE;AAAA,YACnD,YAAY,GAAG;AAAA,UAAA,CAChB;AACD,iBAAO,EAAE,GAAGH,eAAa,QAAQ,eAAe,GAAG,SAAAI,SAAQ;AAAA,QAC7D;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAaR;AAAAA,QACb,cAAc;AAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,qBAAqB;AAAA,QAChC,SAAS,OAAO,QAAQ,MAAM,YAAY,GAAG;AAAA,MAC/C;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,YAAY,KAAuD;AACzE,SAAAI;AAAAA,IACL,MAAM,YAAY,KAAKG,iBAAe,2BAA2B,CAAA,CAAE;AAAA,IACnE;AAAA,EAAA;AAEJ;ACjEA,MAAM,eAAe;AACrB,MAAMN,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,MAAM;AAC7E,MAAM,YAAwB;AAAA,EAC5B,MAAM;AAAA,EACN,YAAY,EAAE,KAAK,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,EACpD,UAAU,CAAC,KAAK;AAAA,EAChB,sBAAsB;AACxB;AAEO,SAAS,2BAA0C;AACjD,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,QAC/D,aAAa;AAAA,QACb,cAAc;AAAA,UACZ,GAAGA;AAAAA,UACH,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,SAAS;AAAA,YACtB,OAAO,EAAE,MAAM,SAAS;AAAA,YACxB,SAAS,EAAE,MAAM,UAAU;AAAA,YAC3B,MAAM,EAAE,MAAM,SAAS;AAAA,UACzB;AAAA,UACA,UAAU,CAAC,OAAO,SAAS,WAAW,MAAM;AAAA,QAC9C;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,MAAM,OAAO,MAAM,GAAG;AAC5B,gBAAM,SAAS,MAAM,iBAA0B,KAAK,kBAAkB,EAAE,KAAK;AAC7E,cAAI,WAAW,MAAM;AACnB,kBAAM,IAAI;AAAA,cACR;AAAA,cACA,gCAAgC,GAAG;AAAA,YAAA;AAAA,UAEvC;AACI,cAAA,CAAC,cAAc,MAAM;AAAGQ,8BAAgB,gBAAgB;AACrD,iBAAA,EAAE,KAAK,OAAO,OAAO,OAAO,SAAS,OAAO,SAAS,MAAM,OAAO,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,OAAO,aAAa,qCAAqC,UAAU,MAAM;AAAA,QACnF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW;AAAA,UACtC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,GAAGR;AAAAA,UACH,YAAY;AAAA,YACV,KAAK,EAAE,MAAM,SAAS;AAAA,YACtB,OAAO,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,WAAW;AAAA,UACpD;AAAA,UACA,UAAU,CAAC,OAAO,OAAO;AAAA,QAC3B;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AAC7B,gBAAM,MAAM,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM;AACxD,gBAAM,SAAS,MAAM,iBAA0B,KAAK,mBAAmB,EAAE,KAAK;AAC9E,cAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,OAAO,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAC/EQ,8BAAgB,iBAAiB;AAAA,UACnC;AACO,iBAAA,EAAE,KAAK,OAAO;QACvB;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,eAAe;AAAA,QACf,gBAAgB;AAAA,MAAA,CACjB;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,kBAAkB,MAAM,UAAU,UAAU,KAAK;AAAA,IACjF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC;AAAA,MACA,UAAU,CAAC,OAAO,OAAO;AAAA,MACzB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGR;AAAAA,MACH,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY;AAAA,MACpE,UAAU,CAAC,OAAO,SAAS;AAAA,IAC7B;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,mEAAmE;AAAA,IAC9E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AACtB,YAAA,iBAAiB,KAAK,kBAAkB,EAAE,KAAK,OAAO,OAAO,MAAM,KAAK,EAAA,CAAG;AAC1E,aAAA,EAAE,KAAK,SAAS;IACzB;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC;AAAA,MACA,UAAU,CAAC,OAAO,MAAM;AAAA,MACxB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY;AAAA,MACpE,UAAU,CAAC,OAAO,SAAS;AAAA,IAC7B;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,6EAA6E;AAAA,IACxF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AAC5B,YAAM,QAAQ,MAAM,cAAc,OAAO,MAAM,IAAI,CAAC;AACpD,UAAI,CAAC;AAAa,cAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAC5F,YAAM,iBAAiB,KAAK,kBAAkB,EAAE,KAAK,OAAO;AACrD,aAAA,EAAE,KAAK,SAAS;IACzB;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAgB,SAMH;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,CAAC,EAAE,MAAM,OAAO,aAAa,qBAAqB;AAAA,IAC/D,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,UAAU,UAAU,KAAK;AAAA,IAClF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACpC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC;AAAA,MACA,UAAU,CAAC,OAAO,OAAO;AAAA,MACzB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,KAAK,EAAE,MAAM,SAAS;AAAA,QACtB,CAAC,QAAQ,cAAc,GAAG,EAAE,MAAM,UAAU;AAAA,MAC9C;AAAA,MACA,UAAU,CAAC,OAAO,QAAQ,cAAc;AAAA,IAC1C;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,yBAAyB,QAAQ,IAAI,qCAAqC;AAAA,IACrF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,MAAM,OAAO,MAAM,GAAG;AACtB,YAAA,iBAAiB,KAAK,QAAQ,QAAQ;AAAA,QAC1C;AAAA,QACA,CAAC,QAAQ,aAAa,GAAG,OAAO,MAAM,KAAK;AAAA,MAAA,CAC5C;AACD,aAAO,EAAE,KAAK,CAAC,QAAQ,cAAc,GAAG,KAAK;AAAA,IAC/C;AAAA,EAAA;AAEJ;AAEA,eAAe,iBACb,KACA,QACA,QACY;AACZ,SAAO,MAAM,IAAI,QAAQ,KAAQ,cAAc,QAAQ,QAAQ;AAAA,IAC7D,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA,CACb;AACH;AAEA,eAAe,cAAc,MAA+B;AACtD,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,WACjC,OAAO;AACd,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8BAA8B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAAA;AAAA,EAExF;AACF;AAEA,SAAS,cAAc,OAA6D;AAClF,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAU,WAAA;AACxE,QAAMb,UAAS;AACf,SAAO,OAAOA,QAAO,UAAU,YAAY,OAAO,cAAcA,QAAO,OAAO,KAC5E,OAAOA,QAAO,OAAO,KAAK;AAC9B;AAEA,SAASqB,kBAAgB,QAAuB;AAC9C,QAAM,IAAI;AAAA,IACR;AAAA,IACA,kDAAkD,MAAM;AAAA,IACxD;AAAA,EAAA;AAEJ;AC/PA,MAAMhB,YAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAMiB,aAAW,CAAC,MAAc,OAAe,UAAU,KAAK,SAAS,MAAM,EAAE;AAC/E,MAAMd,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,aAAa;AACnB,MAAM,sBAAsB;AAC5B,MAAM,wBAAwB;AAC9B,MAAM,qBAAqB;AAC3B,MAAM,uBAAuB;AAC7B,MAAM,0BAA0B;AAChC,MAAM,wBAAwB,KAAK,OAAO;AACnC,MAAM,mBAAmB;AAEhC,MAAM,YAAY,IAAI,YAAY,GAAG;AACrC,SAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACrD,MAAI,QAAQ;AACH,WAAA,MAAM,GAAG,MAAM,GAAG;AAAO,YAAS,UAAU,KAAM,QAAQ,IAAI,aAAa;AAC1E,YAAA,KAAK,IAAI,UAAU;AAC/B;AA4CA,eAAsB,WAAW,MAAmC;AAC5D,QAAA,OAAO,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AACtD,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,MAAM;AACV,MAAI,OAAO;AACP,MAAA;AACF,UAAM,SAAS,IAAI,WAAW,MAAM,IAAI;AACxC,WAAO,MAAM;AACX,YAAM,OAAO,MAAM,KAAK,KAAK,MAAM;AACnC,UAAI,SAAS;AAAM;AACnB,YAAM,QAAQ,OAAO,SAAS,GAAG,IAAI;AACrC,UAAI,OAAO,KAAK;AACV,YAAA,YAAY,KAAK,KAAK;AACpB,cAAA;AACJ,UAAA,CAAC,OAAO,cAAc,IAAI;AAAS,cAAA,IAAI,WAAW,kBAAkB,mBAAmB;AAAA,IAC7F;AAAA,EAAA,UACA;AACA,UAAM,KAAK;EACb;AACO,SAAA,EAAE,MAAM,QAAQ,IAAI,aAAa,QAAQ,MAAM,gBAAgB;AACxE;AAEO,SAAS,YAAY,OAA2B;AACrD,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,OAAO,KAAK;AAChB,SAAO,IAAI;AACb;AAEsB,eAAA,yBACpB,WACA,aACe;AACf,QAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,SAAS;AACzC,QAAA,SAAS,MAAM,kBAAkB,IAAI;AAC3C,QAAM,UAAU,GAAG,WAAW,QAAQ,OAAO,WAAY,CAAA;AACzD,QAAM,MAAM,MAAM,UAAU,KAAK,SAAS,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,IAAO,CAAA;AACnF,MAAA;AACF,eAAW,UAAU,QAAQ;AACrB,YAAA,SAAS,UAAU,MAAM;AACzB,YAAA,SAAS,KAAK,MAAM;AACtB,UAAA,OAAO,SAAS,QAAQ;AACpB,cAAA,iBAAiB,OAAO,cAAc,GAAG;AAC/C,cAAM,WAAW,aAAa,OAAO,OAAO,cAAc;AACtD,YAAA;AAAS,gBAAM,SAAS,KAAK,IAAI,WAAW,OAAO,CAAC;AAAA,MAC1D;AAAA,IACF;AACA,UAAM,SAAS,KAAK,IAAI,WAAW,aAAa,CAAC,CAAC;AAClD,UAAM,IAAI;EAAK,UACf;AACA,UAAM,IAAI;EACZ;AAEI,MAAA;AACI,UAAA,QAAQ,MAAM,kBAAkB,IAAI;AAC1C,QAAI,KAAK,UAAU,OAAO,IAAI,cAAc,CAAC,MAAM,KAAK,UAAU,MAAM,IAAI,cAAc,CAAC,GAAG;AACtF,YAAA,IAAI,UAAU,kBAAkB,iDAAiD;AAAA,IACzF;AACM,UAAA,SAAS,SAAS,WAAW;AAAA,EAAA,UACnC;AACA,UAAM,eAAe,OAAO;AAAA,EAC9B;AACF;AAEsB,eAAA,SAAS,QAAgB,aAAoC;AACjF,QAAM,QAAQ,EAAE,SAAS,QAAQ,WAAW;AAC9C;AAQsB,eAAA,UAAU,OAAmB,OAAwC;AACzF,QAAM,MAAM,MAAM,YAAY,OAAO,KAAK;AAC1C,QAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM;AACxD,QAAMe,QAAO,CAACC,SAAgB,WAC5B,QAAQ,OAAO,IAAI,SAASA,SAAQA,UAAS,MAAM,CAAC,EAAE,QAAQ,UAAU,EAAE;AAC5E,QAAM,QAAwB,CAAA;AACxB,QAAA,2BAAW;AACjB,MAAI,SAAS;AACb,SACE,SAAS,cAAc,IAAI,UAAU,IAAI,SAAS,QAAQ,SAAS,UAAU,EAAE,KAAK,OAAO,GAC3F;AACI,QAAA;AACA,QAAA;AACA,QAAA;AACA,QAAA;AACI,YAAA,SAASD,MAAK,SAAS,KAAK,CAAC,MAAM,UAAUA,MAAK,SAAS,KAAK,GAAG,IAAI;AACvE,YAAA,SAAS,GAAG,MAAM,IAAIA,MAAK,QAAQ,GAAG,CAAC,KAAKA,MAAK,QAAQ,GAAG;AAC3D,aAAA,OAAO,SAASA,MAAK,SAAS,KAAK,EAAE,EAAE,KAAA,KAAU,KAAK,CAAC;AACvD,aAAA,OAAO,SAASA,MAAK,SAAS,KAAK,CAAC,EAAE,KAAA,KAAU,KAAK,CAAC;AAAA,IAAA,QACvD;AACA,YAAA,WAAW,WAAW,+BAA+B;AAAA,IAC7D;AACA,UAAM,OAAO,OAAO,aAAa,IAAI,SAAS,GAAG,KAAK,EAAI;AACpD,UAAA,OAAO,IAAI,QAAQ,cAAc,EAAE,EAAE,QAAQ,OAAO,EAAE;AAC5D,UAAM,QAAQ,SAAS;AACnB,QAAA,CAAC,OAAO,cAAc,IAAI,KAAK,OAAO,KAAK,QAAQ,OAAO,IAAI,QAAQ;AACxE,YAAM,WAAW,WAAW,2BAA2B,GAAG,EAAE;AAAA,IAC9D;AACA,aAAS,QAAQ,KAAK,KAAK,OAAO,UAAU,IAAI;AAChD,QAAI,SAAS,QAAQ,SAAS,MAAM,SAAS;AAAM;AAEjD,QAAA,CAAC,QAAQ,KAAK,WAAW,GAAG,KAAK,aAAa,KAAK,IAAI,KAAK,KAAK,SAAS,IAAI,KAC9E,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,YAAY,OAAO,YAAY,IAAI,GACjF;AACA,YAAM,WAAW,WAAW,0BAA0B,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,IAC7E;AACA,QAAI,SAAS;AAAK;AAClB,QAAI,SAAS,KAAK;AAChB,YAAM,WAAW,WAAW,iDAAiD,IAAI,EAAE;AAAA,IACrF;AACI,QAAA,KAAK,IAAI,IAAI;AAAG,YAAM,WAAW,WAAW,wBAAwB,IAAI,EAAE;AAC9E,SAAK,IAAI,IAAI;AACb,UAAM,KAAK,EAAE,MAAM,aAAa,OAAO,QAAW,GAAG,OAAO,IAAI,MAAM,OAAO,QAAQ,IAAI,GAAG;AAAA,EAC9F;AACO,SAAA;AACT;AAEA,eAAe,YAAY,OAAmB,OAAoC;AAC1E,QAAA,SAAS,IAAI,eAA2B;AAAA,IAC5C,MAAM,YAAY;AAChB,iBAAW,QAAQ,KAAK;AACxB,iBAAW,MAAM;AAAA,IACnB;AAAA,EACD,CAAA,EAAE;AAAA,IACD,IAAI,oBAAoB,MAAM;AAAA,EAAA;AAEhC,QAAM,SAAuB,CAAA;AAC7B,MAAI,OAAO;AACP,MAAA;AACF,qBAAiB,SAAS,QAAQ;AAChC,cAAQ,MAAM;AACd,UAAI,OAAO;AAAa,cAAA,WAAW,UAAU,uCAAuC;AACpF,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,WACO,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AAChC,UAAA,WAAW,eAAe,oCAAoC;AAAA,EACtE;AACM,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,MAAI,WAAW;AACf,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,QAAQ;AAC1B,gBAAY,MAAM;AAAA,EACpB;AACO,SAAA;AACT;AAEsB,eAAA,eACpB,aACA,SACe;AACX,MAAA,QAAQ,SAAS,kBAAkB;AAC/B,UAAA,IAAI,WAAW,oBAAoB,gCAAgC;AAAA,EAC3E;AACM,QAAA,4BAAY;AAClB,QAAM,WAAW,CAAA;AAGjB,aAAW,UAAU,SAAS;AAC5B,yBAAqB,OAAO,IAAI;AAC5B,QAAA,MAAM,IAAI,OAAO,IAAI;AAAG,YAAM,WAAW,aAAa,oBAAoB,OAAO,IAAI,EAAE;AACrF,UAAA,IAAI,OAAO,IAAI;AACrB,QAAK,OAAO,UAAU,YAAgB,OAAO,SAAS,SAAY;AAChE,YAAM,IAAI,MAAM,cAAc,OAAO,IAAI,gCAAgC;AAAA,IAC3E;AACM,UAAA,SAAS,OAAO,QAClB;AAAA,MACA,MAAM,OAAO,MAAM;AAAA,MACnB,QAAQ,YAAY,OAAO,KAAK;AAAA,MAChC,OAAO,MAAM,OAAO,KAAK;AAAA,IAEzB,IAAA,MAAM,WAAW,OAAO,IAAK;AACjC,aAAS,KAAK;AAAA,MACZ,GAAG;AAAA,MACH,WAAW,IAAI,YAAA,EAAc,OAAO,OAAO,IAAI;AAAA,MAC/C;AAAA,MACA,QAAQ;AAAA,MACR,OAAO,OAAO,OAAO;AAAA,IAAA,CACtB;AAAA,EACH;AAEM,QAAA,QAAA,EAAU,MAAMlB,UAAQ,WAAW,GAAG,EAAE,WAAW,KAAA,CAAM;AAC/D,QAAM,SAAS,MAAM,UAAU,KAAK,aAAa,EAAE,WAAW,MAAM,OAAO,MAAM,MAAM,IAAO,CAAA;AAC9F,MAAI,SAAS;AACb,QAAM,iBAA+B,CAAA;AACjC,MAAA;AACF,eAAW,UAAU,UAAU;AAC7B,aAAO,SAAS;AAChB,aAAO,UAAU,SAAS;AAC1B,YAAM,aAAa,OAAO,QAAQ,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,IAAI,CAAC,IAAI;AACnF,YAAA,QAAQ,IAAI,WAAW,KAAK,OAAO,UAAU,SAAS,WAAW,MAAM;AAC7E,YAAMoB,QAAO,IAAI,SAAS,MAAM,MAAM;AACtCA,YAAK,UAAU,GAAG,qBAAqB,IAAI;AAC3CA,YAAK,UAAU,GAAG,OAAO,QAAQ,KAAK,IAAI,IAAI;AAC9CA,YAAK,UAAU,GAAG,MAAQ,IAAI;AAC9BA,YAAK,UAAU,GAAG,GAAG,IAAI;AACzBA,YAAK,UAAU,IAAI,OAAO,OAAO,OAAO,IAAI;AAC5CA,YAAK,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AACvEA,YAAK,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AACvEA,YAAK,UAAU,IAAI,OAAO,UAAU,QAAQ,IAAI;AAChDA,YAAK,UAAU,IAAI,WAAW,QAAQ,IAAI;AACpC,YAAA,IAAI,OAAO,WAAW,EAAE;AAC9B,YAAM,IAAI,YAAY,KAAK,OAAO,UAAU,MAAM;AAC5C,YAAA,SAAS,QAAQ,KAAK;AAC5B,gBAAU,MAAM;AAChB,UAAI,OAAO,OAAO;AACV,cAAA,SAAS,QAAQ,OAAO,KAAK;AAAA,MAAA,OAC9B;AACC,cAAA,iBAAiB,OAAO,MAAO,MAAM;AAAA,MAC7C;AACA,gBAAU,OAAO,OAAO;AAExB,YAAM,eAAe,OAAO,QACxB,WAAW,CAAC,OAAO,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM,CAAC,IAClE;AACE,YAAA,UAAU,IAAI,WAAW,KAAK,OAAO,UAAU,SAAS,aAAa,MAAM;AACjF,YAAM,cAAc,IAAI,SAAS,QAAQ,MAAM;AACnC,kBAAA,UAAU,GAAG,uBAAuB,IAAI;AACpD,kBAAY,UAAU,GAAI,KAAK,IAAK,IAAI,IAAI;AAC5C,kBAAY,UAAU,GAAG,OAAO,QAAQ,KAAK,IAAI,IAAI;AACzC,kBAAA,UAAU,GAAG,MAAQ,IAAI;AACzB,kBAAA,UAAU,IAAI,GAAG,IAAI;AACjC,kBAAY,UAAU,IAAI,OAAO,OAAO,OAAO,IAAI;AACvC,kBAAA,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AAClE,kBAAA,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,MAAM,IAAI;AAC9E,kBAAY,UAAU,IAAI,OAAO,UAAU,QAAQ,IAAI;AACvD,kBAAY,UAAU,IAAI,aAAa,QAAQ,IAAI;AACnD,kBAAY,UAAU,IAAI,SAAY,IAAI,IAAI;AAC9C,kBAAY,UAAU,IAAI,OAAO,QAAQ,aAAa,OAAO,QAAQ,IAAI;AACjE,cAAA,IAAI,OAAO,WAAW,EAAE;AAChC,cAAQ,IAAI,cAAc,KAAK,OAAO,UAAU,MAAM;AACtD,qBAAe,KAAK,OAAO;AAAA,IAC7B;AAEA,UAAM,gBAAgB;AACtB,eAAW,UAAU,gBAAgB;AAC7B,YAAA,SAAS,QAAQ,MAAM;AAC7B,gBAAU,OAAO;AAAA,IACnB;AACA,UAAM,cAAc,SAAS;AACvB,UAAA,aAAa,SAAS,KAAK,CAAC,WAAW,OAAO,KAAK,KAAK,gBAAgB,cAC5E,cAAc;AAChB,QAAI,YAAY;AACd,YAAM,cAAc;AACd,YAAA,SAAS,IAAI,WAAW,EAAE;AAChC,YAAM,SAAS,IAAI,SAAS,OAAO,MAAM;AAClC,aAAA,UAAU,GAAG,sBAAsB,IAAI;AACpC,gBAAA,QAAQ,GAAG,EAAE;AACvB,aAAO,UAAU,IAAK,KAAK,IAAK,IAAI,IAAI;AACjC,aAAA,UAAU,IAAI,IAAI,IAAI;AACnB,gBAAA,QAAQ,IAAI,SAAS,MAAM;AAC3B,gBAAA,QAAQ,IAAI,SAAS,MAAM;AAC3B,gBAAA,QAAQ,IAAI,WAAW;AACvB,gBAAA,QAAQ,IAAI,aAAa;AAC7B,YAAA,SAAS,QAAQ,MAAM;AAC7B,gBAAU,OAAO;AACX,YAAA,UAAU,IAAI,WAAW,EAAE;AACjC,YAAM,cAAc,IAAI,SAAS,QAAQ,MAAM;AACnC,kBAAA,UAAU,GAAG,yBAAyB,IAAI;AAC5C,gBAAA,aAAa,GAAG,WAAW;AACzB,kBAAA,UAAU,IAAI,GAAG,IAAI;AAC3B,YAAA,SAAS,QAAQ,OAAO;AAC9B,gBAAU,QAAQ;AAAA,IACpB;AACM,UAAA,OAAO,IAAI,WAAW,EAAE;AAC9B,UAAM,OAAO,IAAI,SAAS,KAAK,MAAM;AAChC,SAAA,UAAU,GAAG,oBAAoB,IAAI;AAC1C,SAAK,UAAU,GAAG,aAAa,QAAS,SAAS,QAAQ,IAAI;AAC7D,SAAK,UAAU,IAAI,aAAa,QAAS,SAAS,QAAQ,IAAI;AAC9D,SAAK,UAAU,IAAI,aAAa,aAAa,aAAa,IAAI;AAC9D,SAAK,UAAU,IAAI,aAAa,aAAa,eAAe,IAAI;AAC1D,UAAA,SAAS,QAAQ,IAAI;AAC3B,UAAM,OAAO;EAAK,UAClB;AACA,UAAM,OAAO;EACf;AACF;AAEA,eAAsB,QAAQ,MAAgC;AAC5D,QAAMC,QAAO,MAAM,QAAQ,EAAE,KAAK,IAAI;AACtC,MAAI,CAACA,MAAK,UAAUA,MAAK,OAAO;AAAU,UAAA,WAAW,aAAa,wBAAwB;AACpF,QAAA,OAAO,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AAClD,MAAA;AACF,UAAM,QAAQ,MAAM,OAAO,MAAM,GAAG,CAAC;AACrC,QACE,IAAI,SAAS,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU,EAAE,UAAU,GAAG,IAAI,MAC9E,qBACF;AACM,YAAA,WAAW,aAAa,qBAAqB;AAAA,IACrD;AACA,UAAM,aAAa,KAAK,IAAIA,MAAK,MAAM,KAAK,KAAK;AACjD,UAAM,OAAO,MAAM,OAAO,MAAMA,MAAK,OAAO,YAAY,UAAU;AAC5D,UAAA,eAAe,kBAAkB,MAAM,kBAAkB;AAC/D,QAAI,eAAe,KAAK,eAAe,KAAK,KAAK,QAAQ;AACjD,YAAA,WAAW,aAAa,gDAAgD;AAAA,IAChF;AACA,UAAM,OAAO,IAAI;AAAA,MACf,KAAK;AAAA,MACL,KAAK,aAAa;AAAA,MAClB,KAAK,SAAS;AAAA,IAAA;AAEhB,UAAM,gBAAgB,KAAK,UAAU,IAAI,IAAI;AAC7C,QAAI,eAAe,KAAK,kBAAkB,KAAK,QAAQ;AAC/C,YAAA,WAAW,aAAa,8CAA8C;AAAA,IAC9E;AACI,QAAA,KAAK,UAAU,GAAG,IAAI,MAAM,KAAK,KAAK,UAAU,GAAG,IAAI,MAAM,GAAG;AAC5D,YAAA,WAAW,aAAa,wCAAwC;AAAA,IACxE;AACA,QAAI,QAAQ,KAAK,UAAU,IAAI,IAAI;AACnC,QAAI,KAAK,UAAU,GAAG,IAAI,MAAM,OAAO;AAC/B,YAAA,WAAW,aAAa,2BAA2B;AAAA,IAC3D;AACA,QAAI,cAAc,KAAK,UAAU,IAAI,IAAI;AACzC,QAAI,gBAAgB,KAAK,UAAU,IAAI,IAAI;AAC3C,QAAI,UAAU,SAAU,gBAAgB,cAAc,kBAAkB,YAAY;AAC5E,YAAA,eAAeA,MAAK,OAAO,aAAa;AAC9C,UAAI,eAAe;AAAU,cAAA,WAAW,aAAa,0BAA0B;AAC/E,YAAM,eAAe,MAAM,OAAO,MAAM,eAAe,IAAI,EAAE;AAC7D,YAAM,UAAU,IAAI,SAAS,aAAa,QAAQ,aAAa,YAAY,EAAE;AAC7E,UAAI,QAAQ,UAAU,GAAG,IAAI,MAAM,yBAAyB;AACpD,cAAA,WAAW,aAAa,kCAAkC;AAAA,MAClE;AACI,UAAA,QAAQ,UAAU,GAAG,IAAI,MAAM,KAAK,QAAQ,UAAU,IAAI,IAAI,MAAM,GAAG;AACnE,cAAA,WAAW,aAAa,0CAA0C;AAAA,MAC1E;AACM,YAAA,eAAe,OAAO,SAAS,CAAC;AACtC,YAAM,cAAc,MAAM,OAAO,MAAM,cAAc,EAAE;AACvD,YAAM,SAAS,IAAI,SAAS,YAAY,QAAQ,YAAY,YAAY,EAAE;AAC1E,UAAI,OAAO,UAAU,GAAG,IAAI,MAAM,sBAAsB;AAChD,cAAA,WAAW,aAAa,qCAAqC;AAAA,MACrE;AACI,UAAA,OAAO,UAAU,IAAI,IAAI,MAAM,KAAK,OAAO,UAAU,IAAI,IAAI,MAAM,GAAG;AAClE,cAAA,WAAW,aAAa,0CAA0C;AAAA,MAC1E;AACA,UAAI,OAAO,QAAQ,EAAE,MAAM,OAAO,QAAQ,EAAE,GAAG;AACvC,cAAA,WAAW,aAAa,6BAA6B;AAAA,MAC7D;AACQ,cAAA,OAAO,QAAQ,EAAE;AACX,oBAAA,OAAO,QAAQ,EAAE;AACf,sBAAA,OAAO,QAAQ,EAAE;AAAA,IACnC;AACA,QAAI,QAAQ;AAAwB,YAAA,WAAW,aAAa,2BAA2B;AACvF,QAAI,cAAc,uBAAuB;AACjC,YAAA,WAAW,aAAa,+CAA+C;AAAA,IAC/E;AACI,QAAA,gBAAgB,cAAcA,MAAK,MAAM;AACrC,YAAA,WAAW,aAAa,wCAAwC;AAAA,IACxE;AACA,UAAM,UAAU,MAAM,OAAO,MAAM,eAAe,WAAW;AAC7D,UAAM,UAAU,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM;AACxD,UAAM,UAAsB,CAAA;AACtB,UAAA,6BAAa;AACb,UAAA,gCAAgB;AAChB,UAAA,kCAAkB;AACxB,QAAI,WAAW;AACf,aAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS;AACtC,UAAA,WAAW,KAAK,QAAQ,UAAU,IAAI,SAAS,QAAQ,MAAM,uBAAuB;AACtF,cAAM,WAAW,aAAa,4BAA4B,KAAK,eAAe;AAAA,MAChF;AACA,YAAM,QAAQ,IAAI,SAAS,WAAW,CAAC;AACvC,YAAM,cAAc,IAAI,SAAS,WAAW,EAAE;AAC9C,YAAM,MAAM,IAAI,SAAS,WAAW,EAAE;AACtC,UAAI,iBAAiB,IAAI,SAAS,WAAW,EAAE;AAC/C,UAAI,OAAO,IAAI,SAAS,WAAW,EAAE;AACrC,YAAM,aAAa,IAAI,SAAS,WAAW,EAAE;AAC7C,YAAM,cAAc,IAAI,SAAS,WAAW,EAAE;AAC9C,YAAMC,iBAAgB,IAAI,SAAS,WAAW,EAAE;AAChD,YAAM,qBAAqB,IAAI,SAAS,WAAW,EAAE;AACrD,UAAI,cAAc,IAAI,SAAS,WAAW,EAAE;AAC5C,YAAM,MAAM,WAAW,KAAK,aAAa,cAAcA;AACvD,UAAI,MAAM,QAAQ;AAAc,cAAA,WAAW,aAAa,gCAAgC;AACpF,UAAA;AACA,UAAA;AACK,eAAA,QAAQ,OAAO,QAAQ,SAAS,WAAW,IAAI,WAAW,KAAK,UAAU,CAAC;AAAA,MAAA,QAC3E;AACN,cAAM,WAAW,aAAa,UAAU,KAAK,oBAAoB;AAAA,MACnE;AACA,2BAAqB,IAAI;AACrB,UAAA,OAAO,IAAI,IAAI;AAAG,cAAM,WAAW,aAAa,oBAAoB,IAAI,EAAE;AAC9E,UAAI,QAAQ;AAAQ,cAAM,WAAW,aAAa,mCAAmC,IAAI,EAAE;AAC3F,UAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,WAAW,GAAG;AACjC,cAAM,WAAW,aAAa,sCAAsC,IAAI,EAAE;AAAA,MAC5E;AACA,YAAM,QAAQ,QAAQ;AAAA,QACpB,WAAW,KAAK;AAAA,QAChB,WAAW,KAAK,aAAa;AAAA,MAAA;AAE/B,UAAI,SAAS,cAAc,mBAAmB,cAAc,gBAAgB,YAAY;AAChF,cAAA,SAAS,gBAAgB,KAAK;AACpC,YAAI,aAAa;AACjB,YAAI,SAAS;AAAmB,iBAAA,cAAc,QAAQ,cAAc,IAAI;AACxE,YAAI,mBAAmB,YAAY;AAChB,2BAAA,cAAc,QAAQ,cAAc,IAAI;AAAA,QAC3D;AACA,YAAI,gBAAgB;AAA0B,wBAAA,cAAc,QAAQ,cAAc,IAAI;AAAA,MACxF;AACM,YAAA,OAAQ,uBAAuB,KAAM;AACtC,WAAA,OAAO,WAAY,OAAQ;AAC9B,cAAM,WAAW,aAAa,iCAAiC,IAAI,EAAE;AAAA,MACvE;AACM,YAAA,cAAc,KAAK,SAAS,GAAG;AACrC,YAAM,aAAa,KAAK,QAAQ,OAAO,EAAE;AACrC,UAAA;AAAa,oBAAY,IAAI,UAAU;AAAA;AACtC,kBAAU,IAAI,IAAI;AACvB,YAAM,QAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MAAA;AAEF,cAAQ,KAAK,KAAK;AACX,aAAA,IAAI,MAAM,KAAK;AACX,iBAAA;AAAA,IACb;AACI,QAAA,aAAa,QAAQ,QAAQ;AACzB,YAAA,WAAW,aAAa,iCAAiC;AAAA,IACjE;AACA,eAAW,YAAY,WAAW;AAC1B,YAAA,QAAQ,SAAS,MAAM,GAAG;AAChC,UAAI,SAAS;AACb,iBAAW,QAAQ,MAAM,MAAM,GAAG,EAAE,GAAG;AACrC,iBAAS,SAAS,GAAG,MAAM,IAAI,IAAI,KAAK;AACxC,oBAAY,IAAI,MAAM;AAAA,MACxB;AAAA,IACF;AACM,UAAA,WAAW,CAAC,GAAG,SAAS,EAAE,KAAK,CAAC,SAAS,YAAY,IAAI,IAAI,CAAC;AAChE,QAAA;AAAU,YAAM,WAAW,aAAa,oCAAoC,QAAQ,EAAE;AAE1F,UAAM,YAA6C,CAAA;AACnD,eAAW,SAAS,SAAS;AAC3B,YAAM,QAAQ,MAAM,OAAO,MAAM,MAAM,aAAa,EAAE;AACtD,UAAI,IAAI,OAAO,CAAC,MAAM,qBAAqB;AACzC,cAAM,WAAW,aAAa,+BAA+B,MAAM,IAAI,EAAE;AAAA,MAC3E;AACM,YAAA,aAAa,IAAI,OAAO,CAAC;AACzB,YAAA,mBAAmB,IAAI,OAAO,CAAC;AAC/B,YAAA,kBAAkB,IAAI,OAAO,EAAE;AAC/B,YAAA,mBAAmB,IAAI,OAAO,EAAE;AACtC,UAAI,eAAe,MAAM,SAAS,qBAAqB,MAAM,aAAa;AACxE,cAAM,WAAW,aAAa,8BAA8B,MAAM,IAAI,EAAE;AAAA,MAC1E;AACA,YAAM,YAAY,MAAM,OAAO,MAAM,MAAM,cAAc,IAAI,eAAe;AACxE,UAAA;AACA,UAAA;AACiB,2BAAA,QAAQ,OAAO,SAAS;AAAA,MAAA,QACrC;AACN,cAAM,WAAW,aAAa,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC9E;AACI,UAAA,qBAAqB,MAAM,MAAM;AACnC,cAAM,WAAW,aAAa,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC9E;AACA,YAAM,aAAa,MAAM,cAAc,KAAK,kBAAkB;AACxD,YAAA,MAAM,MAAM,aAAa,MAAM;AACrC,UAAI,MAAM,eAAe;AACvB,cAAM,WAAW,aAAa,gCAAgC,MAAM,IAAI,EAAE;AAAA,MAC5E;AACA,gBAAU,KAAK,CAAC,MAAM,aAAa,KAAK,MAAM,IAAI,CAAC;AAAA,IACrD;AACU,cAAA,KAAK,CAAC,MAAM,UAAU,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC;AAClD,aAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACjD,UAAA,UAAU,KAAK,EAAE,CAAC,IAAI,UAAU,QAAQ,CAAC,EAAE,CAAC,GAAG;AAC3C,cAAA,WAAW,aAAa,4BAA4B,UAAU,KAAK,EAAE,CAAC,CAAC,EAAE;AAAA,MACjF;AAAA,IACF;AACO,WAAA,EAAE,MAAMnB,UAAQ,IAAI,GAAG,MAAMkB,MAAK,MAAM,SAAS;EAAO,UAC/D;AACA,UAAM,KAAK;EACb;AACF;AAEsB,eAAA,aACpB,SACA,OACA,OACqB;AACrB,MAAI,MAAM,OAAO;AAAO,UAAM,WAAW,UAAU,6BAA6B,MAAM,IAAI,EAAE;AAC5F,QAAM,SAAuB,CAAA;AAC7B,MAAI,OAAO;AACL,QAAA,eAAe,wBAAwB,KAAK;AAC9C,MAAA;AACF,qBAAiB,SAAS,eAAe,QAAQ,MAAM,KAAK,GAAG;AAC7D,cAAQ,MAAM;AACd,UAAI,OAAO,SAAS,OAAO,MAAM,MAAM;AACrC,cAAM,WAAW,UAAU,2CAA2C,MAAM,IAAI,EAAE;AAAA,MACpF;AACA,mBAAa,OAAO,KAAK;AAClB,aAAA,KAAK,MAAM,MAAO,CAAA;AAAA,IAC3B;AAAA,WACO,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,WAAW,eAAe,wBAAwB,MAAM,IAAI,EAAE;AAAA,EACtE;AACA,eAAa,OAAO,IAAI;AAClB,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACO,SAAA;AACT;AAEsB,eAAA,eACpB,SACA,OACA,gBACqB;AACf,QAAA,eAAe,wBAAwB,KAAK;AAC9C,MAAA;AACF,qBAAiB,SAAS,eAAe,QAAQ,MAAM,KAAK;AAAG,mBAAa,OAAO,KAAK;AAAA,WACjF,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,WAAW,eAAe,wBAAwB,MAAM,IAAI,EAAE;AAAA,EACtE;AACM,QAAA,SAAS,aAAa;AAC5B,MAAI,kBAAkB,OAAO,WAAW,eAAe,eAAe;AACpE,UAAM,WAAW,WAAW,4BAA4B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,EAClF;AACO,SAAA;AACT;AAEA,SAAS,wBAAwB,OAG/B;AACA,QAAM,MAAM,QAAA,EAAU,WAAW,QAAQ;AACzC,MAAI,MAAM;AACV,MAAI,OAAO;AACJ,SAAA;AAAA,IACL,OAAO,OAAO;AACZ,cAAQ,MAAM;AACV,UAAA,OAAO,MAAM,MAAM;AACrB,cAAM,WAAW,UAAU,kCAAkC,MAAM,IAAI,EAAE;AAAA,MAC3E;AACA,UAAI,OAAO,KAAK;AACV,YAAA,YAAY,KAAK,KAAK;AAAA,IAC9B;AAAA,IACA,OAAO,aAAa,MAAM;AACxB,UAAI,eAAe,MAAM,QAAQ,SAAS,MAAM,MAAM;AACpD,cAAM,WAAW,WAAW,wBAAwB,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,MAC9E;AACM,YAAA,aAAa,MAAM,gBAAgB;AACrC,UAAA,cAAc,MAAM,OAAO;AAC7B,cAAM,WAAW,WAAW,uBAAuB,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,MAC7E;AACA,aAAO,EAAE,MAAM,QAAQ,IAAI,aAAa,OAAO;IACjD;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAe,MAAc,OAA6C;AAC7E,MAAA;AACJ,MAAI,YAAY,MAAM;AAChB,QAAA,aAAa,IAAI,eAA2B;AAAA,IAChD,MAAM,QAAQ;AACL,aAAA,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,MAAM;AAC1C,YAAA,KAAK,KAAK,MAAM,UAAU;AAAA,IAClC;AAAA,IACA,MAAM,KAAK,YAAY;AACjB,UAAA,CAAC,QAAQ,cAAc,GAAG;AAC5B,aAAK,MAAM;AACX,mBAAW,MAAM;AACjB;AAAA,MACF;AACM,YAAA,SAAS,IAAI,WAAW,KAAK,IAAI,MAAM,MAAM,SAAS,CAAC;AAC7D,YAAM,OAAO,MAAM,KAAK,KAAK,MAAM;AACnC,UAAI,SAAS,MAAM;AACjB,aAAK,KAAK;AACV,mBAAW,MAAM,WAAW,aAAa,oBAAoB,MAAM,IAAI,EAAE,CAAC;AAC1E;AAAA,MACF;AACa,mBAAA;AACb,iBAAW,QAAQ,OAAO,SAAS,GAAG,IAAI,CAAC;AAAA,IAC7C;AAAA,IACA,SAAS;AACP,WAAK,MAAM;IACb;AAAA,EAAA,CACD;AACD,MAAI,MAAM,gBAAgB;AAAU,WAAA;AACpC,SAAO,WAAW;AAAA,IAChB,IAAI,oBAAoB,aAAa;AAAA,EAAA;AAKzC;AAEA,eAAe,kBAAkB,MAAoC;AACnE,QAAM,SAAsB,CAAA;AACtB,QAAA,wCAAwB;AACf,iBAAA,KAAK,mBAA2B,eAAsC;AACnF,UAAME,iBAAgB,MAAM,QAAQ,EAAE,SAAS,iBAAiB;AACnD,iBAAA,MAAMA,gBAAe,iBAAiB,GAAG;AAClD,QAAA,kBAAkB,IAAIA,cAAa,GAAG;AACxC,YAAM,IAAI,WAAW,kBAAkB,4BAA4B,aAAa,EAAE;AAAA,IACpF;AACA,sBAAkB,IAAIA,cAAa;AAC/B,QAAA;AACF,YAAM,WAAW,CAAA;AACjB,iBAAW,SAAS,MAAM,QAAQ,EAAE,QAAQA,cAAa;AAAG,iBAAS,KAAK,KAAK;AAC/E,eAAS,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,MAAM,OAAO,KAAK,KAAK,OAAO,MAAM,OAAO,IAAI,CAAC;AAC3F,iBAAW,SAAS,UAAU;AAC5B,YAAI,MAAM,KAAK,SAAS,IAAI,KAAK,MAAM,KAAK,SAAS,GAAG,KAAK,MAAM,KAAK,SAAS,IAAI,GAAG;AAChF,gBAAA,IAAI,WAAW,kBAAkB,qCAAqC;AAAA,QAC9E;AACM,cAAA,cAAc,gBAAgB,GAAG,aAAa,IAAI,MAAM,IAAI,KAAK,MAAM;AAC7E,cAAM,aAAapB,UAAQoB,gBAAe,MAAM,IAAI;AACpD,cAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,UAAU;AACvC,cAAA,WAAW,KAAK,YAAY,MAAM,UAAU,SAAS,UAAU,IAAI;AAC5D,qBAAA,MAAM,UAAU,WAAW;AAClC,cAAA,SAAS,KAAK,YAAY,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjE,YAAI,OAAO,aAAa;AACtB,iBAAO,KAAK;AAAA,YACV,aAAa,GAAG,WAAW;AAAA,YAC3B,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,UAAU,aAAa,MAAM,UAAU,MAAM;AAAA,UAAA,CAC9C;AACK,gBAAA,KAAK,UAAU,WAAW;AAAA,QAAA,WACvB,OAAO,QAAQ;AACxB,iBAAO,KAAK;AAAA,YACV;AAAA,YACA,cAAc;AAAA,YACd,MAAM;AAAA,YACN,MAAM,OAAO;AAAA,YACb,cAAc,OAAO,QAAQ,KAAK,QAAW;AAAA,YAC7C,UAAU,aAAa,MAAM,UAAU,MAAM;AAAA,YAC7C,gBAAgB,MAAM,WAAW,QAAQ,GAAG;AAAA,UAAA,CAC7C;AAAA,QAAA,OACI;AACL,gBAAM,IAAI,WAAW,kBAAkB,6BAA6B,WAAW,EAAE;AAAA,QACnF;AAAA,MACF;AAAA,IAAA,UACA;AACA,wBAAkB,OAAOA,cAAa;AAAA,IACxC;AAAA,EACF;AACM,QAAA,KAAK,MAAM,EAAE;AACZ,SAAA;AACT;AAEA,SAAS,aAAa,MAAoB,UAAkB,QAA8B;AACxF,SAAO,KAAK,UAAU;AAAA,IACpB;AAAA,IACA,WAAW,KAAK,OAAO,QAAa,KAAA;AAAA,IACpC,OAAO,OAAO,OAAO,QAAa,KAAA;AAAA,IAClC,MAAM,OAAO;AAAA,IACb,KAAK,OAAO;AAAA,IACZ,KAAK,OAAO;AAAA,IACZ,MAAM,OAAO;AAAA,EAAA,CACd;AACH;AAEA,SAAS,eAAe,QAA4B;AAC3C,SAAA;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,iBAAiB;AAAA,EAAA;AAE5B;AAEA,SAAS,aAAa,MAAc,WAAmB,OAAqB;AACpE,QAAA,OAAON,WAAS,MAAM,SAAS;AACrC,MACE,SAAS,QAAQ,KAAK,WAAW,KAAK,QAAA,EAAU,KAAK,GAAG,EAAE,KAC1Dd,UAAQ,SAAS,MAAMA,UAAQ,IAAI,KAAK,UAAU,KAClD;AACA,UAAM,IAAI,WAAW,kBAAkB,gCAAgC,KAAK,EAAE;AAAA,EAChF;AACF;AAEA,SAAS,UAAU,QAA+B;AAC1C,QAAA,SAAS,IAAI,WAAW,UAAU;AACxC,QAAM,EAAE,MAAM,OAAA,IAAW,eAAe,OAAO,WAAW;AAC9C,cAAA,QAAQ,GAAG,KAAK,IAAI;AAChC;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,SAAS,cAAc,MAAQ,OAAO,aAAa,MAAQ;AAAA,EAAA;AAEzD,aAAA,QAAQ,KAAK,GAAG,CAAC;AACjB,aAAA,QAAQ,KAAK,GAAG,CAAC;AAC5B,aAAW,QAAQ,KAAK,IAAI,OAAO,IAAI;AAC5B,aAAA,QAAQ,KAAK,IAAI,CAAC;AACtB,SAAA,KAAK,IAAM,KAAK,GAAG;AAC1B,SAAO,GAAG,IAAI,OAAO,SAAS,cAAc,KAAO;AACvC,cAAA,QAAQ,KAAK,GAAG,SAAS;AACzB,cAAA,QAAQ,KAAK,GAAG,IAAI;AACpB,cAAA,QAAQ,KAAK,KAAK,MAAM;AACpC,MAAI,WAAW;AACf,aAAW,QAAQ;AAAoB,gBAAA;AACvC,gBAAc,QAAQ,QAAQ;AACvB,SAAA;AACT;AAEA,SAAS,eAAe,MAAgD;AAChE,QAAA,UAAU,IAAI;AACpB,MAAI,QAAQ,OAAO,IAAI,EAAE,UAAU;AAAK,WAAO,EAAE,MAAM,MAAM,QAAQ,GAAG;AAClE,QAAA,YAAY,KAAK,SAAS,GAAG;AACnC,QAAM,OAAO,YAAY,KAAK,MAAM,GAAG,EAAE,IAAI;AACvC,QAAA,QAAQ,KAAK,MAAM,GAAG;AAC5B,WAAS,QAAQ,MAAM,SAAS,GAAG,QAAQ,GAAG,SAAS;AACrD,UAAM,SAAS,MAAM,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG;AAC7C,UAAM,OAAO,GAAG,MAAM,MAAM,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,YAAY,MAAM,EAAE;AAC/D,QAAA,QAAQ,OAAO,MAAM,EAAE,UAAU,OAAO,QAAQ,OAAO,IAAI,EAAE,UAAU,KAAK;AACvE,aAAA,EAAE,MAAM;IACjB;AAAA,EACF;AACA,QAAM,IAAI,WAAW,kBAAkB,+CAA+C,IAAI,EAAE;AAC9F;AAEA,SAAS,YAAY,QAAoB,QAAgB,QAAgB,OAAqB;AAC5F,QAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,KAAK;AAC5C,MAAI,MAAM,SAAS;AAAc,UAAA,IAAI,WAAW,kBAAkB,uBAAuB;AAClF,SAAA,IAAI,OAAO,MAAM;AAC1B;AAEA,SAAS,WAAW,QAAoB,QAAgB,QAAgB,OAAqB;AACrF,QAAAe,QAAO,MAAM,SAAS,CAAC,EAAE,SAAS,SAAS,GAAG,GAAG;AACvD,MAAIA,MAAK,UAAU;AAAc,UAAA,IAAI,WAAW,kBAAkB,qBAAqB;AACvF,cAAY,QAAQ,QAAQ,QAAQ,GAAGA,KAAI,IAAI;AACjD;AAEA,SAAS,cAAc,QAAoB,OAAqB;AAC9D,QAAMA,QAAO,MAAM,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AAC9C,cAAY,QAAQ,KAAK,GAAG,GAAGA,KAAI,KAAK;AAC1C;AAEA,SAAS,qBAAqB,MAAoB;AAChD,MAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,WAAW,GAAG,GAAG;AAC/E,UAAM,WAAW,aAAa,sBAAsB,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,EAC5E;AACI,MAAA,aAAa,KAAK,IAAI;AAAG,UAAM,WAAW,aAAa,wBAAwB,IAAI,EAAE;AACnF,QAAA,YAAY,KAAK,SAAS,GAAG;AAC7B,QAAA,WAAW,KAAK,MAAM,GAAG;AAC/B,WAAS,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS;AAC9C,UAAA,UAAU,SAAS,KAAK;AAE5B,QAAA,YAAY,OAAO,YAAY,QAC9B,CAAC,WAAW,EAAE,aAAa,UAAU,SAAS,SAAS,IACxD;AACA,YAAM,WAAW,aAAa,sBAAsB,IAAI,EAAE;AAAA,IAC5D;AAAA,EACF;AACF;AAEA,SAAS,WAAW,OAAe,SAAiB,OAA2B;AAC7E,SAAO,IAAI,UAAU,mBAAmB,SAAS,GAAG,OAAO;AAAA,IACzD;AAAA,IACA,GAAI,QAAQ,EAAE,MAAA,IAAU,CAAC;AAAA,EAAA,CAC1B;AACH;AAEA,SAAS,MAAM,OAA2B;AACxC,UAAQ,YAAY,YAAY,KAAK,IAAI,gBAAgB;AAC3D;AAEA,SAAS,YAAY,KAAa,OAA2B;AAC3D,MAAI,QAAQ;AACZ,aAAW,QAAQ;AAAO,YAAQ,WAAW,QAAQ,QAAQ,GAAI,IAAK,UAAU;AAChF,SAAO,UAAU;AACnB;AAEA,eAAe,SAAS,MAAgB,OAAkC;AACxE,MAAI,SAAS;AACb,SAAO,SAAS,MAAM;AAAQ,cAAU,MAAM,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AACjF;AAEA,eAAe,iBAAiB,MAAc,QAAiC;AACvE,QAAA,QAAQ,MAAM,UAAU,KAAK,MAAM,EAAE,MAAM,KAAA,CAAM;AACnD,MAAA;AACF,UAAM,SAAS,IAAI,WAAW,MAAM,IAAI;AACxC,WAAO,MAAM;AACX,YAAM,OAAO,MAAM,MAAM,KAAK,MAAM;AACpC,UAAI,SAAS;AAAM;AACnB,YAAM,SAAS,QAAQ,OAAO,SAAS,GAAG,IAAI,CAAC;AAAA,IACjD;AAAA,EAAA,UACA;AACA,UAAM,MAAM;EACd;AACF;AAEA,eAAe,OAAO,MAAgB,QAAgB,QAAqC;AACzF,MAAI,CAAC,OAAO,cAAc,MAAM,KAAK,CAAC,OAAO,cAAc,MAAM,KAAK,SAAS,KAAK,SAAS,GAAG;AACxF,UAAA,WAAW,aAAa,uBAAuB;AAAA,EACvD;AACM,QAAA,KAAK,KAAK,MAAM;AAChB,QAAA,SAAS,IAAI,WAAW,MAAM;AACpC,MAAI,WAAW;AACf,SAAO,WAAW,QAAQ;AACxB,UAAM,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,QAAQ,CAAC;AACtD,QAAI,SAAS;AAAY,YAAA,WAAW,aAAa,uBAAuB;AAC5D,gBAAA;AAAA,EACd;AACO,SAAA;AACT;AAEA,SAAS,kBAAkB,OAAmB,WAA2B;AACvE,WAAS,QAAQ,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS;AAClD,QAAA,IAAI,OAAO,KAAK,MAAM;AAAkB,aAAA;AAAA,EAC9C;AACO,SAAA;AACT;AAEA,SAAS,gBAAgB,OAA6B;AACpD,MAAI,WAAW;AACR,SAAA,WAAW,KAAK,MAAM,QAAQ;AAC7B,UAAA,KAAK,IAAI,OAAO,QAAQ;AAC9B,UAAM,SAAS,IAAI,OAAO,WAAW,CAAC;AAChC,UAAA,MAAM,WAAW,IAAI;AAC3B,QAAI,MAAM,MAAM;AAAc,YAAA,WAAW,aAAa,8BAA8B;AACpF,QAAI,OAAO,GAAQ;AACjB,UAAI,SAAS,MAAM;AAAS,cAAA,WAAW,aAAa,gCAAgC;AAC9E,YAAA,OAAO,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,WAAW,GAAG,MAAM;AAC/E,YAAM,SAAmB,CAAA;AACzB,eAAS,SAAS,GAAG,SAAS,QAAQ,UAAU;AAAG,eAAO,KAAK,OAAO,MAAM,MAAM,CAAC;AAC5E,aAAA;AAAA,IACT;AACW,eAAA;AAAA,EACb;AACM,QAAA,WAAW,aAAa,8BAA8B;AAC9D;AAEA,SAAS,cAAc,QAAkB,OAAe,MAAsB;AACtE,QAAA,QAAQ,OAAO,KAAK;AAC1B,MAAI,UAAU;AAAW,UAAM,WAAW,aAAa,gCAAgC,IAAI,EAAE;AACtF,SAAA;AACT;AAEA,SAAS,WAAW,QAA8B;AAChD,QAAM,SAAS,IAAI,WAAW,IAAI,OAAO,SAAS,CAAC;AACnD,QAAM,OAAO,IAAI,SAAS,OAAO,MAAM;AAClC,OAAA,UAAU,GAAG,GAAQ,IAAI;AAC9B,OAAK,UAAU,GAAG,OAAO,SAAS,GAAG,IAAI;AAClC,SAAA,QAAQ,CAAC,OAAO,UAAU,UAAU,MAAM,IAAI,QAAQ,GAAG,KAAK,CAAC;AAC/D,SAAA;AACT;AAEA,SAAS,UAAU,MAAgB,QAAgB,OAAqB;AACtE,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ;AAAS,UAAA,IAAI,MAAM,wBAAwB;AACvF,OAAK,aAAa,QAAQ,OAAO,KAAK,GAAG,IAAI;AAC/C;AAEA,SAAS,OAAO,MAAgB,QAAwB;AACtD,QAAM,QAAQ,KAAK,aAAa,QAAQ,IAAI;AAC5C,MAAI,QAAQ,OAAO,OAAO,gBAAgB,GAAG;AACrC,UAAA,WAAW,UAAU,0BAA0B;AAAA,EACvD;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,IAAI,OAAmB,QAAwB;AAC/C,SAAA,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI;AACnF;AAEA,SAAS,IAAI,OAAmB,QAAwB;AAC/C,SAAA,IAAI,SAAS,MAAM,QAAQ,MAAM,aAAa,QAAQ,CAAC,EAAE,UAAU,GAAG,IAAI;AACnF;AAEA,eAAe,eAAe,MAA6B;AACrD,MAAA;AACI,UAAA,QAAU,EAAA,OAAO,IAAI;AAAA,WACpB,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,MAAM,QAAQ,IAAI,WAAW;AC56B7B,MAAMM,aAAW,CAAC,SAAiB,UAAU,KAAK,SAAS,IAAI;AAC/D,MAAMtB,SAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAMC,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEhE,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,eAAe;AACrB,MAAM,mBAAmB;AACzB,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB,OAAO;AAC1B,MAAA,2BAA2B,IAAI,OAAO;AACtC,MAAA,2BAA2B,KAAK,OAAO;AAEpD,MAAM,kBAAkB;AACxB,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAMsB,cAAY;AAgEX,SAAS,uBAAuB,MAAoB;AACrD,MAAA,CAAC,gBAAgB,KAAK,IAAI,KAAK,SAAS,OAAO,SAAS,MAAM;AAChE,UAAM,IAAI,WAAW,2BAA2B,4BAA4B,IAAI,EAAE;AAAA,EACpF;AACF;AAEO,SAASC,gBAAc,OAAuB;AACnD,UAAQ,MAAM,KAAO,EAAA,YAAe,GAAA;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA,MAAM,OAAO;EACxB;AACF;AAEO,SAAS,YAAY,OAAuB;AACjD,UAAQ,MAAM,KAAO,EAAA,YAAe,GAAA;AAAA,IAClC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACI,aAAA;AAAA,IACT;AACS,aAAA,MAAM,OAAO;EACxB;AACF;AAEO,SAAS,gBAAgB,KAAiD;AAC/E,QAAM,YAAoD;AAAA,IACxD,oBAAoB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAClD,sBAAsB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IACrD,iBAAiB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAC/C,mBAAmB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IAClD,eAAe,EAAE,IAAI,WAAW,MAAM,SAAS;AAAA,IAC/C,iBAAiB,EAAE,IAAI,WAAW,MAAM,UAAU;AAAA,IAClD,iBAAiB,EAAE,IAAI,SAAS,MAAM,SAAS;AAAA,IAC/C,mBAAmB,EAAE,IAAI,SAAS,MAAM,UAAU;AAAA,IAClD,KAAK,CAAC;AAAA,IACN,OAAO,CAAC;AAAA,IACR,cAAc,CAAC;AAAA,IACf,aAAa,CAAC;AAAA,IACd,QAAQ,CAAC;AAAA,EAAA;AAEX,SAAO,UAAU,GAAG;AACtB;AAEgB,SAAA,kBACd,OACA,OACoC;AACpC,MAAI,UAAU;AAAkB,WAAA;AAC1B,QAAA,WAAWf,eAAa,OAAO,KAAK;AAC1C,gBAAc,UAAU,CAAC,MAAM,QAAQ,oBAAoB,GAAG,KAAK;AACnE,QAAM,SAAiC,CAAA;AACvC,aAAW,OAAO,CAAC,MAAM,QAAQ,oBAAoB,GAAG;AAClD,QAAA,SAAS,GAAG,MAAM,QAAW;AACxB,aAAA,GAAG,IAAI,qBAAqB,SAAS,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE;AAAA,IACrE;AAAA,EACF;AACA,MAAI,OAAO;AAAW,WAAA,KAAK,YAAY,OAAO,EAAE;AAChD,MAAI,OAAO;AAAa,WAAA,OAAOe,gBAAc,OAAO,IAAI;AACjD,SAAA;AACT;AAEgB,SAAA,yBACd,KACA,UACA,OACM;AACA,QAAA,UAAU,gBAAgB,GAAG;AAC/B,MAAA,CAAC,WAAW,CAAC;AAAU;AAC3B,aAAW,SAAS,CAAC,MAAM,MAAM,GAAG;AAC9B,QAAA,QAAQ,KAAK,MAAM,UAAa,SAAS,KAAK,MAAM,QAAQ,KAAK,GAAG;AACtE,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,KAAK,IAAI,KAAK,6CAA6C,GAAG;AAAA,MAAA;AAAA,IAErE;AAAA,EACF;AACF;AAEO,SAAS,mBACd,QACQ;AACR,SAAO,aAAa,MAAM;AAC5B;AAEO,SAAS,aAAa,QAAwB;AAC7C,QAAA,MAAM,SAAS,QAAQ,KAAK;AAClC,MACE,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,KAAK,IAAI,GAAG,SAAS,GAAG,GAC3F;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,SAAS,IAAI,GAAG,MAAM,GAAG;AAC3B,MAAA,OAAO,KAAK,CAAC,UAAU,CAAC,eAAe,KAAK,KAAK,CAAC,GAAG;AACjD,UAAA,IAAI,WAAW,kBAAkB,qDAAqD;AAAA,EAC9F;AACI,MAAA,IAAI,WAAW,OAAO;AACxB,QAAI,OAAO,UAAU,KAAK,OAAO,GAAG,EAAE,MAAM,OAAO;AACjD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,WAAO,IAAI;AAAA,EACb;AACA,SAAO,GAAG,IAAI,EAAE,IAAI,IAAI,MAAM;AAChC;AAEO,SAAS,kBACd,aACA,SACA,QACA,OACA,SACA,WACsD;AAChD,QAAA,UAAU,IAAI,QAAQ;AAAA,IAC1B,QAAQ;AAAA,IACR,IAAI,WAAW,QAAQ,MAAM;AAAA,IAC7B,SAAS;AACX,QAAM,QAAiC;AAAA,IACrC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EAAA;AAEI,QAAA,WAAW,IAAI,uBAAuB,IAAI,cAAc,KAAK,EAAE,CAAC,EAAE;AACjE,SAAA,EAAE,OAAO;AAClB;AAEgB,SAAA,oBAAoB,OAAgB,OAA0B;AACxE,MAAA,CAAC,MAAM,QAAQ,KAAK;AAAG,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAC9E,SAAO,MAAM,IAAI,CAAC,KAAK,UAAU;AAC/B,UAAM,OAAOf,eAAa,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG;AACjC,sBAAA,MAAM,CAAC,cAAc,YAAY,WAAW,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG;AAC1F,yBAAqB,KAAK,YAAY,GAAG,KAAK,IAAI,KAAK,cAAc;AACjE,QAAA,OAAO,KAAK,aAAa,WAAW;AACtC,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,4BAA4B;AAAA,IACvE;AACA,QACE,KAAK,YAAY,WAChB,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,QAAQ,IACzF;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,kCAAkC;AAAA,IAC7E;AAEE,QAAA,KAAK,QAAQ,QAAQ,KAAK,QAAQ,WACjC,OAAO,KAAK,QAAQ,YAAY,CAAC,OAAO,UAAU,KAAK,GAAG,KAAK,KAAK,MAAM,KACzE,KAAK,MAAM,aACb;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,KAAK,gCAAgC;AAAA,IAC3E;AACO,WAAA;AAAA,EAAA,CACR;AACH;AAEgB,SAAA,0BACd,OACA,OACyB;AACnB,QAAA,SAASA,eAAa,OAAO,KAAK;AACxC,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACI,QAAA,OAAO,KAAK,MAAM;AAAWA,qBAAa,OAAO,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,EAAE;AAAA,EAClF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO;AAAA,IAC1BA,eAAa,OAAO,qBAAqB,CAAA,GAAI,GAAG,KAAK,oBAAoB;AAAA,EAAA,GAE3E;AACA,UAAM,WAAWA,eAAa,KAAK,GAAG,KAAK,sBAAsB,IAAI,EAAE;AACvE;AAAA,MACE;AAAA,MACA,CAAC,YAAY,cAAc,YAAY,eAAe,QAAQ;AAAA,MAC9D,GAAG,KAAK,sBAAsB,IAAI;AAAA,IAAA;AAEpC,QAAI,CAAC,CAAC,QAAQ,SAAS,OAAO,KAAK,EAAE,SAAS,OAAO,SAAS,QAAQ,CAAC,GAAG;AACxE,YAAM,QAAQ,UAAU,GAAG,KAAK,sBAAsB,IAAI,sBAAsB;AAAA,IAClF;AACA,eAAW,SAAS,YAAY,GAAG,KAAK,sBAAsB,IAAI,eAAe,KAAM;AACvF,oBAAgB,SAAS,UAAU,GAAG,KAAK,sBAAsB,IAAI,WAAW;AAChF;AAAA,MACE,SAAS,eAAe,CAAC;AAAA,MACzB,GAAG,KAAK,sBAAsB,IAAI;AAAA,IAAA;AAEpC,QAAI,SAAS,WAAW,UAAa,SAAS,WAAW,MAAM;AACvD,YAAA,SAASA,eAAa,SAAS,QAAQ,GAAG,KAAK,sBAAsB,IAAI,SAAS;AACxF;AAAA,QACE;AAAA,QACA,CAAC,SAAS,SAAS,aAAa;AAAA,QAChC,GAAG,KAAK,sBAAsB,IAAI;AAAA,MAAA;AAE9B,YAAA,QAAQA,eAAa,OAAO,OAAO,GAAG,KAAK,sBAAsB,IAAI,eAAe;AACtF,UAAA,MAAM,SAAS,OAAO;AACN,0BAAA,OAAO,CAAC,MAAM,GAAG,GAAG,KAAK,sBAAsB,IAAI,eAAe;AAAA,MAAA,WAC3E,MAAM,SAAS,QAAQ;AAChC;AAAA,UACE;AAAA,UACA,CAAC,QAAQ,gBAAgB;AAAA,UACzB,GAAG,KAAK,sBAAsB,IAAI;AAAA,QAAA;AAEhC,YAAA,MAAM,mBAAmB,QAAW;AACtC;AAAA,YACE,MAAM;AAAA,YACN,GAAG,KAAK,sBAAsB,IAAI;AAAA,YAClC;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA,OACK;AACL,cAAM,QAAQ,UAAU,GAAG,KAAK,sBAAsB,IAAI,+BAA+B;AAAA,MAC3F;AACAF,uBAAe,OAAO,OAAO,GAAG,KAAK,sBAAsB,IAAI,eAAe;AAC9E;AAAA,QACE,OAAO;AAAA,QACP,GAAG,KAAK,sBAAsB,IAAI;AAAA,MAAA;AAAA,IAEtC;AAAA,EACF;AACA,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACA,eACQ,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQE,eAAa,OAAO,KAAK,KAAK,CAAA,GAAI,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,GAC1F;AACA,UAAI,QAAQ;AAAM;AACZ,YAAA,QAAQA,eAAa,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE;AAC3D;AAAA,QACE;AAAA,QACA,CAAC,oBAAoB,UAAU,QAAQ;AAAA,QACvC,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI;AAAA,MAAA;AAEN,2BAAA,MAAM,kBAAkB,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,mBAAmB;AACpE,2BAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,SAAS;AACnD,wBAAA,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,IAAI,IAAI,SAAS;AAAA,IACpE;AAAA,EACF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO;AAAA,IAC1BA,eAAa,OAAO,iBAAiB,CAAA,GAAI,GAAG,KAAK,gBAAgB;AAAA,EAAA,GAEnE;AACA,UAAM,WAAWA,eAAa,KAAK,GAAG,KAAK,kBAAkB,IAAI,EAAE;AACnE;AAAA,MACE;AAAA,MACA,CAAC,WAAW,WAAW,UAAU,YAAY;AAAA,MAC7C,GAAG,KAAK,kBAAkB,IAAI;AAAA,IAAA;AAE5B,QAAA,CAAC,CAAC,UAAU,UAAU,EAAE,SAAS,OAAO,SAAS,OAAO,CAAC,GAAG;AAC9D,YAAM,QAAQ,UAAU,GAAG,KAAK,kBAAkB,IAAI,qBAAqB;AAAA,IAC7E;AACI,QAAA,SAAS,YAAY,QAAW;AAClC;AAAA,QACE,SAAS;AAAA,QACT,GAAG,KAAK,kBAAkB,IAAI;AAAA,QAC9B,OAAO;AAAA,MAAA;AAAA,IAEX;AACA,UAAM,UAAU;AAAA,MACd,SAAS,UAAU,CAAC;AAAA,MACpB,GAAG,KAAK,kBAAkB,IAAI;AAAA,IAAA;AAEhC,eAAW,WAAW,OAAO,KAAK,OAAO,GAAG;AAC1C,UAAI,CAAC,CAAC,UAAU,UAAU,EAAE,SAAS,OAAO,GAAG;AACvC,cAAA,QAAQ,UAAU,GAAG,KAAK,kBAAkB,IAAI,WAAW,OAAO,aAAa;AAAA,MACvF;AAAA,IACF;AACAF,qBAAe,SAAS,YAAY,GAAG,KAAK,kBAAkB,IAAI,aAAa;AAAA,EACjF;AACI,MAAA,OAAO,oBAAoB,QAAW;AACxC,UAAM,SAASE,eAAa,OAAO,iBAAiB,GAAG,KAAK,kBAAkB;AAC9E;AAAA,MACE;AAAA,MACA,CAAC,QAAQ,aAAa,oBAAoB;AAAA,MAC1C,GAAG,KAAK;AAAA,IAAA;AAEV,QACE,OAAO,SAAS,UAChB,CAAC,CAAC,YAAY,YAAY,UAAU,EAAE,SAAS,OAAO,OAAO,IAAI,CAAC,GAClE;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,kCAAkC;AAAA,IACpE;AACI,QAAA,OAAO,cAAc,QAAW;AAClC,iBAAW,OAAO,WAAW,GAAG,KAAK,8BAA8B,OAAO,gBAAgB;AAAA,IAC5F;AACA,QACE,OAAO,uBAAuB,WAC7B,CAAC,MAAM,QAAQ,OAAO,kBAAkB,KACvC,OAAO,mBAAmB,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,IACnE;AACA,YAAM,QAAQ,UAAU,GAAG,KAAK,4DAA4D;AAAA,IAC9F;AAAA,EACF;AACA,aACQ,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQA,eAAa,OAAO,aAAa,CAAI,GAAA,GAAG,KAAK,YAAY,CAAC,GAC9F;AACA,UAAMb,eAAca,eAAa,KAAK,GAAG,KAAK,cAAc,IAAI,EAAE;AAChD,sBAAAb,cAAa,CAAC,YAAY,aAAa,GAAG,GAAG,KAAK,cAAc,IAAI,EAAE;AACpF,QAAA,OAAOA,aAAY,aAAa,WAAW;AAC7C,YAAM,QAAQ,UAAU,GAAG,KAAK,cAAc,IAAI,2BAA2B;AAAA,IAC/E;AACkB,sBAAAA,aAAY,eAAe,IAAI,GAAG,KAAK,cAAc,IAAI,cAAc;AAAA,EAC3F;AACA,oBAAkB,OAAO,gBAAgB,CAAA,GAAI,GAAG,KAAK,eAAe;AACpEW,mBAAe,OAAO,iBAAiB,GAAG,KAAK,kBAAkB;AACjEA,mBAAe,OAAO,aAAa,GAAG,KAAK,cAAc;AAClD,SAAA;AACT;AAEO,SAAS,eAAe,OAAwC;AACrE,SAAO,IAAI,uBAAuB,UAAU,KAAK,EAAE,CAAC,EAAE;AACxD;AAEsB,eAAA,iBACpB,SACA,QACA,aACwB;AAClB,QAAA,+BAAe;AACrB,aAAW,cAAc,OAAO,OAAO,YAAY,aAAa,GAAG;AAC3D,UAAA,QAAQ,0BAA0B,YAAY,eAAe;AACnE,UAAM,OAAOP,OAAK,SAAS,MAAM,IAAI;AAC/B,UAAA,SAAS,MAAM,WAAW,IAAI;AAC3B,aAAA,IAAI,MAAM,MAAM,MAAM;AAAA,EACjC;AACA,SAAO,oBAAoB,QAAQ,aAAa,UAAU,MAAM,OAAO,IAAI;AAC7E;AAEA,eAAsB,aACpB,SACA,aACA,QACA,aACe;AACf,QAAM,YAAY,MAAM,iBAAiB,SAAS,QAAQ,WAAW;AAC/D,QAAA,UAAU,IAAI;AACpB,QAAM,eAAe,aAAa;AAAA,IAChC,EAAE,MAAM,cAAc,OAAO,QAAQ,OAAO,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,CAAI,EAAE;AAAA,IACpF;AAAA,MACE,MAAM;AAAA,MACN,OAAO,QAAQ,OAAO,GAAG,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC;AAAA,CAAI;AAAA,IACnE;AAAA,IACA,GAAG,UAAU,YAAY,IAAI,CAAC,gBAAgB;AAAA,MAC5C,MAAM,WAAW;AAAA,MACjB,MAAMA,OAAK,SAAS,WAAW,YAAY;AAAA,IAAA,EAC3C;AAAA,EAAA,CACH;AACH;AAEA,eAAsB,YAAY,MAA6C;AACvE,QAAA,UAAU,MAAM,QAAQ,IAAI;AAClC,MAAI,gBAAgB;AACT,aAAA,SAAS,QAAQ,SAAS;AACnC,QACE,MAAM,SAAS,gBAAgB,MAAM,SAAS,oBAC9C,MAAM,SAAS,sBACf,MAAM,KAAK,WAAW,UAAU,KAAK,MAAM,KAAK,SAAS,OAAO,GAChE;AACA,YAAM,QAAQ,MAAM,SAAS,gBAAgB,MAAM,SAAS,mBACxD,mBACA;AACJ,UAAI,MAAM,OAAO;AAAO,cAAM,QAAQ,UAAU,iCAAiC,MAAM,IAAI,EAAE;AAC7F,uBAAiB,MAAM;AAAA,IACzB;AAAA,EACF;AACA,MAAI,gBAAgB,0BAA0B;AACtC,UAAA,QAAQ,UAAU,4CAA4C;AAAA,EACtE;AACA,MAAI,QAAQ,OAAO,IAAI,WAAW,GAAG;AAC7B,UAAA,QAAQ,UAAU,mCAAmC;AAAA,EAC7D;AACA,QAAM,YAAY,QAAQ,OAAO,IAAI,YAAY;AACjD,QAAM,WAAW,QAAQ,OAAO,IAAI,gBAAgB;AAChD,MAAA,CAAC,aAAa,CAAC;AAAgB,UAAA,QAAQ,UAAU,0BAA0B;AAE/E,QAAM,UAAU,YACZ;AAAA,IACA,MAAM,aAAa,SAAS,WAAW,gBAAgB;AAAA,IACvD;AAAA,EAEA,IAAA;AACE,QAAA,MAAM,WACR,IAAI,YAAY,SAAS,EAAE,OAAO,KAAM,CAAA,EAAE;AAAA,IAC1C,MAAM,aAAa,SAAS,UAAU,gBAAgB;AAAA,EAAA,EACtD,SACA;AACJ,QAAM,SAAS,MAAM,gBAAgB,GAAG,IAAI;AAC5C,MAAI,WAAW,UAAU,eAAe,OAAO,MAAM,eAAe,MAAM,GAAG;AACrE,UAAA,QAAQ,UAAU,+DAA+D;AAAA,EACzF;AACA,QAAM,SAAS,UAAU;AACzB,QAAM,YAAY,QAAQ,OAAO,IAAI,kBAAkB;AACvD,MAAI,CAAC;AAAiB,UAAA,QAAQ,gBAAgB,+BAA+B;AAC7E,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,MAAM,aAAa,SAAS,WAAW,wBAAwB;AAAA,MAC/D;AAAA,IACF;AAAA,EAAA;AAGM,aAAA,SAAS,QAAQ,QAAQ,OAAO,CAAC,cAAc,UAAU,KAAK,WAAW,UAAU,CAAC,GAC1F;AACA,UAAM,QAAQ,2BAA2B,KAAK,MAAM,IAAI;AACxD,QAAI,CAAC,OAAO;AACJ,YAAA;AAAA,QACJ;AAAA,QACA,8BAA8B,MAAM,IAAI;AAAA,QACxC,MAAM;AAAA,MAAA;AAAA,IAEV;AACI,QAAA;AACA,QAAA;AACF,iBAAW,IAAI,MAAM,WAAW,MAAM,CAAC,CAAC;AAAA,IAAA,QAClC;AACN,YAAM,QAAQ,gBAAgB,4BAA4B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IACpF;AACA,UAAM,QAAQ;AAAA,MACZ,MAAM,aAAa,SAAS,OAAO,wBAAwB;AAAA,MAC3D,MAAM;AAAA,IAAA;AAER,UAAM,WAAW,IAAI,uBAAuB,SAAS,SAAS,KAAK,EAAE,CAAC;AACtE,QAAI,CAAC,SAAS,OAAO,QAAQ,GAAG;AAC9B,YAAM,QAAQ,gBAAgB,6BAA6B,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IACrF;AAAA,EACF;AACM,QAAA,+BAAe;AACrB,aAAW,SAAS,OAAO,OAAO,YAAY,aAAa,GAAG;AACtD,UAAA,UAAU,0BAA0B,OAAO,eAAe;AAChE,UAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,IAAI;AAC7C,QAAI,CAAC;AAAO,YAAM,QAAQ,iBAAiB,6BAA6B,QAAQ,IAAI,EAAE;AAClF,QAAA,MAAM,SAAS,QAAQ,MAAM;AAC/B,YAAM,QAAQ,iBAAiB,gCAAgC,QAAQ,IAAI,IAAI,QAAQ,IAAI;AAAA,IAC7F;AACA,UAAM,WAAW,YAAY,QAAQ,QAAQ,iBAAiB,QAAQ,MAAM,EAAE;AACrE,aAAA,IAAI,QAAQ,MAAM,MAAM,eAAe,SAAS,OAAO,QAAQ,CAAC;AAAA,EAC3E;AACA,QAAM,YAAY;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,SAAS;AAAA,IACjB,QAAQ,QAAQ;AAAA,IAChB,CAAC,WAAW,CAAC,UAAU,eAAe,OAAO,MAAM,eAAe,MAAM;AAAA,EAAA;AAEpE,QAAA,aAAa,MAAM,WAAW,IAAI;AACjC,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,WAAWC,UAAQ,IAAI;AAAA,IACvB,MAAM,WAAW;AAAA,IACjB,aAAa,UAAU,WAAW,MAAM;AAAA,IACxC,OAAO;AAAA,IACP,KAAK;AAAA,MACH,KAAK,OAAO,OAAO,GAAG;AAAA,MACtB,QAAQ,aAAa,OAAO,OAAO,GAAG,CAAC;AAAA,MACvC,GAAI,OAAO,OAAO,SAAS,WAAW,EAAE,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,MAC/D,UAAU,OAAO,OAAO,QAAQ;AAAA,MAChC,SAAS,OAAO,OAAO,OAAO;AAAA,MAC9B,OAAO,OAAO,OAAO,KAAK;AAAA,MAC1B,mBAAmB,UAAU;AAAA,IAC/B;AAAA,IACA,cAAc,aAAa,WAAW,SAAS,WAAW,WAAW;AAAA,IACrE,iBAAiB,UAAU;AAAA,IAC3B,aAAa,UAAU,YAAY,IAAI,CAAC,gBAAgB;AAAA,MACtD,KAAK,WAAW;AAAA,MAChB,UAAU,WAAW;AAAA,MACrB,UAAU,WAAW;AAAA,MACrB,QAAQ,WAAW;AAAA,MACnB,WAAW,WAAW;AAAA,MACtB,SAAS;AAAA,QACP,MAAM,WAAW;AAAA,QACjB,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,MACrB;AAAA,MACA,GAAI,WAAW,oBAAoB,EAAE,mBAAmB,WAAW,kBAAA,IAAsB,CAAC;AAAA,MAC1F,GAAI,WAAW,sBACX,EAAE,qBAAqB,WAAW,oBAAA,IAClC,CAAC;AAAA,IAAA,EACL;AAAA,IACF,4BAA4B;AAAA,IAC5B,sBAAsB,WAAW,2BAA2B;AAAA,IAC5D,wBAAwB;AAAA,EAAA;AAE5B;AAEO,SAAS,iBAAiB,OAAiD;AAC5E,MAAA;AACF;AAAA,MACE;AAAA,MACA,CAAC,WAAW,cAAc,mBAAmB,eAAe;AAAA,MAC5D;AAAA,IAAA;AAAA,WAEK,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,gBAAgB,MAAM,OAAO;AACtE,UAAA;AAAA,EACR;AACI,MAAA,MAAM,SAAS,MAAM,qBAAqB;AAC5C,UAAM,QAAQ,gBAAgB,yCAAyC,MAAM,SAAS,CAAC,EAAE;AAAA,EAC3F;AACA,QAAM,WAAW,qBAAqB,MAAM,YAAY,8BAA8B;AAClF,MAAA,CAACsB,YAAU,KAAK,QAAQ,KAAK,CAAC,SAAS,WAAW,SAAS,GAAG;AAC1D,UAAA,QAAQ,gBAAgB,yCAAyC;AAAA,EACzE;AACA,QAAM,iBAAiBd,eAAa,MAAM,iBAAiB,mCAAmC;AAC9F,QAAM,eAAeA,eAAa,MAAM,eAAe,iCAAiC;AACjF,SAAA;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,eAAe;AAAA,EAAA;AAEnB;AAEA,SAAS,oBACP,QACA,aACA,UACA,SACA,WACA,gBACe;AACf,sBAAoB,MAAM;AACpB,QAAA,QAAQ,eAAe,MAAM;AAC/B,MAAA,YAAY,eAAe,OAAO;AAC9B,UAAA,QAAQ,gBAAgB,oDAAoD;AAAA,EACpF;AACM,QAAA,aAAa,OAAO,OAAO,OAAO;AAClC,QAAA,YAAY,0BAA0B,MAAM;AAClD,QAAM,UAAU,OAAO;AACjB,QAAA,iCAAiB;AACvB,QAAM,cAAqC,CAAA;AACrC,QAAA,0CAA0B;AACrB,aAAA,CAAC,QAAQ,GAAG,KAAK,OAAO,QAAQ,YAAY,aAAa,GAAG;AACrE,UAAM,QAAQ,0BAA0B,KAAK,iBAAiB,MAAM,EAAE;AACtE,QAAI,MAAM,WAAW;AAAQ,YAAM,QAAQ,iBAAiB,wBAAwB,MAAM,EAAE;AAC5F,UAAM,cAAc,YAAY,QAAQ,iBAAiB,MAAM,EAAE;AACjE,UAAM,UAAU,SAAS,IAAI,MAAM,IAAI;AACvC,QAAI,CAAC;AAAS,YAAM,QAAQ,iBAAiB,uBAAuB,MAAM,IAAI,IAAI,MAAM,IAAI;AAC5F,QAAI,QAAQ,SAAS,MAAM,QAAQ,QAAQ,WAAW,aAAa;AACjE,YAAM,QAAQ,WAAW,yCAAyC,MAAM,IAAI,IAAI,MAAM,IAAI;AAAA,IAC5F;AACA,QAAI,oBAAoB,IAAI,MAAM,YAAY,GAAG;AAC/C,YAAM,QAAQ,iBAAiB,yCAAyC,MAAM,YAAY,EAAE;AAAA,IAC9F;AACoB,wBAAA,IAAI,MAAM,cAAc,KAAK;AAAA,EACnD;AAEM,QAAA,sCAAsB;AAC5B,aACQ,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,OAAO,EAAE;AAAA,IAAK,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,MAClE,KAAK,cAAc,KAAK;AAAA,EAAA,GAE1B;AACA,qCAAiC,GAAG;AACpC,UAAM,OAAOA,eAAa,SAAS,mBAAmB,GAAG,EAAE;AAC3D;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,mBAAmB,GAAG;AAAA,IAAA;AAEpB,QAAA,KAAK,eAAe,QAAW;AACjC,YAAM,QAAQ,kBAAkB,8CAA8C,GAAG,EAAE;AAAA,IACrF;AACA,UAAM,QAAQ,qBAAqB,KAAK,QAAQ,mBAAmB,GAAG,SAAS;AACzE,UAAA,WAAW,eAAe,OAAO,GAAG;AACtC,QAAA,SAAS,YAAY,YAAY;AACnC,YAAM,QAAQ,aAAa,cAAc,GAAG,yBAAyB,UAAU,EAAE;AAAA,IACnF;AACA,UAAM,aAAa,kBAAkB,SAAS,MAAM,GAAG;AACvD,UAAM,kBAAkB,WAAW,SAAS,IAAI,SAAS,EAAE,IACvD,WAAW,MAAM,GAAG,CAAC,UAAU,SAAS,CAAC,IACzC;AACJ,QACE,eAAe,cACd,CAAC,mBAAmB,gBAAgB,SAAS,GAAG,KAC/C,CAAC,wBAAwB,KAAK,eAAe,IAC/C;AACA,YAAM,QAAQ,aAAa,cAAc,GAAG,mCAAmC;AAAA,IACjF;AACA,UAAM,WAAW,qBAAqB,KAAK,WAAW,mBAAmB,GAAG,YAAY;AACpF,QAAA,CAACc,YAAU,KAAK,QAAQ,KAAK,CAAC,SAAS,WAAW,MAAM,GAAG;AAC7D,YAAM,QAAQ,gBAAgB,cAAc,GAAG,2BAA2B;AAAA,IAC5E;AACM,UAAA,gBAAgB,YAAY,gBAAgB,QAAQ;AAC1D,QAAI,CAAC;AAAe,YAAM,QAAQ,gBAAgB,8BAA8B,GAAG,EAAE;AAC/E,UAAA,WAAW,IAAI,uBAAuB,IAAI,cAAc,aAAa,EAAE,CAAC,EAAE;AAChF,QAAI,aAAa,UAAU;AACzB,YAAM,QAAQ,gBAAgB,mCAAmC,GAAG,EAAE;AAAA,IACxE;AACA,UAAM,WAAW,qBAAqB,cAAc,MAAM,eAAe,GAAG,QAAQ;AACpF,UAAM,cAAc,qBAAqB,cAAc,SAAS,eAAe,GAAG,WAAW;AAC7F,QAAI,aAAa,SAAS,QAAQ,gBAAgB,SAAS,SAAS;AAClE,YAAM,QAAQ,aAAa,+CAA+C,GAAG,EAAE;AAAA,IACjF;AACA,QAAI,cAAc,UAAU,OAAO,SAAS,cAAc,WAAW,OAAO,QAAQ;AAClF,YAAM,QAAQ,aAAa,mDAAmD,GAAG,EAAE;AAAA,IACrF;AACA,UAAM,WAAW,cAAc;AAE7B,QAAA,aAAa,UACb,OAAO,KAAKd,eAAa,UAAU,eAAe,GAAG,QAAQ,CAAC,EAAE,QAChE;AACM,YAAA;AAAA,QACJ;AAAA,QACA,yDAAyD,GAAG;AAAA,MAAA;AAAA,IAEhE;AACM,UAAA,QAAQ,oBAAoB,IAAI,GAAG;AACzC,QAAI,CAAC;AAAO,YAAM,QAAQ,iBAAiB,gCAAgC,GAAG,EAAE;AAChF,QAAI,MAAM,SAAS,GAAG,GAAG,aAAa,MAAM,WAAW,UAAU;AAC/D,YAAM,QAAQ,iBAAiB,cAAc,GAAG,kCAAkC;AAAA,IACpF;AACA,UAAM,WAAW,kBAAkB,cAAc,MAAM,eAAe,GAAG,QAAQ;AACjF,QAAI,aAAa,MAAM;AAAM,YAAM,QAAQ,WAAW,8BAA8B,GAAG,EAAE;AACzF;AAAA,MACE,qBAAqB,cAAc,SAAS,eAAe,GAAG,WAAW;AAAA,MACzE,MAAM;AAAA,MACN,YAAY,MAAM,QAAQ,iBAAiB,MAAM,MAAM,EAAE;AAAA,MACzD;AAAA,IAAA;AAEF,UAAM,WAAW,4BAA4B,KAAK,UAAU,mBAAmB,GAAG,WAAW;AAC7F,6BAAyB,KAAK,QAAQ;AACtC,QAAI,KAAK,aAAa,UAAa,OAAO,KAAK,aAAa,WAAW;AACrE,YAAM,QAAQ,UAAU,6BAA6B,GAAG,EAAE;AAAA,IAC5D;AACA,UAAM,kBAAkB;AAAA,MACtB,KAAK;AAAA,MACL,mBAAmB,GAAG;AAAA,IAAA;AAExB,UAAM,oBAAoB;AAAA,MACxB,KAAK;AAAA,MACL,mBAAmB,GAAG;AAAA,IAAA;AAExB,QAAI,qBAAqB,CAAC,cAAc,KAAK,iBAAiB,GAAG;AAC/D,YAAM,QAAQ,UAAU,gCAAgC,GAAG,EAAE;AAAA,IAC/D;AACA,eAAW,IAAI,QAAQ;AACvB,oBAAgB,IAAI,QAAQ;AAC5B,gBAAY,KAAK;AAAA,MACf;AAAA,MACA,UAAU,YAAY,gBAAgB,GAAG,KAAK;AAAA,MAC9C,UAAU,KAAK,aAAa,SAAY,OAAO,KAAK;AAAA,MACpD,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,cAAc,MAAM;AAAA,MACpB,cAAc,MAAM;AAAA,MACpB,gBAAgB,MAAM;AAAA,MACtB,GAAI,kBAAkB,EAAE,mBAAmB,oBAAoB,CAAC;AAAA,MAChE,GAAI,oBAAoB,EAAE,qBAAqB,sBAAsB,CAAC;AAAA,IAAA,CACvE;AAAA,EACH;AACA,MAAI,YAAY,WAAW;AAAS,UAAA,QAAQ,UAAU,mCAAmC;AACzF,aAAW,OAAO,OAAO,KAAK,YAAY,eAAe,GAAG;AAC1D,QAAI,CAAC,WAAW,IAAI,GAAG,GAAG;AACxB,YAAM,QAAQ,gBAAgB,oCAAoC,GAAG,EAAE;AAAA,IACzE;AAAA,EACF;AACI,MAAA,oBAAoB,SAAS,YAAY,QAAQ;AAC7C,UAAA,QAAQ,iBAAiB,uDAAuD;AAAA,EACxF;AACI,MAAA,gBAAgB,SAAS,YAAY,QAAQ;AACzC,UAAA,QAAQ,kBAAkB,0CAA0C;AAAA,EAC5E;AACO,SAAA;AAAA,IACL;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB;AAAA,EAAA;AAEJ;AAEO,SAAS,oBAAoB,QAAuC;AACzE;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEE,MAAA,OAAO,mBAAmB,GAAG;AACzB,UAAA,QAAQ,UAAU,iCAAiC;AAAA,EAC3D;AACA,aACQ,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAEF;AACA,yBAAqB,OAAO,KAAK,GAAG,UAAU,KAAK,EAAE;AAAA,EACvD;AACA,MAAI,OAAO,aAAa;AAAa,UAAA,QAAQ,UAAU,6BAA6B;AACpF,MAAI,CAAC,CAAC,WAAW,QAAQ,OAAO,SAAS,cAAc,EAAE,SAAS,OAAO,OAAO,QAAQ,CAAC,GAAG;AACpF,UAAA,QAAQ,UAAU,4BAA4B;AAAA,EACtD;AACA,MAAI,OAAO,SAAS;AAAgC,yBAAA,OAAO,MAAM,aAAa;AAC/DF,mBAAA,OAAO,WAAW,kBAAkB;AACnD,aAAW,SAAS,CAAC,QAAQ,YAAY,GAAG;AACpC,UAAA,SAAS,OAAO,KAAK;AAC3B,QACE,WAAW,WACV,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,KAC3C,OAAO,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ,IAClD;AACA,YAAM,QAAQ,UAAU,UAAU,KAAK,gDAAgD;AAAA,IACzF;AAAA,EACF;AACI,MAAA,OAAO,YAAY,QAAW;AAChC,UAAM,SAAS,qBAAqB,OAAO,SAAS,gBAAgB;AAChE,QAAA;AACE,UAAA,MAAM,WAAW,MAAM;AAAA,IAAA,QACrB;AACA,YAAA,QAAQ,UAAU,oCAAoC;AAAA,IAC9D;AAAA,EACF;AACA,aAAW,SAAS,CAAC,aAAa,YAAY,GAAG;AAC3C,QAAA,OAAO,KAAK,MAAM;AAAW;AACjC,UAAM,UAAUE,eAAa,OAAO,KAAK,GAAG,UAAU,KAAK,EAAE;AAC7D,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACrC,YAAM,QAAQ,UAAU,UAAU,KAAK,iCAAiC;AAAA,IAC1E;AACA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClDA,qBAAa,OAAO,UAAU,KAAK,IAAI,GAAG,EAAE;AAAA,IAC9C;AAAA,EACF;AACkB,oBAAA,OAAO,aAAa,oBAAoB;AACxC,oBAAA,OAAO,kBAAkB,yBAAyB;AACpE,MAAI,kBAAkB,OAAO,KAAK,YAAY,MAAM,GAAG;AAC/C,UAAA,QAAQ,UAAU,sCAAsC;AAAA,EAChE;AACa,eAAA,OAAO,OAAO,GAAG,CAAC;AAC/B,WAAS,OAAO,OAAO,KAAK,GAAG,OAAO;AACtC,WAAS,OAAO,OAAO,UAAU,GAAG,YAAY;AAChD,WAAS,OAAO,OAAO,MAAM,GAAG,QAAQ;AACpC,MAAA,OAAO,gBAAgB,UAAa,CAAC,MAAM,QAAQ,OAAO,WAAW,GAAG;AACpE,UAAA,QAAQ,UAAU,qCAAqC;AAAA,EAC/D;AACA,sBAAoB,OAAO,eAAe,CAAC,GAAG,oBAAoB;AAC9D,MAAA,OAAO,qBAAqB,UAAa,CAAC,MAAM,QAAQ,OAAO,gBAAgB,GAAG;AAC9E,UAAA,QAAQ,UAAU,0CAA0C;AAAA,EACpE;AAC0B,4BAAA,OAAO,qBAAqB,4BAA4B;AAClF,QAAM,UAAUA,eAAa,OAAO,UAAU,iBAAiB;AAC/D,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAC/B,UAAA,QAAQ,UAAU,mCAAmC;AAAA,EAC7D;AACI,MAAA,OAAO,aAAa,gBAAgB;AACjB,yBAAA,OAAO,MAAM,aAAa;AAC/C,QAAI,OAAO,KAAK,OAAO,EAAE,KAAA,MAAW,gBAAgB;AAC5C,YAAA,QAAQ,UAAU,oEAAoE;AAAA,IAC9F;AAAA,EACF;AACA,4BAA0B,MAAM;AAClC;AAEA,SAAS,0BAA0B,QAAyC;AACtE,MAAA;AACF,WAAO,mBAAmB,OAAO,OAAO,GAAG,CAAC;AAAA,WACrC,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,aAAa,MAAM,OAAO;AACnE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,0BAA0B,OAAgB,OAAkC;AAC7E,QAAA,QAAQA,eAAa,OAAO,KAAK;AACzB,gBAAA,OAAO,CAAC,gBAAgB,QAAQ,UAAU,QAAQ,QAAQ,GAAG,KAAK;AAChF,QAAM,aAAa,qBAAqB,MAAM,cAAc,GAAG,KAAK,eAAe;AACnF,mCAAiC,UAAU;AAC3C,QAAM,OAAO,qBAAqB,MAAM,MAAM,GAAG,KAAK,OAAO;AACzD,MAAA,SAAS,GAAG,UAAU,WAAW;AACnC,UAAM,QAAQ,iBAAiB,yBAAyB,IAAI,EAAE;AAAA,EAChE;AACA,MAAI,MAAM,WAAW;AAAU,UAAM,QAAQ,iBAAiB,2BAA2B,IAAI,EAAE;AAC/F,QAAM,OAAO,kBAAkB,MAAM,MAAM,GAAG,KAAK,OAAO;AAC1D,QAAM,SAAS,qBAAqB,MAAM,QAAQ,GAAG,KAAK,SAAS;AACvD,cAAA,QAAQ,GAAG,KAAK,SAAS;AACrC,SAAO,EAAE,cAAc,YAAY,MAAM,QAAQ,UAAU,MAAM;AACnE;AAEA,SAAS,qBAAqB,SAAiB,MAAc,QAAgB,KAAmB;AAC1F,MAAA;AACA,MAAA;AACM,YAAA,IAAI,QAAQ,WAAW,OAAO;AAAA,EAAA,QAChC;AACN,UAAM,QAAQ,WAAW,yCAAyC,GAAG,EAAE;AAAA,EACzE;AACI,MAAA,CAAC,CAAC,UAAU,QAAQ,EAAE,SAAS,MAAM,SAAS,GAAG;AACnD,UAAM,QAAQ,WAAW,yCAAyC,GAAG,EAAE;AAAA,EACzE;AACM,QAAA,OAAO,IAAI,WAAW,MAAM;AAClC,QAAM,WAAW,MAAM,cAAc,WACjC,IAAI,QAAQ,iBAAiB,MAAM,IAAI,IACvC,IAAI,QAAQ,iBAAiB,IAAI;AACrC,MAAI,MAAM,SAAA,MAAe,SAAS,YAAY;AAC5C,UAAM,QAAQ,WAAW,wCAAwC,GAAG,EAAE;AAAA,EACxE;AACF;AAEA,SAAS,eAAe,OAAe,KAAgD;AAC/E,QAAA,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,EAAE,WAAW,GAAG,GAAG;AAC5E,UAAM,QAAQ,aAAa,cAAc,GAAG,mCAAmC;AAAA,EACjF;AACO,SAAA,EAAE,MAAM,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC;AAC3C;AAEA,SAAS,kBAAkB,aAAqB,KAAqB;AAC7D,QAAA,QAAQ,YAAY,MAAM,GAAG;AAC7B,QAAA,mCAAmB,IAAI;AAAA,IAC3B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,QAAM,SAAS,MAAM,SAAS,KAAK,aAAa,IAAI,MAAM,CAAC,CAAC,IACxD,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG,IACvB,MAAM,KAAK,GAAG;AAClB,MAAI,CAAC,UAAU,OAAO,MAAM,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,wBAAwB,KAAK,KAAK,CAAC,GAAG;AACtF,UAAM,QAAQ,aAAa,cAAc,GAAG,8BAA8B;AAAA,EAC5E;AACO,SAAA;AACT;AAEA,SAAS,gBAAgB,KAAsC;AACvD,QAAA,WAAW,IAAI,MAAM,GAAG;AAC9B,MAAI,SAAS,WAAW,KAAK,CAAC,SAAS,CAAC;AAAS,UAAA,QAAQ,UAAU,yBAAyB;AACxF,MAAA;AACI,UAAA,aAAa,SAAS,CAAC,EAAE,WAAW,KAAK,GAAG,EAAE,WAAW,KAAK,GAAG;AACjE,UAAA,SAAS,WAAW,OAAO,KAAK,KAAK,WAAW,SAAS,CAAC,IAAI,GAAG,GAAG;AACpE,UAAA,SAAS,KAAK,MAAM;AACpB,UAAA,QAAQ,WAAW,KAAK,QAAQ,CAAC,cAAc,UAAU,WAAW,CAAC,CAAC;AACrE,WAAA,gBAAgB,OAAO,gBAAgB;AAAA,WACvC,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AAChC,UAAA,QAAQ,UAAU,sCAAsC;AAAA,EAChE;AACF;AAEA,SAAS,gBAAgB,OAAmB,OAAwC;AAClF,SAAOA,eAAa,eAAe,OAAO,KAAK,GAAG,KAAK;AACzD;AAEA,SAAS,eAAe,OAAmB,OAAwB;AAC7D,MAAA;AACF,WAAO,KAAK,MAAM,IAAI,YAAY,SAAS,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK,CAAC;AAAA,WAClE,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,UAAM,QAAQ,YAAY,GAAG,KAAK,oBAAoB;AAAA,EACxD;AACF;AAEA,SAAS,SAAS,OAAe,OAA+C;AACxE,QAAA,QAAQ,yBAAyB,KAAK,KAAK;AACjD,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,eAAe,GAAG,KAAK,gBAAgB;AACjE,SAAA,EAAE,QAAQ,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC;AACxC;AAEA,SAAS,YAAY,OAAe,OAAuB;AACnD,QAAA,QAAQ,cAAc,KAAK,KAAK;AACtC,MAAI,CAAC;AAAO,UAAM,QAAQ,UAAU,GAAG,KAAK,oCAAoC;AACzE,SAAA,MAAM,CAAC,EAAE;AAClB;AAEA,SAAS,4BACP,OACA,OACoC;AAChC,MAAA;AACK,WAAA,kBAAkB,OAAO,KAAK;AAAA,WAC9B,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,yBAAyB,KAAa,UAAoD;AAC7F,MAAA;AACF,6BAAyB,KAAK,UAAU,mBAAmB,GAAG,WAAW;AAAA,WAClE,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEA,SAAS,iCAAiC,MAAoB;AACxD,MAAA;AACF,2BAAuB,IAAI;AAAA,WACpB,OAAO;AACd,QAAI,iBAAiB;AAAkB,YAAA,QAAQ,UAAU,MAAM,OAAO;AAChE,UAAA;AAAA,EACR;AACF;AAEgB,SAAAA,eAAa,OAAgB,OAAwC;AAC/E,MAAA,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAC/D,UAAM,QAAQ,UAAU,GAAG,KAAK,oBAAoB;AAAA,EACtD;AACO,SAAA;AACT;AAEgB,SAAA,qBAAqB,OAAgB,OAAuB;AAC1E,MAAI,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ;AAC9C,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACrD;AACO,SAAA;AACT;AAEA,SAAS,uBAAuB,OAAgB,OAAmC;AACjF,SAAO,UAAU,SAAY,SAAY,qBAAqB,OAAO,KAAK;AAC5E;AAEA,SAAS,kBAAkB,OAAgB,OAAuB;AAC5D,MAAA,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC1E,UAAM,QAAQ,UAAU,GAAG,KAAK,sCAAsC;AAAA,EACxE;AACO,SAAA;AACT;AAEA,SAAS,WAAW,OAAgB,OAAe,SAAyB;AACpE,QAAA,SAAS,kBAAkB,OAAO,KAAK;AAC7C,MAAI,SAAS;AAAS,UAAM,QAAQ,UAAU,GAAG,KAAK,eAAe;AAC9D,SAAA;AACT;AAEA,SAAS,gBAAgB,OAAgB,OAAqB;AAC5D,MAAI,UAAU,UAAa,OAAO,UAAU,WAAW;AACrD,UAAM,QAAQ,UAAU,GAAG,KAAK,kBAAkB;AAAA,EACpD;AACF;AAEA,SAASF,iBAAe,OAAgB,OAAqB;AAC3D,MAAI,UAAU,UAAa,OAAO,UAAU,UAAU;AACpD,UAAM,QAAQ,UAAU,GAAG,KAAK,mBAAmB;AAAA,EACrD;AACF;AAEA,SAAS,kBAAkB,OAAgB,OAAwC;AAC3E,QAAA,SAASE,eAAa,OAAO,KAAK;AACpC,MAAA,OAAO,OAAO,MAAM,EAAE,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAClE,UAAM,QAAQ,UAAU,GAAG,KAAK,yBAAyB;AAAA,EAC3D;AACO,SAAA;AACT;AAEA,SAAS,kBACP,OACA,SACA,OACM;AACA,QAAA,WAAW,IAAI,IAAI,OAAO;AAChC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC;AAC/D,MAAA;AAAS,UAAM,QAAQ,UAAU,GAAG,KAAK,IAAI,OAAO,iBAAiB;AAC3E;AAEgB,SAAA,cACd,OACA,SACA,OACM;AACA,QAAA,WAAW,IAAI,IAAI,OAAO;AAChC,QAAM,UAAU,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,GAAG,CAAC;AACrE,MAAI,QAAQ,QAAQ;AACZ,UAAA,IAAI,WAAW,4BAA4B,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,iBAAiB;AAAA,EAC1F;AACF;AAEA,SAAS,QAAQ,OAAe,SAAiB,OAA2B;AAC1E,SAAO,IAAI,UAAU,mBAAmB,SAAS,GAAG,OAAO;AAAA,IACzD;AAAA,IACA,GAAI,QAAQ,EAAE,OAAOa,WAAS,KAAK,MAAM,CAAC;AAAA,EAAA,CAC3C;AACH;AAEO,SAAS,iBAAiB,OAAwB;AAChD,SAAA,YAAY,IAAI,cAAc,OAAO,IAAI,sBAAsB,KAAK,CAAC,CAAC;AAC/E;AAEgB,SAAA,wBAAwB,OAAgB,aAAmC;AACrF,MAAA,CAAC,MAAM,QAAQ,KAAK;AAAS,UAAA,QAAQ,UAAU,mCAAmC;AAChF,QAAA,0BAAU;AAChB,aAAW,OAAO,OAAO;AACjB,UAAA,IAAIb,eAAa,KAAK,iBAAiB;AAC7C,UAAM,KAAK,qBAAqB,EAAE,YAAY,YAAY;AAC1D,QAAI,CAAC,mBAAmB,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE;AAAS,YAAA,QAAQ,UAAU,iCAAiC;AAC1G,QAAI,IAAI,EAAE;AACN,QAAA,CAAC,OAAO,cAAc,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;AAAS,YAAA,QAAQ,UAAU,yBAAyB;AAC5G,QAAA,CAAC,MAAM,QAAQ,EAAE,SAAS,KAAK,CAAC,EAAE,UAAU;AAAc,YAAA,QAAQ,UAAU,mBAAmB;AACxF,eAAA,eAAe,EAAE,WAAW;AAC/B,YAAA,IAAIA,eAAa,aAAa,UAAU;AAC1C,UAAA,CAAC,CAAC,QAAQ,WAAW,UAAU,KAAK,EAAE,KAAK,CAAK,MAAA,KAAK,CAAC;AAAS,cAAA,QAAQ,UAAU,gBAAgB;AACrG,iBAAW,OAAO,CAAC,QAAQ,WAAW,QAAQ,GAAG;AACzC,cAAA,IAAI,EAAE,GAAG;AACX,YAAA,MAAM,UAAa,EAAE,OAAO,MAAM,YAAY,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,OAAK,OAAO,MAAM,YAAY,EAAE,MAAM;AAAU,gBAAA,QAAQ,UAAU,wBAAwB;AAAA,MACrM;AACA,UAAI,EAAE,YAAY,WAAc,CAAC,OAAO,cAAc,EAAE,OAAO,KAAK,OAAO,EAAE,OAAO,IAAI;AAAU,cAAA,QAAQ,UAAU,iBAAiB;AAAA,IACvI;AACA,UAAM,UAAUA,eAAa,EAAE,SAAS,SAAS;AACjD,QAAI,OAAO,KAAK,OAAO,EAAE,WAAW,KAAK,CAAC,QAAQ;AAAY,YAAA,QAAQ,UAAU,+BAA+B;AAC/G,UAAMgB,QAAOhB,eAAa,QAAQ,MAAM,MAAM;AAC9C,UAAM,QAAQA,eAAagB,MAAK,OAAO,OAAO;AAC9C,UAAM,OAAO,qBAAqB,MAAM,MAAM,YAAY;AACtD,QAAA;AACA,QAAA;AAAE,gBAAU,mBAAmB,IAAI;AAAA,IAAA,QAAU;AAAQ,YAAA,QAAQ,UAAU,oBAAoB;AAAA,IAAE;AACjG,QAAI,MAAM,SAAS,SAAS,CAAC,QAAQ,WAAW,GAAG,KAAK,QAAQ,WAAW,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,IAAI,KAAK,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,GAAG,KAAK,SAAS,KAAK,OAAO;AAAS,YAAA,QAAQ,UAAU,kBAAkB;AAC9P,QAAIA,MAAK,aAAa,WAAc,CAAC,OAAO,cAAcA,MAAK,QAAQ,KAAK,OAAOA,MAAK,QAAQ,IAAI,KAAK,OAAOA,MAAK,QAAQ,IAAI;AAAW,YAAA,QAAQ,UAAU,wBAAwB;AACtL,QAAIA,MAAK,WAAW,UAAaA,MAAK,WAAW,SAASA,MAAK,WAAW;AAAe,YAAA,QAAQ,UAAU,uBAAuB;AAClI,QAAIA,MAAK,gBAAgB,UAAa,OAAOA,MAAK,gBAAgB;AAAiB,YAAA,QAAQ,UAAU,qBAAqB;AACtH,QAAAA,MAAK,UAAU,WAAc,CAAC,MAAM,QAAQA,MAAK,KAAK,KAAK,CAACA,MAAK,MAAM,UAAUA,MAAK,MAAM,KAAK,OAAK,MAAM,UAAU,MAAM,MAAM;AAAU,YAAA,QAAQ,UAAU,eAAe;AAC7K,QAAA,EAAE,gBAAgB,WAAc,CAAC,MAAM,QAAQ,EAAE,WAAW,KAAK,EAAE,YAAY,KAAK,WAAS,CAAC,YAAY,KAAK,CAAA,MAAK,KAAK,OAAO,MAAM,YAAa,EAA8B,eAAe,KAAK,CAAC;AAAU,YAAA,QAAQ,UAAU,4CAA4C;AAAA,EACpR;AACO,SAAA;AACT;AC5pCO,MAAM,kBAAkB;AACxB,MAAM,eAAe;AACrB,MAAM,cAAc;AACpB,MAAM,mBAAmB;ACqChC,MAAM,WAAW,CAAC,SAAiB,UAAU,KAAK,SAAS,IAAI;AAC/D,MAAM,UAAU,CAAC,SAAiB,UAAU,KAAK,QAAQ,IAAI;AAC7D,MAAM1B,eAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAM,OAAO,IAAI,UAAoB,QAAA,EAAU,KAAK,KAAK,GAAG,KAAK;AACjE,MAAM,WAAW,CAAC,MAAc,OAAe,UAAU,KAAK,SAAS,MAAM,EAAE;AAC/E,MAAME,YAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,gCAAgC,IAAI,MAAM,KAAK,KAAK;AAC1D,MAAM,iBAAiB;AACvB,MAAM,WAAW;AACjB,MAAMyB,YAAU;AAChB,MAAM,YAAY;AAClB,MAAM,YAAY;AAClB,MAAM,sBAAsB;AAC5B,MAAMpB,kBAAgB,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AAC5E,MAAM,YAAY,CAAC,cAAc,UAAU,UAAU,cAAc;AACnE,MAAM,aAAsF;AAAA,EAC1F,cAAc,EAAE,KAAK,OAAO,UAAU,OAAO,cAAc,SAAS;AAAA,EACpE,QAAQ,EAAE,KAAK,UAAU,UAAU,QAAQ,cAAc,SAAS;AAAA,EAClE,gBAAgB,EAAE,KAAK,gBAAgB,UAAU,gBAAgB,cAAc,SAAS;AAC1F;AAmFA,SAAS,4BACP,KACA,UACQ;AACF,QAAA,YAAY,YAAY,gBAAgB,GAAG;AACjD,QAAM,KAAK,WAAW;AACtB,QAAM,OAAO,WAAW;AACpB,MAAA,CAAC,MAAM,CAAC;AAAa,WAAA;AACnB,QAAA,gBAAgB,OAAO,UAAU,UAAU;AAC3C,QAAA,kBAAkB,SAAS,WAAW,UAAU;AACtD,QAAM,YAAY,WAAW,aAAa,IAAI,eAAe;AAC7D,8BAAW,IAAI;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAA,GAAE,IAAI,SAAS,IACd,YACA;AACN;AAEgB,SAAA,iBAAiB,eAAuC,IAAmB;AACzF,QAAM,SAAS,aAAa,UAAU,IAAI,kBAAkB;AACtD,QAAA,MAAM,aAAa,OAAO;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,uBAAuB,iCAAiC;AAAA,QACnE,SAAS,OAAO,KAAK,UAAU,MAAM,cAAc,KAAK,KAAK;AAAA,MAC/D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aAAa;AAAA,UACX,EAAE,MAAM,eAAe,aAAa,kCAAkC,UAAU,MAAM;AAAA,QACxF;AAAA,QACA,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,YAAY,MAAM,SAAS;AAAA,UACxD,EAAE,MAAM,SAAS,aAAa,aAAa,MAAM,SAAS;AAAA,UAC1D;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,WAAW,aAAa,uBAAuB,MAAM,SAAS;AAAA,UACtE,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,oBAAoB,MAAM,SAAS;AAAA,QAC1F;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,aAAa,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC5C,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACtC,MAAM,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YACxC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACvC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACxC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,UAC1C;AAAA,UACA,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,OAAO,MAAM;AAAA,MACrE;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,gCAAgC;AAAA,QAC3C,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,OAAO,QAAQ,GAAG;AAAA,MAC3E;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,+BAA+B,UAAU,MAAM;AAAA,QAClF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,+BAA+B;AAAA,QAC1C,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,KAAK;AAAA,MAC7D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,oBAAoB;AAAA,QACpE,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UAC1D,UAAU,CAAC,WAAW;AAAA,UACtB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,+CAA+C;AAAA,QAC1D,SAAS,OAAO,KAAK,UACnB,MAAM,YAAYqB,iBAAe,KAAK,kBAAkB,OAAO,WAAW,CAAC,CAAC;AAAA,MAChF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,UACX,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,MAAM;AAAA,QAC1E;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,UACzD,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcrB;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,QAC9C,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,eAAe;AAAA,QACf,UAAU,CAAC,wDAAwD;AAAA,QACnE,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,KAAK;AAAA,MAC9D;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,6BAAqC;AAC5C,QAAM,aAAa,QAAA,EAAU,IAAI,mBAAmB;AACpD,MAAI,eAAe;AAAW,WAAO,KAAK,MAAM,KAAK,QAAQ,GAAI;AACjE,MAAI,CAAC,QAAQ,KAAK,UAAU,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,UAAU,OAAO,UAAU;AACjC,MAAI,CAAC,OAAO,cAAc,OAAO,GAAG;AAClC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AACtD,QAAA,UAAUqB,iBAAe,KAAK,SAAS;AAC7C,QAAM,SAAyC,CAAA;AAC3C,MAAA;AACA,MAAA;AAEI,aAAA,CAAC,MAAM,IAAI,KAAK;AAAA,IACpB,CAAC,gBAAgB,KAAK,SAAS,UAAU,CAAC;AAAA,IAC1C,CAAC,iBAAiB,KAAK,SAAS,WAAW,CAAC;AAAA,EAAA,GAE9C;AACI,QAAA;AACF,YAAM,QAAQ,MAAM,SAAS,MAAM,IAAI;AACvC,UAAI,SAAS;AAA0B,kBAAA;AAAA;AACvB,mBAAA;AAChB,aAAO,KAAK,EAAE,MAAM,QAAQ,MAAM,MAAM;AAAA,aACjC,OAAO;AACd,aAAO,KAAK;AAAA,QACV;AAAA,QACA,QAAQ,YAAY,OAAO,UAAU,IAAI,YAAY;AAAA,QACrD;AAAA,QACA,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAAA,CAC9D;AAAA,IACH;AAAA,EACF;AACA,MAAI,WAAW,UAAU;AACnB,QAAA;AACI,YAAA,MAAM,aAAa,OAAO;AAC1B,YAAA,OAAO,cAAc,UAAU,GAAG;AACxC,YAAM,iBAA2B,CAAA;AACjC,iBAAW,cAAc,OAAO,OAAO,KAAK,QAAQ,GAAG;AACjD,YAAA,WAAW,OAAO,SAAS;AAAQ;AACvC,cAAM,SAAS1B,UAAQ,SAAS,WAAW,OAAO,IAAI;AAClD,YAAA;AACI,gBAAA,QAAU,EAAA,MAAM,MAAM;AAAA,iBACrB,OAAO;AACV,cAAA,YAAY,OAAO,UAAU;AAAG,2BAAe,KAAK,MAAM;AAAA;AACnD,kBAAA;AAAA,QACb;AAAA,MACF;AACA,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,eAAe,WAAW,IAAI,OAAO;AAAA,QAC7C,SAAS;AAAA,MAAA,CACV;AAAA,aACM,OAAO;AACd,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MAAA,CAC9D;AAAA,IACH;AAAA,EACF;AACA,QAAM,eAAe,MAAM,IAAI,YAAY,WAAW;AACtD,QAAM,cAAc,IAAI,OAAO,eAAe,aAAa;AAC3D,QAAM,UAAU,cAAc,MAAM,IAAI,YAAY,YAAY,WAAW,IAAI;AAC/E,QAAMP,QAAO;AACN,SAAA;AAAA,IACL,SAAS,OAAO,MAAM,CAAC,UAAU,MAAM,WAAW,IAAI;AAAA,IACtD,cAAc;AAAA,IACd,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,GAAG,WAAWA,KAAI;AAAA,IAClB,uBAAuB,yBAAyB,MAAM,yBAAyBA,KAAI,CAAC;AAAA,IACpF,QAAQ;AAAA,MACN,SAAS,eAAe;AAAA,MACxB,MAAM,IAAI,OAAO,QAAQ,SAAS,QAAQ;AAAA,MAC1C,UAAU,IAAI,OAAO,YAAY,SAAS,YAAY;AAAA,MACtD,eAAe;AAAA,IACjB;AAAA,IACA,qBAAqB,MAAM,sBAAsB,IAAI,MAAM;AAAA,IAC3D;AAAA,EAAA;AAEJ;AAEA,eAAe,YACb,KACA,OACA,QACkC;AAClC,QAAM,eAAe,oBAAoB,OAAO,aAAa,KAAK;AAClE,QAAM,aAAa,MAAM,cAAciC,iBAAe,KAAK,YAAY,GAAG,mBAAmB;AACzF,MAAA,OAAO,oBAAoB,OAAO,MAAM,KAAK,iBAAiB,SAAS,UAAU,CAAC;AAChF,QAAA,YAAY,CAAC,IAAI,OAAO,kBAAkB,CAAC,IAAI,eAAe,IAAI,GAAG;AAC3E,MAAI,CAAC;AAAM,WAAO,MAAM,eAAe,KAAK,WAAW,cAAc,MAAM;AACvE,MAAA,QAAQ,oBAAoB,OAAO,OAAO;AAC9C,MAAI,CAAC;AAAO,YAAQ,MAAM,eAAe,KAAK,WAAW,eAAe,OAAO;AAC3E,MAAA,OAAO,oBAAoB,OAAO,MAAM;AAC5C,MAAI,CAAC,MAAM;AACT,WAAO,MAAM;AAAA,MACX;AAAA,MACA;AAAA,MACA,aAAa,UAAU,KAAK,GAAG,CAAC;AAAA,MAChC;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,CAAC,UAAU,SAAS,IAAI,GAAG;AAC7B,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,IAAI,EAAE;AAAA,EACtE;AACI,MAAA,SAAS,oBAAoB,OAAO,QAAQ;AAChD,MAAI,CAAC;AAAQ,aAAS,MAAM,eAAe,KAAK,WAAW,YAAY,QAAQ;AAC/E,QAAM,UAAU,oBAAoB,OAAO,SAAS,KAAK;AACzD,kBAAgB,IAAI;AACpB,kBAAgB,OAAO;AACjB,QAAA,aAAa,aAAa,MAAM,KAAK;AAC3C,QAAM,SAAS,oBAAoB,OAAO,SAAS,KAAK;AACxD,qBAAmB,MAAM;AAErB,MAAA;AACA,MAAA;AACA,MAAA;AACA,MAAAC;AACJ,MAAI,SAAS,UAAU;AACrB,UAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM;AACnC,UAAA,OAAOJ,gBAAc,MAAM,YAAY;AAC7C,oBAAgB,SAAS,WACrB,uBACA,SAAS,YACT,0BACC,MAAM;AACP,YAAM,IAAI,WAAW,4BAA4B,oCAAoC,IAAI,EAAE;AAAA,IAAA;AAEpF,eAAA,EAAE,IAAI,SAAS,KAAK;AAC/B,kBAAc,EAAE,MAAM,gBAAgB,OAAO,OAAO;AACpC,IAAAI,iBAAA,EAAE,MAAM,gBAAgB,OAAO,MAAM,eAAe,UAAU,MAAM;EAAG,OAClF;AACW,oBAAA,WAAW,IAAI,EAAE;AAC3B,UAAA,iBAAiB3B,UAAQ,YAAY,MAAM;AACjD,UAAM,kBAAkBF,aAAW,MAAM,IACrCE,UAAQ,MAAM,IACd,eAAe,SAAS,KAAK,YAAY,WAAW,GAAG,cAAc,CAAC;AAC1E,kBAAc,EAAE,MAAM,QAAQ,MAAM,gBAAgB;AACpD,IAAA2B,iBAAgB,EAAE,MAAM,QAAQ,MAAM,cAAc,YAAY,cAAc;AAC1E,QAAA;AACI,YAAA,QAAU,EAAA,MAAM,cAAc;AAAA,aAC7B,OAAO;AACV,UAAA,YAAY,OAAO,UAAU,GAAG;AAClC,cAAM,IAAI,GAAG,OAAO,uCAAuCA,eAAc,IAAI;AAAA,CAAI;AAAA,MACnF;AAAa,cAAA;AAAA,IACf;AAAA,EACF;AAEA,QAAM,UAAmB;AAAA,IACvB,gBAAgB;AAAA,IAChB,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YAAY,CAAC,WAAW,IAAI,GAAG,YAAY,MAAM;AAAA,IACjD,aAAa,CAAC;AAAA,IACd,eAAe,WAAW,IAAI,GAAG,gBAAgB;AAAA,IACjD,qBAAqB,CAAC;AAAA,EAAA;AAExB,QAAM,WAAW;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW,GAAG,IAAI,IAAI,OAAO;AAAA,IAC7B,UAAU;AAAA,MACR,CAAC,aAAa,GAAG;AAAA,QACf,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EAAA;AAEW,eAAA,EAAE,GAAG,QAAA,CAAS;AAC3B,gBAAc,QAAQ;AAChB,QAAA,UAAU,KAAK,YAAY,WAAW;AAC5C,QAAM,wBAAwB,YAAY,SAAS,SAAS,QAAQ;AAC7D,SAAA;AAAA,IACL,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB,CAAC,KAAK,SAAS,UAAU,GAAG,KAAK,SAAS,WAAW,CAAC;AAAA,IACvE,KAAK;AAAA,MACH,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,YAAY,QAAQ;AAAA,MACpB,aAAa,CAAC;AAAA,MACd,eAAe,QAAQ;AAAA,MACvB,qBAAqB,CAAC;AAAA,IACxB;AAAA,IACA,YAAY;AAAA,MACV,KAAK;AAAA,MACL;AAAA,MACA,QAAQA;AAAA,MACR,UAAU;AAAA,MACV,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,IACjC;AAAA,IACA,YAAY,KAAK,YAAY,WAAW;AAAA,IACxC,WAAW,SAAS;AAAA,IACpB,cAAc,sBAAsB,OAAO;AAAA,EAAA;AAE/C;AAEA,eAAe,aACb,KACA,OACA,QACA,KACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,cAAcD,iBAAe,KAAK,SAAS,GAAG,WAAW;AACzE,QAAA,UAAU,aAAa,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG,UAAU,CAAC;AAC5E,QAAA,WAAW,cAAc,MAAM,SAAS,KAAK,SAAS,WAAW,GAAG,WAAW,GAAG,OAAO;AAC/F,QAAM,iBAAiB1B,UAAQ,SAAS,SAAS,UAAU;AACrD,QAAA,kBAAkB,gBAAgB,mBAAmB;AACrD,QAAA,UAAU,MAAM,gBAAgB,cAAc;AAC9C,QAAA,aAAa,QAAQ,OAAO;AAClC,QAAM,cAAwB,CAAA;AAC9B,aAAW,cAAc,OAAO,OAAO,SAAS,QAAQ,GAAG;AACrD,QAAA,WAAW,OAAO,SAAS,QAAQ;AACzB,kBAAA,KAAK,MAAM,QAAA,EAAU,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,IACrF;AAAA,EACF;AACiB,mBAAA,SAAS,SAAS,WAAW;AAC9C,QAAM,wBAAwB,SAAS,WAAW,OAAO,CAAC;AACpD,QAAA,QAAA,EAAU,MAAM,QAAQ,OAAO,GAAG,EAAE,WAAW,KAAA,CAAM;AAC3D,QAAM,YAAY,MAAM,QAAQ,EAAE,YAAY;AAAA,IAC5C,KAAK,QAAQ,OAAO;AAAA,IACpB,QAAQ;AAAA,EAAA,CACT;AACG,MAAA;AACF,UAAM,WAAiC,CAAA;AAE/B,eAAA,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,SAAS,QAAQ,EAAE;AAAA,MAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MACxE,EAAE,cAAc,CAAC;AAAA,IAAA,GAEnB;AACA,YAAM,cAAc,KAAK,WAAW,GAAG,GAAG,SAAS;AAC/C,UAAA;AACA,UAAA,WAAW,OAAO,SAAS,QAAQ;AAC/B,cAAA,aAAa,MAAM,QAAU,EAAA,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC;AACpF,cAAM,OAAO,MAAM,QAAQ,EAAE,KAAK,UAAU;AAC5C,YAAI,KAAK,aAAa;AACd,gBAAA,yBAAyB,YAAY,WAAW;AAAA,QAAA,WAC7C,KAAK,UAAU,WAAW,cAAc,SAAS,SAAS,GAAG;AAChE,gBAAA,SAAS,MAAM,WAAW,UAAU;AAC1C,gBAAM,aAAa,aAAa,MAAM,QAAU,EAAA,KAAK,UAAU,CAAC;AAChE,gBAAM,QAAQ,EAAE,SAAS,YAAY,WAAW;AAC1C,gBAAA,QAAQ,MAAM,WAAW,UAAU;AACzC,gBAAM,YAAY,aAAa,MAAM,QAAU,EAAA,KAAK,UAAU,CAAC;AACzD,gBAAA,SAAS,MAAM,WAAW,WAAW;AAC3C,cACE,eAAe,aAAa,OAAO,SAAS,MAAM,QAClD,OAAO,WAAW,MAAM,UAAU,OAAO,SAAS,OAAO,QACzD,OAAO,WAAW,OAAO,QACzB;AACA,kBAAM,IAAI,UAAU,kBAAkB,gCAAgC,GAAG,EAAE;AAAA,UAC7E;AAAA,QAAA,OACK;AACL,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,GAAG,GAAG;AAAA,UAAA;AAAA,QAEV;AAAA,MAAA,OACK;AACL,qBAAa,MAAM,OAAO,QAAQ,WAAW,OAAO,KAAK;AACzD,YAAI,CAAC,UAAU,KAAK,WAAW,EAAE,GAAG;AAClC,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,gBAAgB,GAAG;AAAA,UAAA;AAAA,QAEvB;AACA,cAAM,OAAO,KAAK,WAAW,IAAI,WAAW;AAC5C,cAAM,QAAQ,MAAM,OAAO,QAAQ,WAAW,EAAE;AAC5C,YAAA,MAAM,OAAO,WAAW,IAAI;AAC9B,gBAAM,IAAI;AAAA,YACR;AAAA,YACA,kDAAkD,GAAG;AAAA,UAAA;AAAA,QAEzD;AAAA,MACF;AACM,YAAA,SAAS,MAAM,WAAW,WAAW;AAC3C,eAAS,KAAK;AAAA,QACZ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA,QAAQ,EAAE,MAAM,OAAO,MAAM,QAAQ,UAAU,OAAO,MAAM,GAAG;AAAA,QAC/D,GAAI,aAAa,EAAE,QAAQ,eAAe,CAAC;AAAA,MAAA,CAC5C;AAAA,IACH;AAEA,UAAM,YAAY;AAClB,QAAI,CAAC,OAAO,cAAc,SAAS,KAAK,YAAY;AAAS,YAAA,IAAI,MAAM,qBAAqB;AACtF,UAAA,YAAY,mBAAmB,QAAQ,GAAG;AAChD,UAAM,iBAA0D,CAAA;AAChE,UAAM,eAAiD,CAAA;AACvD,UAAM,UAAmD,CAAA;AACzD,UAAM,uBAAoD,CAAA;AACpD,UAAA,mCAAmB;AACzB,eAAW,QAAQ,UAAU;AAC3B,YAAM,cAAc,GAAG,4BAA4B,KAAK,KAAK,KAAK,MAAM,QAAQ,CAAC,IAC/E,cAAc,KAAK,GAAG,CACxB,IAAI,SAAS;AACT,UAAA,aAAa,IAAI,WAAW,GAAG;AACjC,cAAM,IAAI,WAAW,0BAA0B,+BAA+B,WAAW,EAAE;AAAA,MAC7F;AACA,mBAAa,IAAI,WAAW;AAC5B,YAAM,cAAc,KAAK,OAAO,OAAO,MAAM,UAAU,MAAM;AAC7D,YAAM4B,eAAc;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,EAAE,MAAM,KAAK,OAAO,MAAM,QAAQ,aAAa,OAAO,EAAE;AAAA,QACxD;AAAA,MAAA;AAEaA,qBAAAA,aAAY,QAAQ,IAAIA,aAAY;AACnD,UAAI,aAAa,KAAK,OAAO,MAAM,GAAG;AACpC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,qDAAqD,KAAK,GAAG;AAAA,QAAA;AAAA,MAEjE;AACa,mBAAA,KAAK,OAAO,MAAM,IAAI;AAAA,QACjC,cAAc,KAAK;AAAA,QACnB,MAAM,GAAG,KAAK,GAAG;AAAA,QACjB,QAAQ;AAAA,QACR,MAAM,KAAK,OAAO;AAAA,QAClB,QAAQ,KAAK,OAAO;AAAA,MAAA;AAEhB,YAAA,WAAW,KAAK,MAAM;AACpB,cAAA,KAAK,GAAG,IAAI;AAAA,QAClB,QAAQ,GAAG,WAAW,IAAI,QAAQ,OAAO;AAAA,QACzC,WAAWA,aAAY;AAAA,QACvB,GAAI,KAAK,SACL;AAAA,UACA,mBAAmB,KAAK,OAAO;AAAA,UAC/B,qBAAqB,KAAK,OAAO;AAAA,QAAA,IAEjC,CAAC;AAAA,QACL,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,KAAK,MAAM;AAAA,MAAA;AAEF,2BAAA,KAAK,GAAG,IAAI;AAAA,QAC/B,aAAa,KAAK,MAAM,OAAO;AAAA,QAC/B,MAAM,KAAK,OAAO;AAAA,QAClB,QAAQ,KAAK,OAAO;AAAA,QACpB,WAAWA,aAAY;AAAA,MAAA;AAAA,IAE3B;AACA,UAAM,SAAkC;AAAA,MACtC,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,KAAK,QAAQ;AAAA,MACb,MAAM,QAAQ;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,UAAU,QAAQ,WAAW,CAAC;AAAA,MAC9B,QAAQ,QAAQ;AAAA,MAChB,OAAO,QAAQ;AAAA,MACf,YAAY,QAAQ;AAAA,MACpB,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,KAAK,YAAY;AAAA,MACjB,YAAY,QAAQ;AAAA,MACpB,UAAU;AAAA,MACV,WAAW,QAAQ;AAAA,MACnB,GAAI,QAAQ,YAAY,SAAS,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACzE,GAAI,QAAQ,kBAAkB,SAAS,EAAE,kBAAkB,QAAQ,iBAAiB,IAAI,CAAC;AAAA,MACzF,eAAe,QAAQ;AAAA,MACvB,qBAAqB,QAAQ;AAAA,IAAA;AAEzB,UAAA,cAAc,eAAe,MAAM;AACzC,UAAM,cAA+B;AAAA,MACnC,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,iBAAiB;AAAA,MACjB,eAAe;AAAA,IAAA;AAEjB,UAAM,UAAU,KAAK,WAAW,YAAY,GAAG,MAAM;AACrD,UAAM,UAAU,KAAK,WAAW,kBAAkB,GAAG,WAAW;AAChE,UAAM,YAAY,MAAM,iBAAiB,WAAW,QAAQ,WAAW;AACvE,UAAM,iBAAkD,CAAA;AACxD,eACQ,QAAQ;AAAA,MACZ;AAAA,MACA;AAAA,MACA,GAAG,SAAS,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,SAAS;AAAA,IAAA,GAEhD;AACA,YAAM,SAAS,MAAM,WAAW,KAAK,WAAW,IAAI,CAAC;AACtC,qBAAA,IAAI,IAAI,EAAE,MAAM,OAAO,MAAM,QAAQ,UAAU,OAAO,MAAM,GAAG;AAAA,IAChF;AACA,UAAM,WAAyB;AAAA,MAC7B,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,cAAc,WAAW,OAAO;AAAA,MAChC,oBAAoB,UAClB,iBAAiB;AAAA,QACf,KAAK;AAAA,QACL,MAAM;AAAA,QACN,UAAU;AAAA,MACX,CAAA,CACH;AAAA,MACA,mBAAmB;AAAA,MACnB,WAAW,SAAS;AAAA,MACpB,iBAAiB;AAAA,MACjB,aAAa;AAAA,IAAA;AAEf,UAAM,UAAU,KAAK,WAAW,kBAAkB,GAAG,QAAQ;AACvD,UAAA,iBAAiB,WAAW,OAAO;AAClC,WAAA;AAAA,MACL,UAAU;AAAA,MACV,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,mBAAmB;AAAA,MACnB,kBAAkB,UAAU,YAAY;AAAA,MACxC,aAAa,UAAU,YAAY,IAAI,CAAC,UAAU;AAAA,QAChD,KAAK,KAAK;AAAA,QACV,aAAa,SAAS,SAAS,KAAK,GAAG,EAAE,OAAO;AAAA,QAChD,MAAM,KAAK;AAAA,QACX,QAAQ,KAAK;AAAA,QACb,WAAW,KAAK;AAAA,MAAA,EAChB;AAAA,MACF,gBAAgB;AAAA,MAChB,cAAc,qBAAqB,OAAO;AAAA,MAC1C,aAAa;AAAA,IAAA;AAAA,WAER,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,YACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,sBAAsBF,iBAAe,KAAK,SAAS,GAAG,WAAW;AACvF,QAAM,WAAW,MAAM,oBAAoB,SAAS,QAAW,IAAI;AACnE,QAAM,SAAS,MAAM,SAAS,KAAK,SAAS,YAAY,GAAG,YAAY;AACvE,QAAM,cAAc;AAAA,IAClB,MAAM,SAAS,KAAK,SAAS,kBAAkB,GAAG,kBAAkB;AAAA,EAAA;AAEtE,QAAM,YAAY,MAAM,iBAAiB,SAAS,QAAQ,WAAW;AACjE,MAAA,UAAU,mBAAmB,SAAS,mBAAmB;AAC3D,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,YAAY,KAAK,SAAS,IAAI,SAAS,SAAS,QAAQ,OAAO,WAAY,CAAA,EAAE;AACnF,QAAM,YAAY,KAAK,SAAS,SAAS,SAAS;AAC9C,MAAA;AACF,UAAM,aAAa,SAAS,WAAW,QAAQ,WAAW;AACpD,UAAA,aAAa,MAAM,YAAY,SAAS;AAC9C,QAAI,WAAW,IAAI,sBAAsB,SAAS,mBAAmB;AACnE,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACM,UAAA,YAAY,WAAW,SAAS;AAChC,UAAA,SAAS,MAAM,WAAW,SAAS;AAClC,WAAA;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,MACX,MAAM,OAAO;AAAA,MACb,aAAa,UAAU,OAAO,MAAM;AAAA,MACpC,mBAAmB,WAAW,IAAI;AAAA,MAClC,YAAY;AAAA,IAAA;AAAA,WAEP,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,aACb,KACA,OACkC;AAClC,QAAM,YAAY,oBAAoB,OAAO,UAAU,KAAK;AAC5D,QAAM,UAAU,MAAM,cAAcA,iBAAe,KAAK,SAAS,GAAG,WAAW;AACzE,QAAA,UAAU,aAAa,MAAM,SAAS,KAAK,SAAS,UAAU,GAAG,UAAU,CAAC;AAClF,QAAM,WAAW;AAAA,IACf,MAAM,SAAS,KAAK,SAAS,WAAW,GAAG,WAAW;AAAA,IACtD;AAAA,EAAA;AAEF,QAAM,iBAAiB1B,UAAQ,SAAS,SAAS,UAAU;AAC3D,wBAAsB,KAAK,SAAS,gBAAgB,CAAE,CAAA;AAChD,QAAA,kBAAkB,gBAAgB,qBAAqB;AACvD,QAAA,UAAU,MAAM,gBAAgB,cAAc;AAChD,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,OAAO;AAAA,WACtB,OAAO;AACV,QAAA,YAAY,OAAO,UAAU,GAAG;AAClC,aAAO,EAAE,UAAU,SAAS,UAAU,SAAS,SAAS;IAC1D;AACM,UAAA;AAAA,EACR;AACA,QAAM,cAAwB,CAAA;AAC9B,aAAW,cAAc,OAAO,OAAO,SAAS,QAAQ,GAAG;AACrD,QAAA,WAAW,OAAO,SAAS,QAAQ;AACjC,UAAA;AACU,oBAAA,KAAK,MAAM,QAAA,EAAU,SAASA,UAAQ,SAAS,WAAW,OAAO,IAAI,CAAC,CAAC;AAAA,eAC5E,OAAO;AACV,YAAA,CAAC,YAAY,OAAO,UAAU;AAAS,gBAAA;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACsB,wBAAA,KAAK,SAAS,SAAS,WAAW;AACxD,QAAM,oBAAoB,SAAS,WAAW,OAAO,GAAG,MAAM,qBAAqB;AAC/E,MAAA,CAAC,IAAI,WAAW;AACd,QAAA,IAAI,OAAO,kBAAkB,IAAI,eAAe,CAAC,IAAI,GAAG,iBAAiB;AAC3E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,SAAS,MAAM,IAAI,GAAG,OAAO,8BAA8B,OAAO,UAAU;AAClF,QAAI,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,EAAE,SAAS,OAAO,OAAO,YAAa,CAAA,GAAG;AAClE,YAAM,IAAI,UAAU,yBAAyB,2BAA2B,eAAe;AAAA,IACzF;AAAA,EACF;AACA,QAAM,QAAU,EAAA,OAAO,SAAS,EAAE,WAAW,MAAM;AACnD,SAAO,EAAE,UAAU,SAAS,UAAU,SAAS,SAAS;AAC1D;AAEA,SAAS,aAAa,OAAyC;AAC7D;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEE,MAAA,MAAM,mBAAmB,GAAG;AACxB,UAAA,IAAI,WAAW,8BAA8B,mCAAmC;AAAA,EACxF;AACA,QAAM,OAAO,kBAAkB,MAAM,MAAM,eAAe;AAC1D,kBAAgB,IAAI;AACpB,QAAM,UAAU,kBAAkB,MAAM,SAAS,kBAAkB;AACnE,kBAAgB,OAAO;AACvB,QAAM,MAAM,kBAAkB,MAAM,KAAK,cAAc;AACvD,QAAM,QAAQ,kBAAkB,MAAM,OAAO,gBAAgB;AAC7D,qBAAmB,GAAG;AACtB,QAAM,aAAa,MAAM;AACzB,MACE,CAAC,MAAM,QAAQ,UAAU,KAAK,CAAC,WAAW,UAC1C,WAAW,KAAK,CAAC,SAAS,OAAO,SAAS,QAAQ,GAClD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,cAAc;AAAA,IAClB,MAAM,oBAAoB,MAAM,eAAe,CAAA,GAAI,sBAAsB;AAAA,EAAA;AAE3E,QAAM,gBAAgB;AAAA,IAAsB,MAC1C;AAAA,MACE,MAAM,uBAAuB,CAAC;AAAA,MAC9B;AAAA,IACF;AAAA,EAAA;AAEK,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,kBAAkB,MAAM,QAAQ,iBAAiB;AAAA,IACzD,WAAW,kBAAkB,MAAM,WAAW,oBAAoB;AAAA,IAClE;AAAA,IACA;AAAA,IACA,GAAI,MAAM,qBAAqB,SAAY,CAAK,IAAA,EAAE,kBAAkB,sBAAsB,MAAM,wBAAwB,MAAM,kBAAkB,WAAW,CAAC,EAAE;AAAA,IAC9J,eAAe,kBAAkB,MAAM,eAAe,wBAAwB;AAAA,IAC9E,qBAAqB;AAAA,EAAA;AAEzB;AAEA,SAAS,cAAc,OAAgC,KAAyB;AAC9E,gBAAc,OAAO,CAAC,kBAAkB,cAAc,aAAa,UAAU,GAAG,WAAW;AACvF,MAAA,MAAM,mBAAmB,GAAG;AACxB,UAAA,IAAI,WAAW,8BAA8B,oCAAoC;AAAA,EACzF;AACM,QAAA,YAAY,MAAM,eAAe,SACnC,iBACA,kBAAkB,MAAM,YAAY,sBAAsB;AACxD,QAAA,kBAAkB,MAAM,GAAG,IAAI,IAAI,IAAI,IAAI,OAAO,UAAU;AAClE,QAAM,WAAW,MAAM,cAAc,SACjC,oBAAoB,MAAM;AACpB,UAAA,IAAI,WAAW,4BAA4B,iCAAiC;AAAA,EACjF,GAAA,IACD,kBAAkB,MAAM,WAAW,qBAAqB;AAC5D,MACE,CAAC,eAAe,KAAK,QAAQ,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,QAAQ,MAAM,UACpF;AACM,UAAA,IAAI,WAAW,qBAAqB,0CAA0C;AAAA,EACtF;AACA,QAAM,iBAAiB,kBAAkB,MAAM,UAAU,oBAAoB;AAC7E,MAAI,CAAC,OAAO,KAAK,cAAc,EAAE,QAAQ;AACjC,UAAA,IAAI,WAAW,4BAA4B,sCAAsC;AAAA,EACzF;AACA,QAAM,cAA+C,CAAA;AACrD,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,cAAc,GAAG;AACvD,2BAAuB,GAAG;AAC1B,UAAM,aAAa,kBAAkB,KAAK,sBAAsB,GAAG,EAAE;AACvD,kBAAA,YAAY,CAAC,YAAY,YAAY,QAAQ,GAAG,sBAAsB,GAAG,EAAE;AACzF,UAAM,WAAW;AAAA,MAAsB,MACrC,kBAAkB,WAAW,UAAU,sBAAsB,GAAG,WAAW;AAAA,IAAA;AAE7E,6BAAyB,KAAK,UAAU,sBAAsB,GAAG,WAAW;AAC5E,QAAI,WAAW,aAAa,UAAa,OAAO,WAAW,aAAa,WAAW;AACjF,YAAM,IAAI,WAAW,4BAA4B,GAAG,GAAG,2BAA2B;AAAA,IACpF;AACA,UAAM,SAAS,kBAAkB,WAAW,QAAQ,sBAAsB,GAAG,SAAS;AAClF,QAAA,OAAO,SAAS,QAAQ;AAC1B,oBAAc,QAAQ,CAAC,QAAQ,MAAM,GAAG,sBAAsB,GAAG,SAAS;AAC1E,kBAAY,GAAG,IAAI;AAAA,QACjB,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,WAAW,aAAa,SAAY,OAAO,WAAW;AAAA,QAChE,QAAQ,EAAE,MAAM,QAAQ,MAAM,kBAAkB,OAAO,MAAM,GAAG,GAAG,cAAc,EAAE;AAAA,MAAA;AAAA,IACrF,WACS,OAAO,SAAS,gBAAgB;AACzC,oBAAc,QAAQ,CAAC,QAAQ,OAAO,GAAG,sBAAsB,GAAG,SAAS;AAC3E,kBAAY,GAAG,IAAI;AAAA,QACjB,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,UAAU,WAAW,aAAa,SAAY,OAAO,WAAW;AAAA,QAChE,QAAQ;AAAA,UACN,MAAM;AAAA,UACN,OAAO,kBAAkB,OAAO,OAAO,GAAG,GAAG,eAAe;AAAA,QAC9D;AAAA,MAAA;AAAA,IACF,OACK;AACL,YAAM,IAAI,WAAW,kBAAkB,GAAG,GAAG,2CAA2C;AAAA,IAC1F;AAAA,EACF;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,UAAU;AAAA,EAAA;AAEd;AAEA,eAAe,wBACb,YACA,SACA,SACA,UACe;AACf,MAAI,eAAe;AACf,MAAA;AACF,UAAMkB,QAAO,MAAM,QAAQ,EAAE,MAAM,OAAO;AAC1C,QAAI,CAACA,MAAK,eAAeA,MAAK,WAAW;AACvC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,eAAW,UAAU,MAAM,QAAU,EAAA,QAAQ,OAAO,GAAG;AAC/C,YAAA,IAAI,WAAW,kBAAkB,kCAAkC;AAAA,IAC3E;AACe,mBAAA;AAAA,WACR,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACM,QAAA,YAAY,MAAM,QAAA,EAAU,YAAY,EAAE,KAAK,YAAY,QAAQ,sBAAA,CAAuB;AAC5F,MAAA;AACF,UAAM,UAAU,KAAK,WAAW,UAAU,GAAG,OAAO;AACpD,UAAM,UAAU,KAAK,WAAW,WAAW,GAAG,QAAQ;AACtD,iBAAa,MAAM,SAAS,KAAK,WAAW,UAAU,GAAG,UAAU,CAAC;AACtD,kBAAA,MAAM,SAAS,KAAK,WAAW,WAAW,GAAG,WAAW,GAAG,OAAO;AAC5E,QAAA;AAAoB,YAAA,QAAU,EAAA,OAAO,OAAO;AAC5C,QAAA;AACF,YAAM,QAAQ,EAAE,OAAO,WAAW,OAAO;AAAA,aAClC,OAAO;AACV,UAAA;AAAoB,cAAA,QAAU,EAAA,MAAM,OAAO;AACzC,YAAA;AAAA,IACR;AAAA,WACO,OAAO;AACd,UAAM,mBAAmB,SAAS;AAC5B,UAAA;AAAA,EACR;AACF;AAEA,eAAe,wBAAwB,SAAiB,oBAA2C;AAC7F,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,OAAO;AAAA,WACtB,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG;AAC9B,UAAA;AAAA,EACR;AACM,QAAA,oBAAoB,SAAS,oBAAoB,IAAI;AAC7D;AAEA,eAAe,oBACb,SACA,oBACA,cAAc,MACd,aAAa,sBACU;AACnB,MAAA;AACF,UAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,OAAO;AACtC,QAAA,CAAC,KAAK,eAAe,KAAK;AAAiB,YAAA,IAAI,MAAM,gCAAgC;AACzF,UAAM,WAAW;AAAA,MACf,MAAM,SAAS,KAAK,SAAS,kBAAkB,GAAG,kBAAkB;AAAA,IAAA;AAElE,QAAA,sBAAsB,SAAS,iBAAiB,oBAAoB;AAChE,YAAA,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACM,UAAA,8BAAc,IAAI;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,MACT,GAAG,OAAO,KAAK,SAAS,eAAe;AAAA,IAAA,CACxC;AACD,eAAW,SAAS,MAAM,QAAU,EAAA,QAAQ,OAAO,GAAG;AAChD,UAAA,CAAC,MAAM,UAAU,MAAM,aAAa,CAAC,QAAQ,IAAI,MAAM,IAAI,GAAG;AAChE,cAAM,IAAI,MAAM,2BAA2B,MAAM,IAAI,EAAE;AAAA,MACzD;AAAA,IACF;AACA,eAAW,QAAQ,OAAO,KAAK,SAAS,eAAe,GAAG;AAClDW,YAAAA,QAAO,MAAM,UAAU,MAAM,KAAK,SAAS,IAAI,CAAC;AAClD,UAAA,CAACA,MAAK,UAAUA,MAAK;AAAW,cAAM,IAAI,MAAM,6BAA6B,IAAI,EAAE;AACvF,UAAI,aAAa;AACT,cAAA,WAAW,SAAS,gBAAgB,IAAI;AAC9C,cAAM,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI,CAAC;AAC/C,YAAA,OAAO,SAAS,SAAS,QAAQ,UAAU,OAAO,MAAM,OAAO,SAAS,QAAQ;AAClF,gBAAM,IAAI,MAAM,gCAAgC,IAAI,EAAE;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AACO,WAAA;AAAA,WACA,OAAO;AACV,QAAA,iBAAiB,aAAa,MAAM,SAAS;AAAkB,YAAA;AACnE,UAAM,IAAI;AAAA,MACR;AAAA,MACA,mCAAmC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACzF;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,kBAAkB,OAA8C;AACvE;AAAA,IACE;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,EAAA;AAEF,MAAI,MAAM,mBAAmB;AAAS,UAAA,IAAI,MAAM,wCAAwC;AACxF,QAAM,WAAW,OAAO,MAAM,aAAa,EAAE;AAC7C,MACE,CAAC,eAAe,KAAK,QAAQ,KAAK,SAAS,SAAS,IAAI,KAAK,SAAS,QAAQ,MAAM,UACpF;AACM,UAAA,IAAI,MAAM,4CAA4C;AAAA,EAC9D;AACA,QAAM,eAAerB,eAAa,MAAM,iBAAiB,GAAG,kBAAkB,kBAAkB;AAChG,QAAM,YAAiD,CAAA;AACvD,aAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,YAAY,GAAG;AAEpD,QAAA,CAAC,oBAAoB,KAAK,IAAI,KAAK,SAAS,OAAO,SAAS,QAAQ,KAAK,SAAS,IAAI,KACtF,SAAS,IAAI,MAAM,QAAQ,SAAS,sBAAsB,SAAS,UACnE;AACA,YAAM,IAAI,MAAM,oDAAoD,IAAI,EAAE;AAAA,IAC5E;AACA,UAAM,SAASA,eAAa,KAAK,mBAAmB,IAAI,EAAE;AAC1D,kBAAc,QAAQ,CAAC,QAAQ,QAAQ,GAAG,mBAAmB,IAAI,EAAE;AACnE,QAAI,OAAO,OAAO,SAAS,YAAY,CAAC,OAAO,cAAc,OAAO,IAAI,KAAK,OAAO,OAAO,GAAG;AAC5F,YAAM,IAAI,MAAM,mBAAmB,IAAI,kBAAkB;AAAA,IAC3D;AACI,QAAA,OAAO,OAAO,WAAW,YAAY,CAAC,UAAU,KAAK,OAAO,MAAM,GAAG;AACvE,YAAM,IAAI,MAAM,mBAAmB,IAAI,oBAAoB;AAAA,IAC7D;AACU,cAAA,IAAI,IAAI,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO;EACxD;AACA,MAAI,CAAC,UAAU,YAAY,KAAK,CAAC,UAAU,kBAAkB,GAAG;AACxD,UAAA,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACO,SAAA;AAAA,IACL,gBAAgB;AAAA,IAChB,cAAc,OAAO,MAAM,gBAAgB,EAAE;AAAA,IAC7C,cAAc,qBAAqB,MAAM,cAAc,cAAc;AAAA,IACrE,oBAAoB,qBAAqB,MAAM,oBAAoB,oBAAoB;AAAA,IACvF,mBAAmB,iBAAiB,MAAM,mBAAmB,mBAAmB;AAAA,IAChF,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAaA,eAAa,MAAM,aAAa,aAAa;AAAA,EAAA;AAE9D;AAEA,SAAS,iBAAiB,SAAiB,SAAiB,aAA6B;AACnF,MAAA,aAAa,SAAS,OAAO,GAAG;AAC5B,UAAA,IAAI,WAAW,qBAAqB,+BAA+B;AAAA,EAC3E;AACA,aAAW,UAAU,aAAa;AAC5B,QAAA,aAAa,QAAQ,OAAO,GAAG;AAC3B,YAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,IACrF;AAAA,EACF;AACF;AAEA,SAAS,sBACP,KACA,SACA,SACA,aACM;AACA,QAAA,aAAa,QAAQ,OAAO;AAClC,QAAM,iBAAiB,CAACR,UAAQ,IAAI,GAAG,GAAG,UAAU;AAC9C,QAAA,OAAO,QAAU,EAAA,IAAI,MAAM,KAAK,QAAU,EAAA,IAAI,aAAa;AAC7D,MAAA;AAAqB,mBAAA,KAAKA,UAAQ,IAAI,CAAC;AAEzC,MAAA,QAAQ,OAAO,MAAM,WACrB,eAAe,KAAK,CAAC,SAASA,UAAQ,IAAI,MAAMA,UAAQ,OAAO,CAAC,KAChE,aAAa,SAAS,OAAO,KAAK,YAAY,KAAK,CAAC,SAAS,aAAa,MAAM,OAAO,CAAC,GACxF;AACM,UAAA,IAAI,UAAU,uBAAuB,8CAA8C;AAAA,EAC3F;AACF;AAEA,eAAe,iBAAiB,WAAmB,aAAoC;AACrF,MAAI,SAAS;AACT,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,WAAW;AACxB,aAAA;AAAA,WACF,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAC7C;AAAA,EACF;AACA,QAAM,SAAS,GAAG,WAAW,aAAa,OAAO,WAAY,CAAA;AAC7D,QAAM,QAAQ,EAAE,OAAO,aAAa,MAAM;AACtC,MAAA;AACF,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAAA,WACtC,OAAO;AACd,UAAM,QAAQ,EAAE,OAAO,QAAQ,WAAW;AACpC,UAAA;AAAA,EACR;AACA,QAAM,QAAU,EAAA,OAAO,QAAQ,EAAE,WAAW,MAAM;AACpD;AAEA,eAAe,YAAY,WAAmB,aAAoC;AAChF,MAAI,SAAS;AACT,MAAA;AACI,UAAA,QAAU,EAAA,MAAM,WAAW;AACxB,aAAA;AAAA,WACF,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACA,MAAI,CAAC,QAAQ;AACX,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAC7C;AAAA,EACF;AACA,QAAM,SAAS,GAAG,WAAW,aAAa,OAAO,WAAY,CAAA;AAC7D,QAAM,QAAQ,EAAE,OAAO,aAAa,MAAM;AACtC,MAAA;AACF,UAAM,QAAQ,EAAE,OAAO,WAAW,WAAW;AAAA,WACtC,OAAO;AACd,UAAM,QAAQ,EAAE,OAAO,QAAQ,WAAW;AACpC,UAAA;AAAA,EACR;AACA,QAAM,mBAAmB,MAAM;AACjC;AAEA,MAAM,kBAA0C;AAAA,EAC9C,MAAM,QAAQ,WAA6C;AACrD,QAAA;AACA,QAAA;AACO,eAAA,MAAM,QAAU,EAAA,IAAI,UAAU,CAAC,SAAS,WAAW,SAAS,CAAC;AAAA,aAC/D,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,kCAAkC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QACxF;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,sCAAsC,gBAAgB,OAAO,MAAM,CAAC;AAAA,QACpE;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA;AACA,QAAA;AACO,eAAA,KAAK,MAAM,IAAI,cAAc,OAAO,OAAO,MAAM,CAAC;AAAA,IAAA,QACrD;AACA,YAAA,IAAI,UAAU,0BAA0B,sCAAsC;AAAA,IACtF;AACA,QAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AAC3C,YAAA,IAAI,UAAU,0BAA0B,8CAA8C;AAAA,IAC9F;AACA,UAAM,QAAQ,kBAAkB,OAAO,CAAC,GAAG,gBAAgB;AAC3D,UAAM,KAAK,kBAAkB,MAAM,IAAI,iBAAiB,EAAE;AAC1D,QAAI,CAAC,UAAU,KAAK,EAAE,GAAG;AACjB,YAAA,IAAI,UAAU,2BAA2B,yCAAyC;AAAA,IAC1F;AACA,UAAM,eAAe,kBAAkB,MAAM,cAAc,qBAAqB;AAChF,UAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,IACrC,MAAM,SAAS;AAAA,MAAO,CAAC,QACvB,OAAO,QAAQ,YAAY,QAAQ;AAAA,QAEnC;AACG,WAAA;AAAA,MACL;AAAA,MACA;AAAA,MACA,eAAe,KAAK,SAAS,SAAS,IAAI,YAAY,KAAK,CAAC,KAAK;AAAA,IAAA;AAAA,EAErE;AAAA,EAEA,MAAM,KAAK,SAAiB,kBAAyC;AAC/D,QAAA;AACI,YAAA,SAAS,MAAM,QAAA,EAAU;AAAA,QAC7B;AAAA,QACA,CAAC,SAAS,QAAQ,OAAO;AAAA,QACzB;AAAA,MAAA;AAEE,UAAA,CAAC,OAAO,SAAS;AACnB,cAAM,mBAAmB,gBAAgB;AACzC,cAAM,IAAI;AAAA,UACR;AAAA,UACA,6BAA6B,gBAAgB,OAAO,MAAM,CAAC;AAAA,UAC3D;AAAA,QAAA;AAAA,MAEJ;AAAA,aACO,OAAO;AACd,UAAI,iBAAiB;AAAiB,cAAA;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,+BAA+B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QACrF;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;AAEA,SAAS0B,iBAAe,KAAqB,OAAuB;AAC3D,SAAA5B,aAAW,KAAK,IAAIE,UAAQ,KAAK,IAAIA,UAAQ,IAAI,KAAK,KAAK;AACpE;AAEA,eAAe,cAAc,MAAc,OAAgC;AACzE,QAAM,OAAO,MAAM,QAAQ,EAAE,SAAS,IAAI;AAC1C,QAAMkB,QAAO,MAAM,QAAQ,EAAE,KAAK,IAAI;AACtC,MAAI,CAACA,MAAK;AAAa,UAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,sBAAsB;AACnF,SAAA;AACT;AAEA,eAAe,sBAAsB,MAAc,OAAgC;AACjF,QAAM,OAAO,MAAM,QAAQ,EAAE,MAAM,IAAI;AACvC,MAAI,CAAC,KAAK,eAAe,KAAK,WAAW;AACvC,UAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,2BAA2B;AAAA,EAC1E;AACA,SAAO,MAAM,QAAA,EAAU,SAAS,IAAI;AACtC;AAEA,eAAe,gBAAgB,MAA+B;AACtD,QAAA,WAAWlB,UAAQ,IAAI;AACzB,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,SAAS,QAAQ;AAAA,WACjC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AACrC,UAAA,SAAS,QAAQ,QAAQ;AAC/B,QAAI,WAAW;AAAiB,aAAA;AAChC,WAAO,KAAK,MAAM,gBAAgB,MAAM,GAAG,SAAS,QAAQ,CAAC;AAAA,EAC/D;AACF;AAEA,eAAe,kBAAkB,MAAc,MAA6B;AACtE,MAAA;AACF,SAAK,MAAM,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;AACrC,YAAA,IAAI,UAAU,MAAM,6CAA6C;AAAA,IACzE;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAG;AAC9B,UAAA;AAAA,EACR;AACF;AAEA,SAAS,aAAa,MAAc,OAAwB;AAC1D,QAAM,cAAc,SAASA,UAAQ,IAAI,GAAGA,UAAQ,KAAK,CAAC;AAC1D,QAAM,cAAc,SAASA,UAAQ,KAAK,GAAGA,UAAQ,IAAI,CAAC;AACpD,QAAA,YAAY,UAAU,KAAK;AACjC,SAAO,gBAAgB,MAAM,CAAC,YAAY,WAAW,KAAK,SAAS,EAAE,KAAK,gBAAgB,QACxF,CAAC,YAAY,WAAW,KAAK,SAAS,EAAE,KAAK,gBAAgB;AACjE;AAEA,SAAS,WAAW,SAAyB;AACpC,SAAA,UAAU,YAAY,IAAI,YAAY,EAAE,OAAOA,UAAQ,OAAO,CAAC,CAAC,CAAC;AAC1E;AAEA,SAAS,cAAc,KAAqB;AACpC,QAAA,SAAS,IAAI,YAAA,EAAc,WAAW,iBAAiB,GAAG,EAAE,WAAW,YAAY,EAAE;AAC3F,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,WAAW,2BAA2B,mCAAmC,GAAG,EAAE;AAAA,EAC1F;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAuB;AACxC,SAAA,MAAM,YAAc,EAAA,WAAW,eAAe,GAAG,EAAE,WAAW,YAAY,EAAE;AACrF;AAEA,SAAS,gBAAgB,OAAqB;AACxC,MAAA,CAAC,SAAS,KAAK,KAAK;AAAG,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAClG;AAEA,SAAS,gBAAgB,OAAqB;AACxC,MAAA,CAACyB,UAAQ,KAAK,KAAK;AAAG,UAAM,IAAI,WAAW,mBAAmB,wBAAwB,KAAK,EAAE;AACnG;AAEA,SAAS,aAAa,MAAc,OAAuB;AACnD,QAAA,QAAQ,8CAA8C,KAAK,KAAK;AACtE,MAAI,CAAC,OAAO;AACV,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO,WAAW,IAAI,IAAI,MAAM,CAAC,CAAC;AACpC;AAEA,eAAe,eACb,KACA,WACA,SACA,OACiB;AACjB,MAAI,CAAC,WAAW;AACd,UAAM,IAAI,WAAW,0BAA0B,GAAG,KAAK,cAAc;AAAA,EACvE;AACA,QAAM,SAAS,MAAM,IAAI,GAAG,OAAO,OAAO;AACtC,MAAA,CAAC,QAAQ,KAAK;AAAG,UAAM,IAAI,WAAW,0BAA0B,GAAG,KAAK,cAAc;AAC1F,SAAO,OAAO;AAChB;AAEA,SAAS,oBAAoB,OAAgC,KAAiC;AAC5F,SAAO,MAAM,GAAG,MAAM,SAAY,SAAY,kBAAkB,OAAO,GAAG;AAC5E;AAEA,SAAS,kBAAkB,OAAgC,KAAqB;AACxE,QAAA,QAAQ,MAAM,GAAG;AACvB,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO;AACvC,UAAM,IAAI,WAAW,0BAA0B,GAAG,GAAG,cAAc;AAAA,EACrE;AACO,SAAA;AACT;AAEA,SAAS,kBAAkB,OAAgB,OAAuB;AAC5D,MAAA;AACK,WAAA,qBAAqB,OAAO,KAAK;AAAA,WACjC,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,SAAS,kBAAkB,OAAgB,OAAwC;AAC7E,MAAA;AACK,WAAAjB,eAAa,OAAO,KAAK;AAAA,WACzB,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,SAAS,sBAAyB,UAAsB;AAClD,MAAA;AACF,WAAO,SAAS;AAAA,WACT,OAAO;AACd,QAAI,iBAAiB;AAAW,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AACxF,UAAA;AAAA,EACR;AACF;AAEA,eAAe,SAAS,MAAc,OAAiD;AACjF,MAAA;AACI,UAAA,SAAS,KAAK,MAAM,MAAM,UAAU,aAAa,IAAI,CAAC;AACrD,WAAA,kBAAkB,QAAQ,KAAK;AAAA,WAC/B,OAAO;AACd,QAAI,iBAAiB,aAAa;AAChC,YAAM,IAAI,WAAW,gBAAgB,GAAG,KAAK,oBAAoB;AAAA,IACnE;AACM,UAAA;AAAA,EACR;AACF;AAEA,eAAe,UAAU,MAAc,OAA+B;AAC9D,QAAA,QAAU,EAAA,cAAc,MAAM,GAAG,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAAA,GAAM;AAAA,IACzE,WAAW;AAAA,IACX,MAAM;AAAA,EAAA,CACP;AACH;AAEA,SAAS,qBAAqB,OAAgB,OAAuB;AACnE,MAAI,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK,KAAK;AAAG,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AACvF,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAgB,OAAuB;AAC/D,MAAI,OAAO,UAAU,YAAY,CAAC,UAAU,KAAK,KAAK;AAAG,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa;AACvF,SAAA;AACT;AAEA,SAAS,aAAa,OAA6B;AACjD,SAAO,KAAK,UAAU;AAAA,IACpB,MAAM,MAAM;AAAA,IACZ,OAAO,MAAM,OAAO,QAAa,KAAA;AAAA,IACjC,KAAK,MAAM;AAAA,IACX,KAAK,MAAM;AAAA,IACX,MAAM,MAAM;AAAA,EAAA,CACb;AACH;AAEA,SAAS,cAAc,YAAoB,QAAwB;AAC3D,QAAA,UAAU,SAAS,YAAY,MAAM;AAC3C,SAAO,WAAW,CAAC,QAAQ,WAAW,KAAK,UAAU,KAAK,GAAG,EAAE,KAAK,YAAY,OAC5E,eAAe,OAAO,IACtB;AACN;AAEA,SAAS,eAAe,MAAsB;AACrC,SAAA,KAAK,MAAM,UAAU,KAAK,GAAG,EAAE,KAAK,GAAG,KAAK;AACrD;AAEA,SAAS,gBAAgB,OAA2B;AAC5C,QAAAO,QAAO,IAAI,YAAc,EAAA,OAAO,KAAK,EAAE,OAAO,WAAW,YAAY,GAAG;AAC9E,SAAOA,MAAK,MAAM,GAAG,GAAG,KAAK;AAC/B;AAEA,eAAe,mBAAmB,MAA6B;AACzD,MAAA;AACF,UAAM,QAAU,EAAA,OAAO,MAAM,EAAE,WAAW,MAAM;AAAA,WACzC,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,eAAe,mBAAmB,MAA6B;AACzD,MAAA;AACI,UAAA,QAAU,EAAA,OAAO,IAAI;AAAA,WACpB,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;ACj/CA,MAAM,uBAAuB;AAC7B,MAAM,2BAA2B;AAyBjC,eAAsB,YACpB,KACA,QACA,UAA2B,CAAA,GACO;AAC5B,QAAA,UAAU,QAAQ,WAAW;AAC7B,QAAA,QAAQ,QAAQ,SAASe;AACzB,QAAA,iBAAiB,QAAQ,kBAAkB;AAC3C,QAAA,oBAAoB,QAAQ,qBAAqB;AACvD,MAAI,eAAe;AACf,MAAA;AACA,MAAA;AAEA,MAAA;AACI,UAAA,YAAY,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAK,CAAA;AACjE,UAAA,cAAc,YAAY,IAAI,CAAC,IAAI,QAAQ,YAAY,QAAQ,SAAS,CAAC,CAAC;AAChF,aAAS,MAAM,IAAI,QAAQ,oBAAoB,aAAa,MAAM,IAAI,WAAW;AAAA,EAAA,QAC3E;AACG,aAAA;AAAA,EACX;AAEI,MAAA;AACF,WAAO,MAAM;AACX,YAAM,cAAc,MAAM,QAAQ,KAAK,MAAM;AACvC,YAAA,WAAW,KAAK,UAAU;AAAA,QAC9B,SAAS;AAAA,QACT,UAAU,YAAY;AAAA,QACtB,OAAO,YAAY;AAAA,QACnB,SAAS,YAAY;AAAA,QACrB,UAAU,YAAY;AAAA,QACtB,SAAS,YAAY;AAAA,MAAA,CACtB;AACD,YAAM,UAAU,YAAY,aAAa,SACrC,aAAa,eACb,YAAY,aAAa;AAC7B,UAAI,SAAS;AACX,YAAI,QAAQ;AAAqB,gBAAA,QAAQ,cAAc,WAAW;AAAA;AAC7D,gBAAM,IAAI,GAAG,OAAO,GAAG,QAAQ;AAAA,CAAI;AACzB,uBAAA;AACf,uBAAe,YAAY;AAAA,MAC7B;AAEI,UAAA,YAAY,UAAU,YAAY;AAChC,YAAA,qBAAqB,YAAY,YAAY,aAAa;AAC5D,gBAAM,QAAQ,YAAY;AAC1B,gBAAM,IAAI;AAAA,YACR,uBAAuB,OAAO,MAAM,YAAY,OAAO;AAAA,YACvD,OAAO,WAAW,QAAQ,MAAM,eAAe,YAAY,WAAW,YAAY;AAAA,YAClF,YAAY,YAAY,aAAa,eAAe;AAAA,YACpD,OAAO,aAAa;AAAA,YACpB,EAAE,SAAS,OAAO;AAAA,UAAA;AAAA,QAEtB;AACA,eAAO,YAAY;AAAA,MACrB;AAEA,YAAM,aAAa,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK;AACtD,UAAI,aAAa,GAAG;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,8BAA8B,MAAM;AAAA,UACpC;AAAA,UACA;AAAA,UACA,EAAE,SAAS,OAAO;AAAA,QAAA;AAAA,MAEtB;AACA,YAAM,WAAW,KAAK,IAAI,gBAAgB,SAAS;AAC/C,UAAA;AAAc,cAAA,OAAO,UAAU,QAAQ;AAAA;AAChC,cAAA,MAAM,UAAU,IAAI,MAAM;AAAA,IACvC;AAAA,EAAA,UACA;AACA,UAAM,QAAQ,MAAQ,EAAA,MAAM,MAAM,MAAS;AAAA,EAC7C;AACF;AAEA,eAAe,YAAY,KAAqB,QAA0C;AAClF,QAAA,WAAW,MAAM,IAAI,QAAQ;AAAA,IACjC;AAAA,IACA;AAAA,IACA,EAAE,SAAS,OAAO;AAAA,IAClBvB,aAAW,GAAG;AAAA,EAAA;AAEV,QAAA,WAAWC,eAAa,UAAU,+BAA+B;AACvE,QAAM,OAAOA,eAAa,SAAS,QAAQ,UAAU,kBAAkB;AACvE,QAAM,QAAQC,eAAa,KAAK,OAAO,YAAY;AAC7C,QAAA,UAAUH,iBAAe,KAAK,OAAO;AAC3C,QAAM,YAAYyB,WAAS,KAAK,KAAK,IAAI,KAAK,QAAQ;AAC/C,SAAA;AAAA,IACL,UAAU,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AAAA,IAC9D;AAAA,IACA;AAAA,IACA,SAASzB,iBAAe,KAAK,OAAO;AAAA,IACpC,OAAO,YACH;AAAA,MACA,MAAMA,iBAAe,UAAU,IAAI;AAAA,MACnC,SAASA,iBAAe,UAAU,OAAO;AAAA,MACzC,WAAW,OAAO,UAAU,cAAc,YAAY,UAAU,YAAY;AAAA,MAC5E,SAASyB,WAAS,UAAU,MAAM,IAAI,UAAU,SAAS;AAAA,IAEzD,IAAA;AAAA,IACJ,UAAU,KAAK;AAAA,IACf,MAAM;AAAA,EAAA;AAEV;AAEA,SAASxB,aAAW,KAIlB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,SAAS,uBAAuB,MAA0B,SAAqC;AACzF,MAAA;AAAM,WAAO,KAAK,OAAO,WAAW,kBAAkB,GAAG,EAAE;AACxD,SAAA,YAAY,aAAa,aAAa;AAC/C;AAEA,SAASD,iBAAe,OAAoC;AACnD,SAAA,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAASG,eAAa,OAAgB,OAAuB;AAC3D,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO;AACvC,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,qBAAqB,CAAC;AAAA,EAChF;AACO,SAAA;AACT;AAEA,SAASsB,WAAS,OAAkD;AAC3D,SAAA,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACrE;AAEA,SAASvB,eAAa,OAAgB,OAAwC;AACxE,MAAA,CAACuB,WAAS,KAAK,GAAG;AACpB,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,CAAC;AAAA,EACjF;AACO,SAAA;AACT;AAEA,SAASD,iBAAe,cAAsB,QAAoC;AAChF,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY,CAAC;AAAA,EACrF;AACA,SAAO,IAAI,QAAQ,CAAC9B,UAAS,WAAW;AAChC,UAAA,QAAQ,WAAW,MAAM;AACtB,aAAA,oBAAoB,SAAS,OAAO;AACnC,MAAAA;OACP,YAAY;AACf,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY,CAAC;AAAA,IAAA;AAEtE,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM;AAAA,EAAA,CACzD;AACH;AC5KA,MAAM,aAAa,CAAC,SAAiB,UAAU,KAAK,WAAW,IAAI;AACnE,MAAM,UAAU,IAAI,UAAoB,QAAA,EAAU,KAAK,QAAQ,GAAG,KAAK;AAEvE,MAAM,wBAAwB;AAC9B,MAAM,sBAAsB;AAC5B,MAAM,6BAA6B;AACnC,MAAM,kBAAkB,CAAC,IAAM,IAAM,GAAM,CAAI;AAC/C,MAAMK,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAmB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAwDgB,SAAA,gBAAgB,eAAsC,IAAmB;AACvF,QAAM,WAAW;AAAA,IACf,aAAa,YAAY;AAAA,IACzB2B,cAAY;AAAA,IACZC,aAAW;AAAA,IACX,eAAe,YAAY;AAAA,IAC3B,eAAe,YAAY;AAAA,IAC3B,iBAAiB,YAAY;AAAA,IAC7BC,gBAAc;AAAA,IACd,iBAAiB,SAAS,wBAAwB;AAAA,IAClD,iBAAiB,QAAQ,uBAAuB;AAAA,IAChD,eAAe;AAAA,IACfC,gBAAc;AAAA,IACd,eAAe;AAAA,EAAA;AAEV,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,SAAS,IAAI,CAAC,YAAY;AAClC,YAAM,UAAU,QAAQ;AACjB,aAAA;AAAA,QACL,GAAG;AAAA,QACH,SAAS,OAAO,KAAK,UAAU,kBAAkB,MAAM,QAAQ,KAAK,KAAK,CAAC;AAAA,MAAA;AAAA,IAC5E,CACD;AAAA,EAAA;AAEL;AAEA,SAASD,kBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,wBAAwB,UAAU,MAAM;AAAA,IACtF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IAAA,CACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,OAAO,EAAE,MAAM,YAAY;AAAA,MACpF,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc7B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UACnB,MAAM,YAAY,KAAK,uBAAuB;AAAA,MAC5C,SAAS,aAAa,OAAO,SAAS;AAAA,MACtC,OAAO,MAAM,UAAU;AAAA,IAAA,CACxB;AAAA,EAAA;AAEP;AAEA,SAAS,aAAa,cAAwD;AACrE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,SAAS,cAAc;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,8CAA8C,MAAM,SAAS;AAAA,MAC1F,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA,CACd;AAAA,IACD,aAAa,kBAAkB;AAAA,MAC7B,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,eAAe,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MAC9C,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,MACtD,QAAQ,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAAA,MACrD,gBAAgB,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAAA,IAAA,CAC9D;AAAA,IACD,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU,MAAM,SAAS,KAAK,OAAO,YAAY;AAAA,EAAA;AAE1E;AAEA,SAAS2B,gBAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,iBAAiB;AAAA,IAC9B,cAAc3B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,kBAAkB;AAAA,IAC7B,SAAS,OAAO,QAAQ,MAAM,YAAY,KAAK,aAAa,EAAE;AAAA,EAAA;AAElE;AAEA,SAAS4B,eAAgC;AACvC,SAAO,gBAAgB;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,SAAS,OAAO,KAAK,UAAU;AAC7B,YAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,YAAM,CAAC,SAAS,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC1C,YAAY,KAAK,gBAAgB,EAAE,UAAU;AAAA,QAC7C,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,MAAA,CAC7C;AACM,aAAA,EAAE,SAAS;IACpB;AAAA,EAAA,CACD;AACH;AAEA,SAAS,eAAe,cAAwD;AACvE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,SAAS,cAAc;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,0CAA0C,MAAM,SAAS;AAAA,MACtF;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,IAAA,CACd;AAAA,IACD,aAAa,kBAAkB;AAAA,MAC7B,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,MAC3B,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,IAAA,CACvD;AAAA,IACD,cAAc5B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU,MAAM,WAAW,KAAK,OAAO,YAAY;AAAA,EAAA;AAE5E;AAEA,SAAS,eAAe,cAAwD;AACvE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX,EAAE,MAAM,YAAY,aAAa,2CAA2C,UAAU,MAAM;AAAA,IAC9F;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA,aAAa;AAAA,IACf;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,GAAG,gBAAgB,EAAE;AAAA,MACxD;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,uBAAuB,8CAA8C;AAAA,IAChF,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,OAAO,YAAY;AAAA,EAAA;AAE7E;AAEA,SAAS,iBAAiB,cAAwD;AACzE,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS,OAAO,KAAK,UAAU,MAAM,aAAa,KAAK,OAAO,YAAY;AAAA,IAAA,CAC3E;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,QACV,MAAM,CAAC,UAAU,QAAQ;AAAA,MAC3B;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,QAAQ,EAAE;AAAA,QACnD,SAAS,EAAE,MAAM,UAAU;AAAA,QAC3B,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,YAAY,MAAM;AAAA,MAC7B,sBAAsB;AAAA,IACxB;AAAA,IACA,UAAU,CAAC,0CAA0C;AAAA,EAAA;AAEzD;AAEA,SAAS,iBAAiB,MAAwBT,UAAoC;AAC7E,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB;AAAA,MACA,SAAAA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,SAAS,UAAU,SAAS;AAAA,MACvC,SAAS,OAAO,KAAK,UAAU,MAAM,gBAAgB,KAAK,OAAO,IAAI;AAAA,IAAA,CACtE;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,GAAG,gBAAgB;AAAA,MACjB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,SAAS,OAAO,KAAK,UAAU,MAAM,gBAAgB,KAAK,OAAO,SAAS;AAAA,IAAA,CAC3E;AAAA,IACD,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,YAAY,SAAS;AAAA,MAC9B;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,SAAS,EAAE;AAAA,QAC1D,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,UAAU,CAAC,0BAA0B;AAAA,EAAA;AAEzC;AAEA,SAASuC,kBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,MACX,EAAE,MAAM,YAAY,aAAa,2CAA2C,UAAU,MAAM;AAAA,IAC9F;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc9B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,sBAAsB,uCAAuC;AAAA,IACxE,SAAS,OAAO,KAAK,UAAU;AACzB,UAAA,OAAO,MAAM,aAAa,UAAU;AAChC,cAAA,WAAW,qBAAqB,MAAM,QAAQ;AACpD,cAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC1C,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,UAC5C,YAAY,KAAK,gBAAgB,EAAE,UAAU;AAAA,QAAA,CAC9C;AACK,cAAA,eAAeG,eAAa,SAAS,uBAAuB;AAClE,cAAMZ,WAAUY,eAAa,aAAa,SAAS,sBAAsB;AAClE,eAAA;AAAA,UACL,GAAGA,eAAa,QAAQ,sBAAsB;AAAA,UAC9C,WAAW,MAAM,QAAQZ,SAAQ,SAAS,IAAIA,SAAQ,YAAY,CAAC;AAAA,QAAA;AAAA,MAEvE;AACM,YAAA,SAASY,eAAa,MAAM,YAAY,KAAK,aAAa,CAAA,CAAE,GAAG,oBAAoB;AACnF,YAAA,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO;AACxD,YAAM,QAAQ,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAO,SAAS;AACjD,cAAA,MAAMA,eAAa,MAAM,gBAAgB;AACzC,cAAA,WAAW,aAAa,KAAK,iBAAiB;AAC7C,eAAA;AAAA,UACL,GAAGA;AAAAA,YACD,MAAM,YAAY,KAAK,eAAe,EAAE,UAAU;AAAA,YAClD;AAAA,UACF;AAAA,UACA,WAAW,MAAM,QAAQ,IAAI,SAAS,IAAI,IAAI,YAAY,CAAC;AAAA,QAAA;AAAA,MAE9D,CAAA,CAAC;AACF,aAAO,EAAE,OAAO,MAAM,QAAQ,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,aAAa;AAAA,MACX,EAAE,MAAM,aAAa,aAAa,sDAAsD;AAAA,IAC1F;AAAA,IACA,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,OAAO,OAAO;AAAA,MAC/B;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAC1C,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,OAAO,OAAO,EAAE;AAAA,MAC7D;AAAA,MACA,UAAU,CAAC,aAAa,SAAS;AAAA,MACjC,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,WAAW,aAAa,OAAO,WAAW;AAC5C,UAAA,CAAC,WAAW,QAAQ,GAAG;AACzB,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACI,UAAA;AACA,UAAA;AACF,iBAAS,KAAK;AAAA,UACZ,MAAM,QAAQ,EAAE,aAAa,eAAe,KAAK,aAAa,OAAO,SAAS,CAAC,CAAC;AAAA,QAAA;AAAA,eAE3E,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,mCAAmC,aAAa,KAAK,CAAC;AAAA,QAAA;AAAA,MAE1D;AACI,UAAA,CAAC,SAAS,MAAM,GAAG;AACf,cAAA,IAAI,WAAW,mBAAmB,uCAAuC;AAAA,MACjF;AACA,YAAM,SAASG;AAAAA,QACb,MAAM,YAAY,KAAK,eAAe;AAAA,UACpC,WAAW;AAAA,UACX,SAAS;AAAA,UACT,GAAI,OAAO,MAAM,aAAa,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,QAAA,CAC1E;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,EAAE,IAAI,KAAK,GAAG,cAAc;AAC3B,aAAA;AAAA,QACL,GAAG;AAAA,QACH,gBAAgB,aAAa,QAAQ,gBAAgB;AAAA,QACrD,mBAAmB;AAAA,QACnB,qBAAqB;AAAA,MAAA;AAAA,IAEzB;AAAA,EAAA;AAEJ;AAEA,eAAe,SACb,KACA,OACA,cACkC;AAClC,QAAM,SAAS,MAAM,cAAc,KAAK,OAAO,WAAW,YAAY;AAClE,MAAA;AACF,QAAI,aAAa,MAAM,cAAc,KAAK,QAAQ,KAAK;AACjD,UAAA,gBAAgBF,iBAAe,MAAM,IAAI;AAC3C,QAAA;AACJ,QAAI,eAAe;AACjB,mBAAa,MAAM,oBAAoB,KAAK,QAAQ,OAAO,UAAU;AACrE,YAAM,OAAO,WAAW;AACxB,yBAAmB,IAAI;AACZ,iBAAA,eAAe,KAAK,aAAa;AACtC,YAAA,cAAc,KAAK,UAAU,IAAI;AAAA,IACzC;AACO,WAAA;AAAA,MACL,QAAQ,cAAc,MAAM;AAAA,MAC5B,KAAK,WAAW,KAAK;AAAA,MACrB,iBAAiB,WAAW,KAAK;AAAA,MACjC,YAAY,WAAW;AAAA,MACvB,QAAQ,WAAW;AAAA,MACnB,WAAW,YAAY;AAAA,MACvB,kBAAkB,WAAW,WAAW,KAAK,mBAAmB;AAAA,IAAA;AAAA,EAClE,UACA;AACM,UAAA,eAAe,KAAK,MAAM;AAAA,EAClC;AACF;AAEA,eAAe,WACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AACxB,QAAM,gBAAgBA,iBAAe,MAAM,IAAI,IAC3C,MAAM,aAAa,eAAe,KAAK,OAAO,MAAM,IAAI,CAAC,CAAC,IAC1D;AACJ,QAAM,SAAS,MAAM,cAAc,KAAK,OAAO,WAAW,YAAY;AACtE,MAAI,cAAc;AACd,MAAA;AACF,QAAI,aAAa,gBACb,MAAM,cAAc,KAAK,QAAQ,OAAO,aAAa,IACrD,MAAM,cAAc,KAAK,QAAQ,KAAK;AACxB,sBAAA,QAAQ,iBAAiB,WAAW,IAAI;AAC1D,UAAM,MAAME,eAAa,WAAW,KAAK,KAAK,qBAAqB;AAC7D,UAAA,SAAS,aAAa,KAAK,KAAK;AACtC,UAAM,eAAe,gBAAgB,aAAa,eAAe,eAAe,IAAI;AACpF,UAAM,YAAY,MAAM,cAAc,KAAK,QAAQ,YAAY;AAE/D,QAAI,iBAAiB,WAAW;AAC9B,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,CAAC,iBAAiB,CAAC,WAAW;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,QACA,uCAAuC,OAAO,OAAO;AAAA,MAAA;AAAA,IAEzD;AAEA,QAAI,eAAe;AACjB,kCAA4B,eAAe,UAAU;AAAA,IAAA,OAChD;AACC,YAAA,QAAQ,eAAe,SAAU;AAC1B,mBAAA,MAAM,cAAc,KAAK,QAAQ,OAAO,EAAE,GAAG,OAAO,QAAQ,UAAA,CAAW;AAClE,wBAAA,QAAQ,WAAW,IAAI;AAAA,IAC3C;AAEI,QAAA,MAAM,YAAY,MAAM;AACnB,aAAA;AAAA,QACL,QAAQ;AAAA,QACR,QAAQ,cAAc,MAAM;AAAA,QAC5B,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,MAAA;AAAA,IAEvB;AAEA,QAAI,QAAQ,WAAW,IAAI,MAAM,aAAa;AAC5C,aAAO,gBAAgB,UAAU;AAAA,IACnC;AACA,UAAM,cAAc,KAAK,WAAW,oBAAoB,UAAU,CAAC;AACnE,UAAM,SAAS;AAAA,MACb,GAAG,gBAAgB,MAAM;AAAA,MACzB,GAAG,oBAAoB,WAAW,IAAI;AAAA,MACtC,SAAS,eAAe,KAAK;AAAA,MAC7B,MAAM,iBAAiB,WAAW;AAAA,MAClC,2BAA2B,aAAa,WAAW,MAAM,kBAAkB;AAAA,MAC3E,iBAAiB,eAAe,GAAG;AAAA,IAAA;AAErC,UAAM,YAAYA;AAAAA,MAChB,MAAM,YAAY,KAAK,eAAe,MAAM;AAAA,MAC5C;AAAA,IAAA;AAEF,QAAI,UAAU,WAAW,eAAe,UAAU,YAAY,MAAM;AAC3D,aAAA;AAAA,IACT;AACM,UAAA,SAAS,aAAa,WAAW,SAAS;AAClC,kBAAA;AACd,QAAI,MAAM,YAAY;AAAa,aAAA;AAC/B,QAAA;AACF,YAAM,SAAS,MAAM,YAAY,KAAK,QAAQ;AAAA,QAC5C,SAAS;AAAA,QACT,OAAO,aAAa;AAAA,MAAA,CACrB;AACM,aAAA,EAAE,GAAG,WAAW;IAAO,UAC9B;AACc,oBAAA;AAAA,IAChB;AAAA,EAAA,UACA;AACA,QAAI,CAAC;AAAmB,YAAA,eAAe,KAAK,MAAM;AAAA,EACpD;AACF;AAEA,eAAe,YACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AAClB,QAAA,WAAW,OAAO,MAAM,aAAa,WACvC,qBAAqB,MAAM,QAAQ,IACnC;AACJ,QAAM,QAAQA;AAAAA,IACZ,MAAM,YAAY,KAAK,sBAAsB,WAAW,EAAE,SAAa,IAAA,EAAE;AAAA,IACzE;AAAA,EAAA;AAEI,QAAA,QAAQ,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,QAAQ;AACzD,QAAM,aAAa,MAAM,OAAO,CAAC,UAAU;AACzC,UAAM,OAAO,SAAS,KAAK,IAAI,QAAQ,CAAA;AACvC,WAAO,KAAK,UAAU,sBAAsB,KAAK,UAAU;AAAA,EAAA,CAC5D;AAED,MAAI,MAAM,YAAY;AAAa,WAAA,EAAE,QAAQ,WAAW;AACxD,MAAI,WAAW,WAAW;AAAG,WAAO,EAAE,QAAQ,aAAa,OAAO,MAAM,QAAQ;AAE1E,QAAA,cAAc,KAAK,WAAW;AAAA,IAClC,OAAO,MAAM;AAAA,IACb,cAAc,WAAW;AAAA,IACzB;AAAA,EAAA,CACD;AAEG,MAAA;AACJ,MAAI,cAAc;AAClB,MAAI,UAAU;AACZ,UAAM,OAAOA,eAAa,WAAW,CAAC,GAAG,cAAc;AACjD,UAAA,SAAS,aAAa,MAAM,SAAS;AAC3C,UAAM,UAAU,MAAM,cAAc,KAAK,MAAM;AAC/C,QAAI,CAAC;AAAS,YAAM,IAAI,UAAU,sBAAsB,yBAAyB,MAAM,EAAE;AACzF,UAAM,SAAwB;AAAA,MAC5B,MAAM;AAAA,MACN,SAAS;AAAA,MACT,eAAe,EAAE,MAAM,cAAc,YAAY,OAAO;AAAA,IAAA;AAE1D,UAAM,aAAa,MAAM,cAAc,KAAK,QAAQ,OAAO;AAAA,MACzD,GAAG,eAAe,OAAO;AAAA,MACzB,QAAQ;AAAA,IAAA,CACT;AACW,gBAAAA;AAAAA,MACV,MAAM,YAAY,KAAK,eAAe;AAAA,QACpC,GAAG,gBAAgB,MAAM;AAAA,QACzB,GAAG,oBAAoB,WAAW,IAAI;AAAA,QACtC,SAAS,eAAe,KAAK;AAAA,QAC7B,MAAM,WAAW;AAAA,QACjB,2BAA2B,aAAa,WAAW,MAAM,kBAAkB;AAAA,QAC3E,iBAAiB,eAAe,GAAG;AAAA,MAAA,CACpC;AAAA,MACD;AAAA,IAAA;AAEF,kBAAc,UAAU,YAAY;AAAA,EAAA,OAC/B;AACO,gBAAAA;AAAAA,MACV,MAAM,YAAY,KAAK,gBAAgB,EAAE,iBAAiB,eAAe,GAAG,GAAG;AAAA,MAC/E;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,UAAU,YAAY,QAAQ,UAAU,WAAW;AAAoB,WAAA;AACrE,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AACnC,QAAM,SAAS,MAAM,YAAY,KAAK,QAAQ;AAAA,IAC5C,SAAS,cAAc,qBAAqB;AAAA,IAC5C,OAAO,aAAa;AAAA,EAAA,CACrB;AACM,SAAA,EAAE,GAAG,WAAW;AACzB;AAEA,eAAe,aACb,KACA,OACA,cACkC;AAClC,qBAAmB,KAAK;AACxB,QAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,QAAM,SAAS,MAAM,YAAY,KAAK,eAAe,EAAE,UAAU;AACjE,QAAM,YAAY,EAAE,QAAQ,aAAa,kBAAkB,MAAM,MAAM;AACvE,MAAI,MAAM,YAAY;AAAa,WAAA,EAAE,QAAQ,WAAW;AAClD,QAAA,cAAc,KAAK,aAAa,SAAS;AAC/C,QAAM,YAAYA;AAAAA,IAChB,MAAM,YAAY,KAAK,kBAAkB;AAAA,MACvC;AAAA,MACA,kBAAkB,MAAM;AAAA,MACxB,iBAAiB,eAAe,GAAG;AAAA,IAAA,CACpC;AAAA,IACD;AAAA,EAAA;AAEI,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AAC7B,QAAA,OAAO,MAAM,YAAY,KAAK,QAAQ,EAAE,OAAO,aAAa,MAAA,CAAO;AACzE,SAAO,EAAE,GAAG,WAAW,QAAQ,KAAK;AACtC;AAEA,eAAe,gBACb,KACA,OACA,MACkC;AAC9B,MAAA,MAAM,aAAa,WAAW;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,WAAW,qBAAqB,aAAa,OAAO,UAAU,CAAC;AACrE,QAAM,YAAYA;AAAAA,IAChB,MAAM,YAAY,KAAK,QAAQ,IAAI,IAAI;AAAA,MACrC;AAAA,MACA,iBAAiB,eAAe,GAAG;AAAA,MACnC,GAAI,SAAS,YAAY,EAAE,kBAAkB,MAAM,YAAY,WAAW,IAAI,CAAC;AAAA,IAAA,CAChF;AAAA,IACD,QAAQ,IAAI;AAAA,EAAA;AAER,QAAA,SAAS,aAAa,WAAW,SAAS;AAChD,MAAI,MAAM,YAAY;AAAa,WAAA;AACnC,QAAM,OAAO,MAAM,YAAY,KAAK,MAAM;AAC1C,SAAO,EAAE,GAAG,WAAW,QAAQ,KAAK;AACtC;AAEA,eAAe,cACb,KACA,OACA,SACA,cACyB;AACzB,QAAM,aAAa,MAAM,eAAe,KAAK,KAAK;AAClD,MAAI,WAAW,SAAS;AAAkB,WAAA;AAE1C,QAAMf,QAAO;AACP,QAAA,iBAAiB,mBAAmB,GAAG;AACzC,MAAA;AACA,MAAA;AACJ,MAAI,gBAAgB;AACd,QAAA;AACI,YAAAA,MAAK,MAAM,gBAAgB,EAAE,WAAW,MAAM,MAAM,KAAO;AACrD,kBAAA;AACZ,oBAAc,OAAO,WAAA,EAAa,WAAW,KAAK,EAAE;AAAA,aAC7C,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,kBAAkB,KAAK,CAAC,YAAY,OAAO,UAAU;AAAS,cAAA;AAAA,IACxF;AAAA,EACF;AACA,MAAI,CAAC,aAAa;AACV,UAAAA,MAAK,MAAM,IAAI,YAAY,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAC3D,gBAAA,MAAMA,MAAK,YAAY,EAAE,KAAK,IAAI,YAAY,MAAM,QAAQ,SAAU,CAAA;AAAA,EACpF;AACI,MAAA,OAAOA,MAAK,KAAK,KAAK,WAAY,GAAG,eAAe,QAAQ,OAAO;AACjE,QAAA,aAAa,CAAC,gBAClB,WAAW,SAAS,QAChB,aAAa,WAAW,KAAK,aAAa,aAAa,UAAU,IAAI,MAAM,IAC3E,SAAS,WAAW,MAAM,aAAa,IAAI,MAAM;AACnD,MAAA;AACE,QAAA;AACA,QAAA;AACS,iBAAA,MAAM,WAAW,IAAI;AAAA,aACzB,OAAO;AACd,UAAI,CAAC,eAAe,CAAC,YAAY,OAAO,kBAAkB;AAAS,cAAA;AACnE,YAAMA,MAAK,OAAO,IAAI,EAAE,MAAM,MAAM;AAAA,MAAA,CAAE;AACxB,oBAAA;AACR,YAAAA,MAAK,MAAM,IAAI,YAAY,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAC3D,kBAAA,MAAMA,MAAK,YAAY,EAAE,KAAK,IAAI,YAAY,MAAM,QAAQ,SAAU,CAAA;AAClF,aAAOA,MAAK,KAAK,KAAK,WAAW,aAAa;AACnC,iBAAA,MAAM,WAAW,IAAI;AAAA,IAClC;AACA,aAAS,cAAc;AACjB,UAAA,QAAQ,aAAa,aAAa;AACxC,UAAM,WAAW,MAAM,MAAM,KAAK,UAAU,OAAO;AAC/C,QAAA,SAAS,mBAAmB,qBAAqB;AAC7C,YAAA,IAAI,UAAU,8BAA8B,kCAAkC;AAAA,IACtF;AACA,QAAI,SAAS,gBAAgB,SAAS,UAAU,SAAS,SAAS,SAAS,MAAM;AAC/E,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB,SAAS;AAAA,UAC1B,eAAe,SAAS;AAAA,UACxB,eAAe,SAAS;AAAA,UACxB,aAAa,SAAS;AAAA,QACxB;AAAA,MAAA;AAAA,IAEJ;AACI,QAAA,SAAS,YAAY,SAAS;AAChC,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,MACL,MAAM,SAAS;AAAA,MACf,SAAS,SAAS;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT,eAAe,EAAE,MAAM,cAAc,gBAAgB,SAAS,OAAO;AAAA,IAAA;AAAA,EACvE,UACA;AACA,UAAMA,MAAK,OAAO,cAAc,OAAO,WAAY,EAAE,WAAW,CAAC,aAAa,EAC3E,MAAM,MAAM;AAAA,IAAA,CAAE;AAAA,EACnB;AACF;AAEA,eAAe,eACb,KACA,OAKA;AACM,QAAA,aAAaa,iBAAe,MAAM,MAAM;AACxC,QAAA,OAAOA,iBAAe,MAAM,IAAI;AACtC,MAAI,cAAc,MAAM;AAChB,UAAA,IAAI,WAAW,qBAAqB,4CAA4C;AAAA,EACxF;AACA,QAAM,MAAM,QAAQ;AACpB,MAAI,CAAC;AAAW,UAAA,IAAI,WAAW,oBAAoB,8BAA8B;AACjF,QAAM,SAAS,OAAO,SAASA,iBAAe,MAAM,IAAI;AACpD,MAAA,QAAQ,UAAU,WAAW,QAAQ;AACjC,UAAA,IAAI,WAAW,qBAAqB,8BAA8B;AAAA,EAC1E;AAEA,MAAI,WAAW;AAAO,WAAO,EAAE,MAAM,OAAO,KAAK,aAAa,GAAG;AACjE,MAAI,WAAW;AAAQ,WAAO,EAAE,MAAM,QAAQ,MAAM,eAAe,KAAK,GAAG;AAC3E,MAAI,WAAW,WAAW;AACjB,WAAA;AAAA,MACL,MAAM;AAAA,MACN,SAAS,2BAA2B,GAAG;AAAA,MACvC,eAAe,EAAE,MAAM,cAAc,YAAY,2BAA2B,GAAG,EAAE;AAAA,IAAA;AAAA,EAErF;AACI,MAAA;AAAQ,UAAM,IAAI,WAAW,oBAAoB,yBAAyB,MAAM,EAAE;AAElF,MAAA,gBAAgB,KAAK,GAAG;AAAG,WAAO,EAAE,MAAM,OAAO,KAAK,aAAa,GAAG;AACpE,QAAA,gBAAgB,eAAe,KAAK,GAAG;AACvC,QAAAY,QAAO,MAAM,SAAS,aAAa;AACzC,MAAIA,OAAM;AACJ,QAAA,CAACA,MAAK,QAAQ;AAChB,YAAM,IAAI,WAAW,uBAAuB,sCAAsC,GAAG,EAAE;AAAA,IACzF;AACA,WAAO,EAAE,MAAM,QAAQ,MAAM,cAAc;AAAA,EAC7C;AACI,MAAA,mBAAmB,GAAG,GAAG;AAC3B,UAAM,IAAI,WAAW,kBAAkB,+BAA+B,GAAG,EAAE;AAAA,EAC7E;AACM,QAAA,aAAa,2BAA2B,GAAG;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,eAAe,EAAE,MAAM,cAAc,WAAW;AAAA,EAAA;AAEpD;AAEA,SAAS,mBAAmB,KAAyC;AAC7D,QAAA,OAAO,UAAU,OAAO;AAC9B,QAAM,WAAW,IAAI,IAAI,IAAI,WAAW,QAAQ,EAAE;AAC9C,MAAA,CAAC,QAAQ,CAAC,CAAC,aAAa,aAAa,OAAO,EAAE,SAAS,QAAQ;AAAU,WAAA;AACtE,SAAA,QAAA,EAAU,KAAK,KAAK,MAAM,SAAS,iBAAiB,gBAAgB,UAAU;AACvF;AAEA,gBAAgB,WAAW,MAAgB,MAA0C;AAC7E,QAAA,SAAS,IAAI,WAAW,IAAI;AAClC,SAAO,MAAM;AACX,QAAI,OAAO;AACJ,WAAA,OAAO,OAAO,QAAQ;AAC3B,YAAM,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,IAAI,CAAC;AAClD,UAAI,SAAS;AAAM;AACnB,UAAI,SAAS;AAAS,cAAA,IAAI,WAAW,oBAAoB,4BAA4B;AAC7E,cAAA;AAAA,IACV;AACA,QAAI,SAAS;AAAG;AACV,UAAA,OAAO,SAAS,GAAG,IAAI;AAAA,EAC/B;AACF;AAEA,eAAe,kBACb,MACA,QACA,QACyD;AACzD,QAAM,SAAS,MAAM,UAAU,KAAK,MAAM,EAAE,OAAO,MAAM,WAAW,MAAM,MAAM,IAAO,CAAA;AACvF,QAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AAC1C,QAAM,QAAQ,IAAI,WAAW,gBAAgB,MAAM;AACnD,MAAI,OAAO;AACP,MAAA;AACF,qBAAiB,SAAS,QAAQ;AAChC,aAAO,eAAe;AACtB,UAAI,OAAO,MAAM;AAAc,cAAA,IAAI,MAAM,SAAS,GAAG,MAAM,SAAS,IAAI,GAAG,IAAI;AAC/E,WAAK,OAAO,KAAK;AACjB,cAAQ,MAAM;AACV,UAAA,CAAC,OAAO,cAAc,IAAI;AAAS,cAAA,IAAI,WAAW,kBAAkB,mBAAmB;AAC3F,UAAI,SAAS;AACN,aAAA,SAAS,MAAM,QAAQ;AAC5B,cAAM,UAAU,MAAM,OAAO,MAAM,MAAM,SAAS,MAAM,CAAC;AACzD,YAAI,YAAY;AAAS,gBAAA,IAAI,WAAW,qBAAqB,6BAA6B;AAChF,kBAAA;AAAA,MACZ;AAAA,IACF;AACqB,yBAAA,MAAM,SAAS,GAAG,KAAK,IAAI,MAAM,MAAM,MAAM,CAAC,CAAC;AACpE,UAAM,OAAO;AACb,WAAO,EAAE,MAAM,MAAM,QAAQ,KAAK;EAAY,UAC9C;AACA,UAAM,OAAO;EACf;AACF;AAEA,eAAe,SACb,QACA,aACA,QACuB;AACnB,MAAA;AACA,MAAA;AACK,WAAA,MAAM,UAAU,KAAK,QAAQ,EAAE,MAAM,MAAM;AAAA,WAC3C,OAAO;AACd,UAAM,IAAI,WAAW,oBAAoB,wBAAwB,aAAa,KAAK,CAAC,EAAE;AAAA,EACxF;AACI,MAAA;AACI,UAAA,SAAS,MAAM,KAAK;AAC1B,QAAI,CAAC,OAAO;AAAc,YAAA,IAAI,WAAW,uBAAuB,2BAA2B;AACrF,UAAA,WAAW,MAAM,kBAAkB,aAAa,WAAW,MAAM,MAAM,IAAI,GAAG,MAAM;AACpF,UAAA,QAAQ,MAAM,KAAK;AACzB,QACE,SAAS,SAAS,OAAO,QAAQ,OAAO,SAAS,MAAM,QACvD,OAAO,OAAO,QAAQ,MAAM,MAAM,OAAO,WACzC;AACM,YAAA,IAAI,WAAW,oBAAoB,+BAA+B;AAAA,IAC1E;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,QAAQ,GAAG;EAAS,UACpD;AACA,UAAM,KAAK;EACb;AACF;AAEA,eAAe,aACb,KACA,aACA,YACA,QACuB;AACnB,MAAA;AACA,MAAA;AACO,aAAA,aAAa,CAAC,MAAM,WAAW,KAAK,MAAM,CAAC,IAAI,MAAM,gBAAgB,KAAK,MAAM;AACzF,UAAM,WAAW,MAAM,kBAAkB,aAAa,QAAQ,MAAM;AAC7D,WAAA,EAAE,MAAM,OAAO,SAAS,QAAQ,GAAG,GAAG,GAAG;WACzC,OAAO;AACd,QAAI,iBAAiB,aAAa,YAAY,OAAO,kBAAkB;AAAS,YAAA;AAChF,WAAO,eAAe;AACtB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,4BAA4B,aAAa,KAAK,CAAC;AAAA,MAC/C;AAAA,MACA;AAAA,IAAA;AAAA,EACF,UACA;AACI,QAAA,kBAAkB,kBAAkB,CAAC,OAAO;AAAQ,YAAM,OAAO,SAAS,MAAM,MAAM;AAAA,MAAA,CAAE;AAAA,EAC9F;AACF;AAEA,eAAe,gBAAgB,KAAU,QAA0D;AAC3F,QAAA,WAAW,MAAM,MAAM,KAAK,EAAE,QAAQ,OAAO,UAAU,UAAU,OAAA,CAAQ;AAC/E,MAAI,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM;AAC5B,UAAA,SAAS,MAAM;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,+BAA+B,SAAS,MAAM;AAAA,MAC9C;AAAA,MACA,SAAS,UAAU;AAAA,IAAA;AAAA,EAEvB;AACA,SAAO,SAAS;AAClB;AAEA,eAAe,UACb,KACA,UACA,SAC8B;AACxB,QAAA,WAAW,EAAE,aAAa,SAAS,QAAQ,MAAM,SAAS,MAAM;AACtE,MAAI,SAAS,aAAa;AACpB,QAAA;AACF,YAAM5B,SAAQkB;AAAAA,QACZ,MAAM,YAAY,KAAK,yBAAyB;AAAA,UAC9C,GAAG;AAAA,UACH,eAAe,SAAS;AAAA,QAAA,CACzB;AAAA,QACD;AAAA,MAAA;AAEF,aAAO,qBAAqBlB,MAAK;AAAA,aAC1B,OAAO;AACd,UAAI,CAAC,aAAa,KAAK,EAAE,SAAS,wBAAwB;AAAS,cAAA;AAAA,IACrE;AAAA,EACF;AACA,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC;AAAS,UAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AACzF,QAAM,SAAS,MAAM,QAAQ,YAAA,GAAe;AACtC,QAAA,QAAQ,UAAU,qBAAqB;AAAA,IAC3C,UAAU8C,gBAAc,IAAI,WAAW,QAAQ;AAAA,IAC/C,cAAc;AAAA,IACd,SAAS,CAAC,SAA4B,SACpC,MAAM,uBAAuB,OAAO,GAAG,EAAE,GAAG,MAAM,QAAQ,IAAI,QAAQ;AAAA,EAAA,CACzE;AACG,MAAA;AACA,MAAA;AACI,UAAA,OAAO,MAAM,QAAA,EAAU,KAAK,SAAS,MAAM,EAAE,MAAM,KAAA,CAAM;AACzD,UAAA,SAAS,IAAI,IAAI;AACvB,UAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AACtC,QAAA;AACF,uBAAiB,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI,GAAG;AAC5D,YAAI,OAAO;AACX,aAAK,OAAO,KAAK;AACX,cAAA,QAAQ,IAAI,QAAQ,iBAAiB,MAAM,QAAQ,IAAI,YAAY,KAAK,CAAC;AAC/E,cAAM,MAAM,SAAS,MAAM,YAAY,KAAK;AAC5C,eAAO,YAAY,KAAK;AAAA,MAC1B;AAAA,IAAA,UACA;AACA,YAAM,KAAK;IACb;AACI,QAAA,OAAO,eAAe,SAAS,QAAQ,KAAK,UAAU,MAAM,SAAS,QAAQ;AACzE,YAAA,IAAI,UAAU,wBAAwB,qCAAqC;AAAA,IACnF;AACA,QAAI,UAAU,OAAO,KAAK,CAAC,EAAE,SAAS;AAClC,QAAA,OAAO,KAAK,SAAS,GAAG;AAC1B,YAAM,CAACC,KAAIC,KAAI,IAAI,OAAO,SAAS;AAC7B,YAAA,MAAM,UAAU,EAAE,QAAQD,IAAG,YAAY,UAAUC,MAAAA,CAAM;AAC/D,gBAAUD,IAAG;IACf;AACM,UAAA,aAAa,IAAI,IAAI,WAAW,GAAG,SAAS,MAAM,SAAS,SAAS,MAAM,OAAO;AACvF,UAAM,CAAC,IAAI,IAAI,IAAI,WAAW,SAAS;AACjC,UAAA,MAAM,UAAU,EAAE,QAAQ,GAAG,YAAY,UAAU,KAAA,CAAM;AAC/D,mBAAe,GAAG;WACX,OAAO;AACd,QAAI,iBAAiB;AAAiB,YAAA;AACtC,QAAI,OAAO;AACX,UAAM,IAAI;AAAA,MACR;AAAA,MACA,0BAA0B,aAAa,KAAK,CAAC;AAAA,MAC7C;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,QAAQ7B;AAAAA,IACZ,MAAM,YAAY,KAAK,yBAAyB;AAAA,MAC9C,GAAG;AAAA,MACH,eAAe;AAAA,IAAA,CAChB;AAAA,IACD;AAAA,EAAA;AAEF,SAAO,qBAAqB,KAAK;AACnC;AAEA,SAAS,qBAAqB,OAAqD;AAC1E,SAAA;AAAA,IACL,gBAAgB,aAAa,OAAO,gBAAgB;AAAA,IACpD,QAAQ,aAAa,OAAO,QAAQ;AAAA,IACpC,aAAa,aAAa,OAAO,aAAa;AAAA,IAC9C,MAAM,aAAa,OAAO,MAAM;AAAA,IAChC,SAAS,aAAa,OAAO,SAAS;AAAA,IACtC,YAAY,eAAe,MAAM,UAAU;AAAA,EAAA;AAE/C;AAEA,SAAS,uBAAuB,SAA+C;AACzE,MAAA,OAAO,YAAY,UAAU;AAC/B,WAAO,QAAQ,WAAW,OAAO,GAAG,EAAE,WAAW,OAAO,GAAG;AAAA,EAC7D;AACA,MAAI,mBAAmB,KAAK;AAC1B,WAAO,IAAI,IAAI,QAAQ,SAAW,EAAA,WAAW,OAAO,GAAG,EAAE,WAAW,OAAO,GAAG,CAAC;AAAA,EACjF;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,QACA,OACA,YAAqC,CAAA,GACT;AAC5B,QAAM,SAAS,MAAM,YAAY,KAAK,gBAAgB;AAAA,IACpD,GAAG,gBAAgB,MAAM;AAAA,IACzB,GAAG,qBAAqB,KAAK;AAAA,IAC7B,GAAG;AAAA,IACH,SAAS,eAAe,KAAK;AAAA,EAAA,CAC9B;AACD,SAAO,iBAAiB,MAAM;AAChC;AAEA,eAAe,cACb,KACA,QACA,OACA,MACA,YAAqC,IACT;AACrB,SAAA;AAAA,IACL,MAAM,YAAY,KAAK,uBAAuB;AAAA,MAC5C,GAAG,gBAAgB,MAAM;AAAA,MACzB,GAAG,oBAAoB,IAAI;AAAA,MAC3B,GAAG;AAAA,MACH;AAAA,MACA,SAAS,eAAe,KAAK;AAAA,IAAA,CAC9B;AAAA,EAAA;AAEL;AAEA,eAAe,oBACb,KACA,QACA,OACA,SAC4B;AAC5B,MAAI,aAAa;AACjB,QAAM,cAAc,eAAe,YAAY,QAAQ,MAAM;AACzD,MAAA,IAAI,OAAO,gBAAgB;AAC7B,QAAI,CAAC,eAAe,MAAM,WAAW,UAAa,MAAM,mBAAmB,QAAW;AACpF,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACO,WAAA;AAAA,EACT;AAEM,QAAA,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,oBAAoB,UAAU,GAAG,MAAM,CAAC,CAAC;AAAA,CAAI;AACnF,MAAI,CAAC,IAAI,GAAG,mBAAmB,IAAI;AAAkB,WAAA;AAC/C,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,uCAAuC,IAAI,OAC5E;AACC,MAAA,WAAW,OAAO,WAAW,MAAM;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,WAAW,OAAO,WAAW,QAAQ;AACvC,UAAM,MAAM,MAAM,IAAI,GAAG,OAAO,2DAA2D;AACrF,UAAA,UAAU,iBAAiB,GAAG;AACpC,iBAAa,MAAM,cAAc,KAAK,QAAQ,OAAO,QAAQ,MAAM,OAAO;AAAA,EAC5E;AACA,MAAI,eAAe,YAAY,QAAQ,MAAM,SAAS;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACO,SAAA;AACT;AAEA,eAAe,cACb,KACA,QACA,aAC8C;AAC1C,MAAA;AACK,WAAAA;AAAAA,MACL,MAAM,YAAY,KAAK,gBAAgB;AAAA,QACrC,UAAU;AAAA,QACV,GAAI,cAAc,EAAE,eAAe,gBAAgB,CAAC;AAAA,MAAA,CACrD;AAAA,MACD;AAAA,IAAA;AAAA,WAEK,OAAO;AACV,QAAA,iBAAiB,aAAa,MAAM,SAAS;AAA6B,aAAA;AACxE,UAAA;AAAA,EACR;AACF;AAEA,eAAe,mBACb,KACA,QAC0B;AAC1B,QAAM,SAASA;AAAAA,IACb,MAAM,YAAY,KAAK,uBAAuB,EAAE,SAAS,QAAQ;AAAA,IACjE;AAAA,EAAA;AAEF,QAAM,QAAQ,SAAS,OAAO,KAAK,IAAI,OAAO,QAAQ;AAChD,QAAA,mBAAmB,SAAS,SAAS,MAAM,OAAO,IACpD,kBAAkB,MAAM,OAAO,IAC/B;AACG,SAAA;AAAA,IACL,OAAO,aAAa,QAAQ,YAAY;AAAA,IACxC,SAASF,iBAAe,OAAO,YAAY;AAAA,IAC3C,SAAS,uBAAuB,MAAM;AAAA,IACtC,OAAO,QACH;AAAA,MACA,MAAMA,iBAAe,MAAM,IAAI;AAAA,MAC/B,SAASA,iBAAe,MAAM,OAAO;AAAA,MACrC,WAAW,OAAO,MAAM,cAAc,YAAY,MAAM,YAAY;AAAA,MACpE,SAAS,SAAS,gBAAgB,IAAI,mBAAmB;AAAA,IAEzD,IAAA;AAAA,IACJ,MAAM;AAAA,EAAA;AAEV;AAEA,eAAe,cACb,KACA,QACAV,UACe;AACf,QAAM,IAAI,GAAG,OAAO,GAAG,KAAK,UAAU,EAAE,QAAQ,WAAWA,SAAW,GAAA,MAAM,CAAC,CAAC;AAAA,CAAI;AAClF,MAAI,IAAI;AAAW;AACnB,MAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAG,MAAM;AAAA,MACT;AAAA,IAAA;AAAA,EAEJ;AACM,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,oBAAoB,MAAM,UAAU,IAAI,KAAK,EAAE,YAAY;AAC3F,MAAA,WAAW,OAAO,WAAW,OAAO;AACtC,UAAM,IAAI,UAAU,yBAAyB,GAAG,MAAM,iBAAiB,eAAe;AAAA,EACxF;AACF;AAEA,eAAe,YACb,KACA,QACA,QACY;AACR,MAAA;AACK,WAAA,MAAM,IAAI,QAAQ,KAAQ,uBAAuB,QAAQ,QAAQ,WAAW,GAAG,CAAC;AAAA,WAChF,OAAO;AACd,UAAM,yBAAyB,KAAK;AAAA,EACtC;AACF;AAEA,SAAS,yBAAyB,OAA2B;AAC3D,MAAI,iBAAiB;AAAkB,WAAA;AACjC,QAAA,UAAU,aAAa,KAAK;AAC5B,QAAA,aAAa,kBAAkB,OAAO;AAC5C,MAAI,cAAc,OAAO,WAAW,SAAS,UAAU;AACrD,UAAM,aAAa,SAAS,WAAW,OAAO,IAAI,WAAW,UAAU;AACjE,UAAA,UAAU,kBAAkB,UAAU;AAC5C,WAAO,IAAI;AAAA,MACT,WAAW;AAAA,MACX,OAAO,WAAW,YAAY,WAAW,WAAW,UAAU;AAAA,MAC9D,WAAW,SAAS,yBAAyB,iBAAiB;AAAA,MAC9D,WAAW,cAAc;AAAA,MACzB,SAAS,OAAO,IAAI,UAAU,CAAC;AAAA,IAAA;AAAA,EAEnC;AACM,QAAA,QAAQ,QAAQ;AACtB,MACE,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,cAAc,KAChE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,iBAAiB,KACzE,MAAM,SAAS,eAAe,GAC9B;AACA,WAAO,IAAI;AAAA,MACT,MAAM,SAAS,SAAS,IAAI,oBAAoB;AAAA,MAChD,MAAM,SAAS,SAAS,IAAI,kCAAkC;AAAA,MAC9D;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,MAAM,SAAS,OAAO,KAAK,MAAM,SAAS,QAAQ,GAAG;AACvD,WAAO,IAAI,UAAU,YAAY,sBAAsB,YAAY;AAAA,EACrE;AACA,MAAI,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,WAAW,GAAG;AAC5D,WAAO,IAAI,UAAU,WAAW,uBAAuB,cAAc,IAAI;AAAA,EAC3E;AACA,MACE,MAAM,SAAS,cAAc,KAAK,MAAM,SAAS,oBAAoB,KACrE,MAAM,SAAS,qBAAqB,KAAK,MAAM,SAAS,qBAAqB,KAC7E,MAAM,SAAS,qBAAqB,GACpC;AACA,WAAO,IAAI,UAAU,uBAAuB,SAAS,kBAAkB,IAAI;AAAA,EAC7E;AACA,MAAI,QAAQ,SAAS,mBAAmB,KAAK,aAAa,KAAK,OAAO,GAAG;AAChE,WAAA,IAAI,UAAU,sBAAsB,OAAO;AAAA,EACpD;AACI,MAAA,wBAAwB,KAAK,OAAO,GAAG;AACzC,WAAO,IAAI,UAAU,qBAAqB,SAAS,eAAe;AAAA,EACpE;AACI,MAAA,oCAAoC,KAAK,OAAO,GAAG;AAC9C,WAAA,IAAI,UAAU,wBAAwB,OAAO;AAAA,EACtD;AACA,SAAO,IAAI,UAAU,oBAAoB,SAAS,cAAc;AAClE;AAEA,SAAS,gBAAgB,QAAiD;AACjE,SAAA,EAAE,QAAQ,OAAO;AAC1B;AAEA,SAAS,qBAAqB,OAAyD;AAC9E,SAAA;AAAA,IACL,GAAI,OAAO,MAAM,kBAAkB,WAAW,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,IACxF,GAAI,SAAS,MAAM,MAAM,IAAI,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,IACzD,GAAI,SAAS,MAAM,cAAc,IAAI,EAAE,gBAAgB,MAAM,eAAe,IAAI,CAAC;AAAA,EAAA;AAErF;AAEA,SAAS,oBAAoB,MAAwD;AAC5E,SAAA;AAAA,IACL,eAAe,aAAa,MAAM,eAAe;AAAA,IACjD,QAAQY,eAAa,KAAK,QAAQ,aAAa;AAAA,IAC/C,gBAAgBA,eAAa,KAAK,gBAAgB,qBAAqB;AAAA,EAAA;AAE3E;AAEA,SAAS,eAAe,SAA2D;AAC1E,SAAA;AAAA,IACL,eAAe,aAAa,SAAS,eAAe;AAAA,EAAA;AAExD;AAEA,SAAS,eAAe,OAAyD;AAC/E,QAAM+B,UAASjC,iBAAe,MAAM,MAAM,KAAK;AACxC,SAAA,EAAE,QAAQiC,QAAO,WAAW,KAAK,GAAG,EAAE;AAC/C;AAEA,SAAS,cAAc,QAAiD;AACtE,MAAI,OAAO,SAAS;AAAW,WAAO,EAAE,MAAM,OAAO,MAAM,YAAY,OAAO;AACvE,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,QAAQ,OAAO;AAAA,IACf,aAAa,OAAO,SAAS;AAAA,IAC7B,MAAM,OAAO,SAAS;AAAA,EAAA;AAE1B;AAEA,SAAS,oBAAoB,YAAwD;AACnF,QAAM,OAAO,WAAW;AACjB,SAAA;AAAA,IACL,kBAAkB,KAAK;AAAA,IACvB,UAAU,KAAK;AAAA,IACf,KAAK,KAAK;AAAA,IACV,iBAAiB,KAAK;AAAA,IACtB,eAAe,KAAK;AAAA,IACpB,QAAQ,KAAK;AAAA,IACb,mBAAmB,KAAK;AAAA,IACxB,gBAAgB,KAAK;AAAA,IACrB,WAAW,WAAW,OAAO;AAAA,IAC7B,UAAU,WAAW,OAAO,YAAY,CAAC;AAAA,EAAA;AAE7C;AAEA,SAAS,gBAAgB,YAAwD;AACxE,SAAA;AAAA,IACL,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,iBAAiB,WAAW,KAAK;AAAA,IACjC,mBAAmB/B,eAAa,WAAW,KAAK,KAAK,UAAU,EAAE;AAAA,EAAA;AAErE;AAEA,SAAS,4BACP,MACA,YACM;AACA,QAAA,cAAc,aAAa,MAAM,kBAAkB;AACrD,MAAA,gBAAgB,WAAW,KAAK,kBAAkB;AACpD,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,kBAAkB;AAAA,QAClB,qBAAqB,WAAW,KAAK;AAAA,MACvC;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,SAAS,kBACP,QACA,MACM;AACN,MAAI,OAAO,SAAS;AAAW;AAC/B,QAAM,WAAWA,eAAa,KAAK,iBAAiB,sBAAsB;AACpE,QAAA,SAAS,aAAa,UAAU,aAAa;AAC/C,MAAA,WAAW,OAAO,SAAS,QAAQ;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,aAAa,QAAQ,eAAe,OAAO,SAAS,OAAO;AAAA,IAAA;AAAA,EAEjE;AACF;AAEA,SAAS,mBAAmB,MAAqC;AAC3D,MAAA,KAAK,mBAAmB,qBAAqB;AAC/C,UAAM,IAAI;AAAA,MACR;AAAA,MACA,+BAA+B,mBAAmB;AAAA,IAAA;AAAA,EAEtD;AACA,eAAa,MAAM,kBAAkB;AACrC,eAAa,MAAM,SAAS;AACtB,QAAA,8BAAc,IAAI;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,aAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACnC,QAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACrB,YAAM,IAAI,UAAU,cAAc,0CAA0C,GAAG,EAAE;AAAA,IACnF;AAAA,EACF;AACA,sBAAoB,MAAM,MAAM;AAClC;AAEA,SAAS,oBAAoB,OAAgB,MAAoB;AAC3D,MAAA,MAAM,QAAQ,KAAK,GAAG;AAClB,UAAA,QAAQ,CAAC,MAAM,UAAU,oBAAoB,MAAM,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC;AAC7E;AAAA,EACF;AACI,MAAA,CAAC,SAAS,KAAK;AAAG;AACtB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1C,UAAA,aAAa,IAAI;AACvB,UAAM,aAAa,eAAe,oBAAoB,eAAe,kBACnE,eAAe,mBAAmB,eAAe,mBACjD,eAAe,iBAAiB,eAAe,cAC/C,WAAW,SAAS,QAAQ,KAAK,WAAW,SAAS,WAAW,KAChE,WAAW,SAAS,cAAc,KACjC,WAAW,SAAS,QAAQ,KAAK,eAAe;AACnD,QAAI,YAAY;AACd,YAAM,IAAI,UAAU,uBAAuB,GAAG,IAAI,IAAI,GAAG,8BAA8B;AAAA,IACzF;AAEE,QAAA,OAAO,UAAU,aAChB,8CAA8C,KAAK,KAAK,KACvD,2DAA2D,KAAK,KAAK,IACvE;AACA,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,IAAI,IAAI,GAAG;AAAA,MAAA;AAAA,IAElB;AACA,wBAAoB,OAAO,GAAG,IAAI,IAAI,GAAG,EAAE;AAAA,EAC7C;AACF;AAEA,eAAe,aAAa,MAAgD;AACtE,MAAA;AACA,MAAA;AACF,UAAM,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,WAChC,OAAO;AACd,UAAM,IAAI,WAAW,oBAAoB,+BAA+B,aAAa,KAAK,CAAC,EAAE;AAAA,EAC/F;AACI,MAAA;AACA,MAAA;AACM,YAAA,KAAK,MAAM,GAAG;AAAA,EAAA,QAChB;AACA,UAAA,IAAI,WAAW,qBAAqB,+BAA+B;AAAA,EAC3E;AACM,QAAA,OAAOA,eAAa,OAAO,aAAa;AAC9C,qBAAmB,IAAI;AAChB,SAAA;AACT;AAEA,eAAe,cACb,KACA,MACA,MACe;AACT,QAAA,SAAS,MAAM,SAAS,IAAI;AAClC,MAAI,QAAQ;AACN,QAAA,CAAC,OAAO,QAAQ;AACZ,YAAA,IAAI,WAAW,qBAAqB,+CAA+C;AAAA,IAC3F;AACI,QAAA,CAAC,IAAI,WAAW;AAClB,UAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,cAAM,IAAI;AAAA,UACR;AAAA,UACA,+BAA+B,IAAI;AAAA,UACnC;AAAA,QAAA;AAAA,MAEJ;AACM,YAAA,UAAU,MAAM,IAAI,GAAG,OAAO,kCAAkC,IAAI,UAAU,IAChF,KAAK,EAAE,YAAY;AACnB,UAAA,WAAW,OAAO,WAAW,OAAO;AACtC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,GAAG,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA;AAC5C,MAAA;AACF,UAAM,QAAU,EAAA;AAAA,MACd;AAAA,MACA;AAAA,MACA,SAAS,EAAE,MAAM,QAAU,EAAE,WAAW,MAAM,MAAM,IAAM;AAAA,IAAA;AAExD,QAAA,QAAA,EAAU,aAAa;AAAW,YAAM,QAAQ,EAAE,MAAM,MAAM,GAAK;AAAA,WAChE,OAAO;AACd,UAAM,IAAI,WAAW,qBAAqB,gCAAgC,aAAa,KAAK,CAAC,EAAE;AAAA,EACjG;AACF;AAEA,eAAe,eAAe,KAAqB,QAAuC;AACxF,MAAI,OAAO,SAAS;AAAW;AAC3B,MAAA;AACF,UAAM,IAAI,QAAQ;AAAA,MAChB;AAAA,MACA;AAAA,MACA,EAAE,gBAAgB,OAAO,QAAQ,OAAO;AAAA,MACxC;AAAA,QACE,SAAS,IAAI;AAAA,QACb,WAAW;AAAA,QACX,QAAQ,IAAI,gBAAA,EAAkB;AAAA,MAChC;AAAA,IAAA;AAAA,WAEK,OAAO;AACd,UAAM,IAAI,GAAG,OAAO,kDAAkD,aAAa,KAAK,CAAC;AAAA,CAAI;AAAA,EAC/F;AACF;AAEA,SAAS,iBAAiB,OAAmC;AACrD,QAAAhB,UAASgB,eAAa,OAAO,uBAAuB;AACpD,QAAA,gBAAgB,aAAahB,SAAQ,gBAAgB;AAC3D,MAAI,kBAAkB,qBAAqB;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,MACA,8BAA8B,aAAa,MAAM,mBAAmB;AAAA,IAAA;AAAA,EAExE;AACA,QAAM,aAAgC;AAAA,IACpC,gBAAgB;AAAA,IAChB,MAAMgB,eAAahB,QAAO,MAAM,iBAAiB;AAAA,IACjD,mBAAmBgB,eAAahB,QAAO,mBAAmB,8BAA8B;AAAA,IACxF,QAAQgB,eAAahB,QAAO,QAAQ,mBAAmB;AAAA,EAAA;AAEzD,qBAAmB,WAAW,IAAI;AAClC,MAAI,WAAW,OAAO,qBAAqB,WAAW,KAAK,kBAAkB;AAC3E,UAAM,IAAI,UAAU,4BAA4B,0CAA0C,CAAC;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,KAAyD;AACjF,MAAI,CAAC;AAAW,UAAA,IAAI,UAAU,uBAAuB,+BAA+B;AAChF,MAAA;AACA,MAAA;AACM,YAAA,KAAK,MAAM,GAAG;AAAA,EAAA,QAChB;AACA,UAAA,IAAI,WAAW,sBAAsB,iCAAiC;AAAA,EAC9E;AACM,QAAA,UAAUgB,eAAa,OAAO,cAAc;AAClD,aAAW,OAAO,OAAO,KAAK,OAAO,GAAG;AAClC,QAAA,QAAQ,YAAY,QAAQ,kBAAkB;AAChD,YAAM,IAAI,WAAW,oBAAoB,wBAAwB,GAAG,EAAE;AAAA,IACxE;AAAA,EACF;AACO,SAAA;AACT;AAEA,SAAS,2BAA2B,OAAuB;AACnD,QAAA,MAAM,MAAM;AAClB,MACE,CAAC,OAAO,gBAAgB,KAAK,GAAG,KAAK,IAAI,SAAS,GAAG,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,KAAK,GAAG,GAC7F;AACA,UAAM,IAAI,WAAW,oBAAoB,mCAAmC,KAAK,EAAE;AAAA,EACrF;AACI,MAAA,IAAI,WAAW,MAAM,GAAG;AAC1B,WAAO,YAAY,GAAG;AAAA,EACxB;AACO,SAAA,IAAI,SAAS,GAAG,IAAI,IAAI,gBAAgB,YAAY,WAAW,GAAG,EAAE;AAC7E;AAEA,SAAS,qBAAqB,OAAuB;AACnD,SAAO,2BAA2B,KAAK;AACzC;AAEA,SAAS,YAAY,KAAqB;AACpC,MAAA;AACA,MAAA;AACI,UAAA,QAAQ,IAAI,QAAQ,GAAG;AAAA,WACtB,OAAO;AACd,UAAM,IAAI,WAAW,mBAAmB,oBAAoB,aAAa,KAAK,CAAC,EAAE;AAAA,EACnF;AACA,MAAI,IAAI,WAAW,SAAS,IAAI,WAAW,OAAO;AAC1C,UAAA,IAAI,WAAW,mBAAmB,uCAAuC;AAAA,EACjF;AACA,SAAO,IAAI;AACb;AAEA,SAAS,aAAa,OAAoB;AACpC,MAAA;AACA,MAAA;AACI,UAAA,IAAI,IAAI,KAAK;AAAA,EAAA,QACb;AACN,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,KAAK,EAAE;AAAA,EACvE;AACA,MAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACnD,UAAA,IAAI,WAAW,oBAAoB,iCAAiC;AAAA,EAC5E;AACI,MAAA,IAAI,YAAY,IAAI,UAAU;AAC1B,UAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAAA,EAClF;AACO,SAAA;AACT;AAEA,SAAS,qBAAqB,OAAyB;AACjD,MAAA,MAAM,SAAS,gBAAgB,QAAQ;AACnC,UAAA,IAAI,WAAW,gBAAgB,yCAAyC;AAAA,EAChF;AACI,MAAA,CAAC,gBAAgB,MAAM,CAAC,MAAM,UAAU,MAAM,KAAK,MAAM,IAAI,GAAG;AAC5D,UAAA,IAAI,WAAW,gBAAgB,+CAA+C;AAAA,EACtF;AACF;AAEA,SAAS4B,gBAAc,UAA0B;AACzC,QAAA,MAAM,IAAI,IAAI,QAAQ;AAC5B,QAAM,SAAS,IAAI,SAAS,QAAQ,OAAO;AACvC,MAAA,WAAW,UAAU,IAAI,IAAI,SAAS,MAAM,GAAG,MAAM,KAAK,MAAM;AACpE,MAAI,SAAS;AACb,MAAI,OAAO;AACX,SAAO,IAAI,SAAW,EAAA,QAAQ,OAAO,EAAE;AACzC;AAEA,SAAS,QAAQ,KAAkB;AAC3B,QAAA,OAAO,IAAI,IAAI,GAAG;AACxB,OAAK,SAAS;AACd,OAAK,OAAO;AACZ,SAAO,KAAK;AACd;AAEA,SAAS,mBAAmB,OAAwB;AAClD,SAAO,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,IAAI,KAAK,MAAM,WAAW,GAAG,KACxE,MAAM,YAAY,EAAE,SAAS,OAAO;AACxC;AAEA,eAAe,SAAS,MAAiD;AACnE,MAAA;AACF,WAAO,MAAM,QAAA,EAAU,MAAM,IAAI;AAAA,WAC1B,OAAO;AACV,QAAA,YAAY,OAAO,UAAU;AAAU,aAAA;AACrC,UAAA,IAAI,WAAW,sBAAsB,qBAAqB,IAAI,KAAK,aAAa,KAAK,CAAC,EAAE;AAAA,EAChG;AACF;AAEA,SAAS,eAAe,KAAqB,MAAsB;AAC1D,SAAA,WAAW,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,KAAK,IAAI;AACjE;AAEA,SAAS,kBAAkB,SAAsD;AAC/E,WAAS,QAAQ,QAAQ,QAAQ,GAAG,GAAG,SAAS,GAAG,QAAQ,QAAQ,QAAQ,KAAK,QAAQ,CAAC,GAAG;AACtF,QAAA;AACF,YAAM,QAAQ,KAAK,MAAM,QAAQ,MAAM,KAAK,CAAC;AAC7C,UAAI,SAAS,KAAK;AAAU,eAAA;AAAA,IAAA,QACtB;AAAA,IAER;AAAA,EACF;AACO,SAAA;AACT;AAEA,SAAS,eAAe,YAA+B,OAAmC;AAClF,QAAA,YAAY,SAAS,WAAW,OAAO,SAAS,IAAI,WAAW,OAAO,YAAY;AACxF,SAAO,YAAY9B,iBAAe,UAAU,KAAK,CAAC,IAAI;AACxD;AAEA,SAAS,QAAQ,MAAmD;AAC3D,SAAAA,iBAAe,KAAK,QAAQ;AACrC;AAEA,SAAS,uBAAuB,QAAqD;AAC7E,QAAA,QAAQA,iBAAe,OAAO,KAAK;AACzC,QAAM,WAAW,SAAS,OAAO,QAAQ,IAAI,OAAO,WAAW;AACzD,QAAA,UAAU,YAAY,OAAO,SAAS,YAAY,WACpD,GAAG,SAAS,OAAO,MACnB;AACG,SAAA,CAAC,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AACvD;AAEA,SAAS,eAAe,KAA6B;AAC5C,SAAA,IAAI,kBAAkB,OAAO,WAAW;AACjD;AAEA,SAAS,mBAAmB,OAAsC;AAChE,MAAI,MAAM,YAAY,QAAQ,MAAM,YAAY,MAAM;AAC9C,UAAA,IAAI,WAAW,qBAAqB,gDAAgD;AAAA,EAC5F;AACF;AAEA,SAAS,gBAAgB,SAMH;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,6BAA6B;AAAA,IAC5E,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcD;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ,OAAO;AAAA,IAC/C,WAAW,QAAQ;AAAA,IACnB,iBAAiB;AAAA,IACjB,UAAU,CAAC,eAAe,QAAQ,IAAI,OAAO;AAAA,IAC7C,SAAS,QAAQ;AAAA,EAAA;AAErB;AAEA,SAAS,cACP,OAC2C;AACpC,SAAA;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,MAAM,CAAC,WAAW,QAAQ,KAAK;AAAA,IACjC;AAAA,IACA,EAAE,MAAM,QAAQ,aAAa,4BAA4B,MAAM,SAAS;AAAA,IACxE,GAAG;AAAA,EAAA;AAEP;AAEA,SAAS,kBAAkB,OAA+C;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,QAAQ,KAAK,EAAE;AAAA,MACzD,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,GAAG;AAAA,IACL;AAAA,IACA,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,mBAA+B;AACtC,SAAO,EAAE,MAAM,UAAU,YAAY,CAAA,GAAI,sBAAsB;AACjE;AAEA,SAAS,cAAiE;AACjE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EAAA;AAEV;AAEA,SAAS,eAAkE;AAClE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM,CAAC,GAAG,gBAAgB;AAAA,EAAA;AAE9B;AAEA,SAAS,WAAW,KAIlB;AACO,SAAA;AAAA,IACL,SAAS,IAAI;AAAA,IACb,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAA,CAAK;AAAA,IAChE,QAAQ,IAAI;AAAA,EAAA;AAEhB;AAEA,SAASG,eAAa,OAAgB,OAAwC;AACxE,MAAA,CAAC,SAAS,KAAK,GAAG;AACpB,UAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,sBAAsB,aAAa;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,SAAS,OAAkD;AAC3D,SAAA,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AACrE;AAIA,SAAS,aAAa,OAAgB,UAA0B;AAC9D,QAAM,YAAY,SAAS,KAAK,IAAI,MAAM,QAAQ,IAAI;AACtD,MAAI,OAAO,cAAc,YAAY,CAAC,UAAU,QAAQ;AACtD,UAAM,IAAI,UAAU,4BAA4B,GAAG,QAAQ,+BAA+B,CAAC;AAAA,EAC7F;AACO,SAAA;AACT;AAEA,SAAS,aAAahB,SAAiC,UAA0B;AACzE,QAAA,QAAQA,QAAO,QAAQ;AACzB,MAAA,OAAO,UAAU,YAAY,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC1E,UAAM,IAAI,UAAU,4BAA4B,GAAG,QAAQ,mCAAmC,CAAC;AAAA,EACjG;AACO,SAAA;AACT;AAEA,SAASc,iBAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,MAAM,SAAS,QAAQ;AAC7D;AAEA,SAAS,eAAe,OAAoC;AAC1D,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ;AACvE;AAEA,SAAS,aAAa,OAAwB;AAC5C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEA,SAAS,kBAAkB,OAAyB;AAC9C,MAAA,MAAM,QAAQ,KAAK;AAAU,WAAA,MAAM,IAAI,iBAAiB;AACxD,MAAA,CAAC,SAAS,KAAK;AAAU,WAAA;AAC7B,QAAM,SAAkC,CAAA;AAClC,QAAA,gCAAgB,IAAI;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,CAAC,UAAU,IAAI,IAAI,aAAa;AAAU,aAAA,GAAG,IAAI,kBAAkB,KAAK;AAAA,EAC9E;AACO,SAAA;AACT;ACz2DA,eAAsB,iBACpB,KACA,SACA,QACA,SACA,UAA2B,wBACA;AAC3B,QAAM,OAAO,QAAU,EAAA,KAAK,WAAW,OAAO,IAC1C,UACA,QAAU,EAAA,KAAK,QAAQ,IAAI,KAAK,OAAO;AAC3C,QAAM,OAAO,IAAI,IAAI,kBAAkB,IAAI,QAAQ,OAAO,CAAC;AACrD,QAAA,MAAM,IAAI,IAAI,QAAQ,GAAG,KAAK,QAAQ,KAAK,KAAK,IAAI,EAAE;AAC5D,MAAI,IAAI,WAAW,KAAK,UAAU,IAAI,YAAY,IAAI,UAAU;AACxD,UAAA,IAAI,UAAU,wBAAwB,kDAAkD;AAAA,EAChG;AACA,QAAM,QAAQ,MAAM,QAAQ,KAAK,GAAG;AAChC,MAAA;AACI,UAAA,OAAO,MAAM,QAAU,EAAA,KAAK,MAAM,EAAE,WAAW,MAAM,OAAO,KAAM,CAAA;AACpE,QAAA;AACF,UAAI,SAAS;AACb,aAAO,SAAS,MAAM;AAAQ,kBAAU,MAAM,KAAK,MAAM,MAAM,SAAS,MAAM,CAAC;AAC/E,YAAM,KAAK;IAAK,UAChB;AACA,YAAM,KAAK;IACb;AAAA,WACO,OAAO;AACV,QAAA,YAAY,OAAO,eAAe,GAAG;AACvC,YAAM,IAAI,WAAW,iBAAiB,+BAA+B,IAAI,EAAE;AAAA,IAC7E;AACI,QAAA;AACI,YAAA,QAAU,EAAA,OAAO,IAAI;AAAA,IAAA,QACrB;AAAA,IAER;AACM,UAAA;AAAA,EACR;AACM,QAAA,SAAS,MAAM,OAAO,OAAO,OAAO,WAAW,WAAW,KAAK,KAAK,EAAE,MAAM;AAC3E,SAAA,EAAE,MAAM,MAAM,MAAM,YAAY,QAAQ,MAAM,IAAI,WAAW,MAAM,CAAC,EAAE;AAC/E;AAEA,eAAe,uBAAuB,KAAU,KAA0C;AAClF,QAAA,QAAQ,IAAI,WAAW,MAAM,IAAI,QAAQ,eAAe,QAAQ;AAChE,QAAA,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,SAAS,QAAQ,EAAE,eAAe,UAAU,KAAK,GAAO,IAAA;AAAA,IACxD,QAAQ,IAAI;AAAA,EAAA,CACb;AACG,MAAA,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR;AAAA,MACA,sCAAsC,SAAS,MAAM;AAAA,IAAA;AAAA,EAEzD;AACA,SAAO,IAAI,WAAW,MAAM,SAAS,YAAa,CAAA;AACpD;AAEA,SAAS,MAAM,OAA2B;AACxC,SAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAC7E;ACzDA,MAAMK,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAM/D,SAAA,uBACd,eAA6C,IAC9B;AACR,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,eAAA,GAAkBmC,gBAAc,YAAY,CAAC;AAAA,EAAA;AAE5D;AAEA,SAAS,iBAAoC;AACpC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,MACZ;AAAA,MACA,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAS;AAAA,MAC7E,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAS;AAAA,MAC7E;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,CAAC;AAAA,QACX,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcnC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,WAAW,cAAc,MAAM,QAAQ;AACzC,UAAA,SAAS,WAAW,GAAG;AACnB,cAAA,IAAI,WAAW,oBAAoB,6CAA6C;AAAA,MACxF;AACA,YAAM,WAAWG;AAAAA,QACf,MAAM;AAAA,UACJ;AAAA,UACAG;AAAAA,UACA;AAAA,UACA8B,UAAQ;AAAA,YACN;AAAA,YACA,OAAO,YAAY,OAAO,OAAO;AAAA,YACjC,OAAO,YAAY,OAAO,OAAO;AAAA,YACjC,iBAAiB,IAAI,kBAAkB,cAAc,OAAO,YAAY;AAAA,UAAA,CACzE;AAAA,QACH;AAAA,QACA;AAAA,MAAA;AAEF,YAAM,SAAShC,eAAa,SAAS,SAAS,4BAA4B;AAC1E,UAAI,MAAM,YAAY;AAAa,eAAA,EAAE,SAAS;AACvC,aAAA,MAAM,YAAY,KAAK,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAEA,SAAS+B,gBAAc,cAA+D;AAC7E,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,oBAAoB,UAAU,MAAM;AAAA,IACpF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,IAAA,CACX;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAC1C,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC;AAAA,MACA,UAAU,CAAC,aAAa,MAAM;AAAA,MAC9B,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcnC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UAAU,MAAM,iBAAiB,KAAK,OAAO,YAAY;AAAA,EAAA;AAElF;AAEA,eAAe,iBACb,KACA,OACA,cACkC;AAClC,QAAM,WAAWG;AAAAA,IACf,MAAM,YAAY,KAAKG,iBAAe,qBAAqB;AAAA,MACzD,WAAW,oBAAoB,OAAO,WAAW;AAAA,IAAA,CAClD;AAAA,IACD;AAAA,EAAA;AAEF,QAAM,aAAa,MAAM;AAAA,IACvB;AAAA,IACAA;AAAAA,IACAF,eAAa,SAAS,KAAK,uBAAuB;AAAA,IAClD,oBAAoB,OAAO,MAAM;AAAA,IACjC,aAAa;AAAA,EAAA;AAEf,QAAM,WAAW,OAAO,SAAS,oBAAoB,WACjD,SAAS,kBACT;AACA,MAAA,YAAY,WAAW,WAAW,UAAU;AAC1C,QAAA;AACF,YAAM,QAAQ,EAAE,OAAO,WAAW,IAAI;AAAA,IAAA,QAChC;AAAA,IAER;AACM,UAAA,IAAI,UAAU,0BAA0B,qCAAqC;AAAA,EACrF;AACO,SAAA;AAAA,IACL,GAAG;AAAA,IACH,WAAW,SAAS,aAAa,MAAM;AAAA,IACvC,gBAAgB,SAAS,UAAU;AAAA,IACnC,YAAY,SAAS,cAAc;AAAA,EAAA;AAEvC;AAEA,SAASgC,UAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AC3JA,MAAM9B,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAE/E,MAAM,aAAa,CAAC,SAAS,WAAW,QAAQ,SAAS,OAAO;AAOhD,SAAA,gBAAgB,eAAsC,IAAmB;AAChF,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR,gBAAgB;AAAA,MAChBqC,eAAa;AAAA,MACb,YAAY,YAAY;AAAA,MACxB,cAAc,YAAY;AAAA,IAC5B;AAAA,EAAA;AAEJ;AAEA,SAAS,kBAAqC;AACrC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,EAAE,MAAM,UAAU,YAAY,CAAC,GAAG,sBAAsB,MAAM;AAAA,IAC3E,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,OAAOrC,kBAAgB;AAAA,MAChE,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,sBAAsB;AAAA,IACjC,SAAS,OAAO,QAAQ;AACtB,YAAM,WAAWG;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,oBAAoB,CAAA,CAAE;AAAA,QAC5D;AAAA,MAAA;AAEF,UAAI,CAAC,MAAM,QAAQ,SAAS,QAAQ;AAAGE,0BAAgB,kBAAkB;AAClE,aAAA,EAAE,UAAU,SAAS;IAC9B;AAAA,EAAA;AAEJ;AAEA,SAAS6B,iBAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,KAAK;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,WAAW,UAAU;AAAA,MAC9B;AAAA,MACA,EAAE,MAAM,UAAU,aAAa,sBAAsB,MAAM,SAAS;AAAA,MACpE,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,aAAa,aAAa;AAAA,MACxB,WAAW,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,UAAU,EAAE;AAAA,MAC3D,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,IAAA,CACtC;AAAA,IACD,cAAcC,aAAW;AAAA,IACzB,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,iEAAiE;AAAA,IAC5E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,IAAI;AAC1C,YAAM,WAAWnC;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,qBAAqB,MAAM;AAAA,QACjE;AAAA,MAAA;AAEF,UAAI,CAAC,MAAM,QAAQ,SAAS,OAAO;AAAGE,0BAAgB,mBAAmB;AACzE,aAAO,EAAE,OAAO,SAAS,SAAS,aAAa,SAAS,cAAc;IACxE;AAAA,EAAA;AAEJ;AAEA,SAAS,YAAY,cAAwD;AACrE,QAAA,QAAQ,aAAa,SAAS;AAC7B,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,KAAK;AAAA,MACtB;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,SAAS,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,IACA,aAAa,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,KAAK,KAAK;AAAA,IAC9E,cAAcR;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,+DAA+D;AAAA,IAC1E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,KAAK;AACvC,UAAA,OAAO,SAAS,WAAW,GAAG;AAC1B,cAAA,IAAI,WAAW,oBAAoB,uCAAuC;AAAA,MAClF;AACI,UAAA;AACJ,aAAO,MAAM;AACX,cAAM,aAAa,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK;AACtD,YAAI,aAAa;AAAG,gBAAM,aAAa;AACvC,cAAM,WAAWG;AAAAA,UACf,MAAM,YAAY,KAAKG,iBAAe,oBAAoB;AAAA,YACxD,GAAG;AAAA,YACH;AAAA,YACA,MAAM,YAAY,OAAO,MAAM,KAAK;AAAA,YACpC,OAAO;AAAA,UAAA,CACR;AAAA,UACD;AAAA,QAAA;AAEF,YAAI,CAAC,MAAM,QAAQ,SAAS,OAAO;AAAGE,4BAAgB,kBAAkB;AAC7D,mBAAA,SAAS,SAAS,SAAS;AACpC,gBAAM,IAAI,GAAG,OAAO,GAClB,KAAK,UAAU;AAAA,YACb,gBAAgB;AAAA,YAChB,MAAM;AAAA,YACN;AAAA,UAAA,CACD,CACH;AAAA,CAAI;AAAA,QACN;AACS,iBAAAJ,eAAa,SAAS,YAAY,qBAAqB;AAC1D,cAAA;AAAA,UACJ,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAI,KAAK,KAAK,IAAK,CAAA,CAAC;AAAA,UACpE,IAAI;AAAA,QAAA;AAAA,MAER;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAc,cAAwD;AACtE,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,GAAG,cAAc,IAAI;AAAA,MACrB,EAAE,MAAM,QAAQ,aAAa,wBAAwB,MAAM,UAAU,UAAU,KAAK;AAAA,IACtF;AAAA,IACA,aAAa;AAAA,MACX,GAAG,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG;AAAA,MAC1D,UAAU,CAAC,MAAM;AAAA,IACnB;AAAA,IACA,cAAcJ;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,gBAAgB,OAAO,KAAK;AACvC,UAAA,OAAO,SAAS,WAAW,GAAG;AAC1B,cAAA,IAAI,WAAW,oBAAoB,0CAA0C;AAAA,MACrF;AACA,UAAI,CAAC,OAAO,SAAS,CAAC,OAAO,OAAO;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACA,YAAM,WAAWG;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,wBAAwB;AAAA,UAC5D,GAAG;AAAA,UACH,MAAM;AAAA,QAAA,CACP;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,aAAa,MAAM;AAAA,QACvB;AAAA,QACAA;AAAAA,QACAF,eAAa,SAAS,KAAK,gBAAgB;AAAA,QAC3C,oBAAoB,OAAO,MAAM;AAAA,QACjC,aAAa;AAAA,MAAA;AAER,aAAA;AAAA,IACT;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAc,QAAiB;AAC/B,SAAA;AAAA,IACL;AAAA,MACE,MAAM,SAAS,aAAa;AAAA,MAC5B,UAAU,SAAS,aAAa;AAAA,MAChC,aAAa,SACT,uDACA;AAAA,MACJ,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA,IACR;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa,cAAc,WAAW,KAAK,IAAI,CAAC;AAAA,MAChD,MAAM;AAAA,IACR;AAAA,IACA,EAAE,MAAM,WAAW,aAAa,mCAAmC,MAAM,SAAkB;AAAA,IAC3F,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAkB;AAAA,IACtF,EAAE,MAAM,SAAS,aAAa,gCAAgC,MAAM,SAAkB;AAAA,EAAA;AAE1F;AAEA,SAAS,aAAa,OAA+C;AAC5D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC,UAAU,CAAC;AAAA,MACX,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACxC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACtC,GAAG;AAAA,IACL;AAAA,IACA,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,gBACP,OACA,UACkD;AAClD,QAAM,WAAW,cAAc,MAAM,YAAY,MAAM,OAAO;AAC9D,MAAI,SAAS,WAAW;AAAS,UAAA,IAAI,WAAW,oBAAoB,qBAAqB;AACzF,QAAM,QAAQ,MAAM,UAAU,SAAY,SAAY,OAAO,MAAM,KAAK;AACpE,MAAA,UAAU,WAAc,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,MAAM;AAC/E,UAAA,IAAI,WAAW,oBAAoB,4CAA4C;AAAA,EACvF;AACA,SAAOgC,UAAQ;AAAA,IACb;AAAA,IACA,MAAM,YAAY,OAAO,MAAM;AAAA,IAC/B,OAAO,eAAe,YAAY,OAAO,OAAO,CAAC;AAAA,IACjD,SAAS,YAAY,OAAO,SAAS;AAAA,IACrC,OAAO,iBAAiB,OAAO,OAAO;AAAA,IACtC,OAAO,iBAAiB,OAAO,OAAO;AAAA,IACtC,WAAW,WAAW,YAAY,OAAO,WAAW,KAAK,YAAY;AAAA,IACrE,QAAQ,WAAW,YAAY,OAAO,QAAQ,IAAI;AAAA,IAClD,OAAO,WAAW,QAAQ;AAAA,EAAA,CAC3B;AACH;AAEA,SAAS,eAAe,OAA+C;AACrE,MAAI,CAAC;AAAc,WAAA;AACnB,QAAM,QAAQ,MAAM,kBAAkB,SAAS,YAAY,MAAM;AACjE,MAAI,CAAC,WAAW,SAAS,KAAK,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR;AAAA,MACA,wBAAwB,WAAW,KAAK,IAAI,CAAC;AAAA,IAAA;AAAA,EAEjD;AACO,SAAA;AACT;AAEA,SAAS,iBAAiB,OAAgC,KAAiC;AACnF,QAAA,QAAQ,YAAY,OAAO,GAAG;AACpC,MAAI,CAAC;AAAc,WAAA;AACnB,MAAI,CAAC,OAAO,SAAS,KAAK,MAAM,KAAK,CAAC,GAAG;AACvC,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,mBAAmB;AAAA,EACpE;AACO,SAAA;AACT;AAEA,SAASE,eAAyB;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,OAAO,CAAG,EAAA,GAAG,aAAa,GAAG;AAAA,IACnE,UAAU,CAAC,SAAS,aAAa;AAAA,IACjC,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAASF,UAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AAEA,SAAS5B,kBAAgB,OAAsB;AAC7C,QAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,aAAa;AACvE;AAEA,SAAS,eAA0B;AACjC,SAAO,IAAI,UAAU,WAAW,4BAA4B,cAAc,IAAI;AAChF;AAEA,SAAS,eAAe,cAAsB,QAAoC;AAChF,MAAI,OAAO;AAAS,WAAO,QAAQ,OAAO,IAAI,UAAU,YAAY,oBAAoB,CAAC;AACzF,SAAO,IAAI,QAAQ,CAACb,UAAS,WAAW;AACtC,UAAM,UAAU,MAAM;AACpB,mBAAa,KAAK;AAClB,aAAO,IAAI,UAAU,YAAY,oBAAoB,CAAC;AAAA,IAAA;AAElD,UAAA,QAAQ,WAAW,MAAM;AACtB,aAAA,oBAAoB,SAAS,OAAO;AACnC,MAAAA;OACP,YAAY;AACf,WAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,MAAM;AAAA,EAAA,CACzD;AACH;AC/TA,MAAM,eAAe;AACrB,MAAMW,kBAAgB;AACtB,MAAMN,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAExE,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC2B,cAAA,GAAeC,aAAA,GAAc,eAAe,iBAAiB,cAAc;AAAA,EAAA;AAE1F;AAEA,SAASD,gBAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,SAAS;AAAA,MAChE,EAAE,MAAM,QAAQ,aAAa,kBAAkB,MAAM,SAAS;AAAA,MAC9D,EAAE,MAAM,SAAS,aAAa,cAAc,MAAM,SAAS;AAAA,MAC3D,EAAE,MAAM,SAAS,aAAa,iCAAiC,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,SAAS,aAAa,kCAAkC,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,UAAU,aAAa,sBAAsB,MAAM,SAAS;AAAA,MACpE,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,MACxE;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACrC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,CAAC;AAAA,QACR,OAAO,CAAC;AAAA,QACR,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACrC,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc,WAAW;AAAA,IACzB,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,8CAA8C;AAAA,IACzD,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,QAAQ,eAAe,MAAM,KAAK;AACxC,YAAM,WAAWxB;AAAAA,QACf,MAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,YACN,iBAAiB,YAAY,OAAO,OAAO;AAAA,YAC3C,WAAW,YAAY,OAAO,MAAM;AAAA,YACpC,OAAO,MAAM,UAAU,SAAY,SAAY,eAAe,OAAO,MAAM,KAAK,CAAC;AAAA,YACjF,eAAe,eAAe,MAAM,OAAO,OAAO;AAAA,YAClD,gBAAgB,eAAe,MAAM,OAAO,OAAO;AAAA,YACnD,QAAQ,YAAY,OAAO,QAAQ;AAAA,YACnC;AAAA,YACA,kBAAkB,MAAM,qBAAqB;AAAA,UAAA,CAC9C;AAAA,QACH;AAAA,QACA;AAAA,MAAA;AAEF,YAAM,QAAQ,SAAS;AACnB,UAAA,CAAC,MAAM,QAAQ,KAAK;AAAGK,0BAAgB,kBAAkB;AAC7D,aAAO,EAAE,OAAO,aAAa,SAAS,eAAe,KAAK;AAAA,IAC5D;AAAA,EAAA;AAEJ;AAEA,SAASoB,eAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,iBAAiB,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAChD,gBAAgB,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MAChD;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc5B;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,qDAAqD;AAAA,IAChE,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,YAAM,CAAC,cAAc,gBAAgB,IAAI,MAAM,QAAQ,IAAI;AAAA,QACzD,YAAY,KAAK,cAAc,YAAY,EAAE,SAAS,QAAQ;AAAA,QAC9D;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,YACN,SAAS;AAAA,YACT,QAAQ,YAAY,OAAO,iBAAiB;AAAA,YAC5C,OAAO,eAAe,MAAM,cAAc;AAAA,UAAA,CAC3C;AAAA,QACH;AAAA,MAAA,CACD;AACK,YAAA,eAAeG,eAAa,cAAc,+BAA+B;AACzE,YAAA,mBAAmBA,eAAa,kBAAkB,mCAAmC;AAC3F,UAAI,CAAC,MAAM,QAAQ,iBAAiB,KAAK;AAAGK,0BAAgB,oBAAoB;AACzE,aAAA;AAAA,QACL,MAAML,eAAa,aAAa,QAAQ,cAAc,kBAAkB;AAAA,QACxE,UAAU;AAAA,UACR,OAAO,iBAAiB;AAAA,UACxB,aAAa,iBAAiB,eAAe;AAAA,QAC/C;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,aAAa,aAAa;AAAA,IAC1B,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oEAAoE;AAAA,IAC/E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AAC5C,aAAA,MAAM,YAAY,KAAK,QAAQ;AAAA,QACpC,mBAAmB;AAAA,QACnB,eAAe,OAAO,gBAAgB;AACpC,gBAAM,IAAI,GAAG,OAAO,GAClB,KAAK,UAAU;AAAA,YACb,gBAAgB;AAAA,YAChB,MAAM;AAAA,YACN,SAAS;AAAA,YACT,UAAU,YAAY,YAAY;AAAA,YAClC,OAAO,YAAY;AAAA,YACnB,SAAS,YAAY,WAAW;AAAA,YAChC,UAAU,YAAY,YAAY;AAAA,YAClC,SAAS,YAAY,WAAW;AAAA,UAAA,CACjC,CACH;AAAA,CAAI;AAAA,QACN;AAAA,MAAA,CACD;AAAA,IACH;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,MAAM;AAAA,IAChF,SAAS;AAAA,MACP,EAAE,MAAM,aAAa,aAAa,wCAAwC,MAAM,UAAU;AAAA,MAC1F;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,aAAa;AAAA,QACb,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,WAAW,EAAE,MAAM,UAAU;AAAA,QAC7B,mBAAmB,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MACnD;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oEAAoE;AAAA,IAC/E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,aAAO,MAAM;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,YAAY,IAAI,kBAAkB,OAAO,OAAO,aAAa,WAAW,KAAK,EAAE,CAAC;AAAA,UAChF,WAAW,MAAM,cAAc;AAAA,UAC/B,mBAAmB,MAAM;AAAA,QAAA,CAC1B;AAAA,MAAA;AAAA,IAEL;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,WAAW,aAAa,2BAA2B,UAAU,MAAM;AAAA,IACzF,SAAS,CAAC;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,aAAa;AAAA,MACb,MAAM;AAAA,IAAA,CACP;AAAA,IACD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,SAAS,EAAE,MAAM,UAAU;AAAA,MAC7B;AAAA,MACA,UAAU,CAAC,SAAS;AAAA,MACpB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,kFAAkF;AAAA,IAC7F,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,oBAAoB,OAAO,SAAS;AACnD,YAAM,cAAcG;AAAAA,QAClB,MAAM,YAAY,KAAK,cAAc,YAAY,EAAE,SAAS,QAAQ;AAAA,QACpE;AAAA,MAAA;AAEF,YAAM,UAAUA,eAAa,YAAY,QAAQ,aAAa,kBAAkB;AAChF,UAAI,QAAQ,UAAU,cAAc,QAAQ,YAAY,UAAU;AAC1D,cAAA,IAAI,WAAW,sBAAsB,4CAA4C;AAAA,MACzF;AACA,YAAM,WAAWA;AAAAA,QACf,MAAM,YAAY,KAAKG,iBAAe,cAAc;AAAA,UAClD,SAAS;AAAA,UACT,iBAAiB,IAAI,kBAAkB,SAAS,OAAO,YAAY;AAAA,QAAA,CACpE;AAAA,QACD;AAAA,MAAA;AAEF,YAAM,cAAcF,eAAa,SAAS,SAAS,oBAAoB;AACvE,UAAI,gBAAgB,UAAU,SAAS,aAAa,QAAQ;AAC1DI,0BAAgB,qBAAqB;AAAA,MACvC;AACA,UAAI,MAAM,YAAY;AAAa,eAAA;AAC5B,aAAA,MAAM,YAAY,KAAK,WAAW;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,eAA2B;AAC3B,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,IACxD,UAAU,CAAC,SAAS;AAAA,IACpB,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,aAAyB;AACzB,SAAA;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,MACV,OAAO,EAAE,MAAM,SAAS,OAAO,CAAA,EAAG;AAAA,MAClC,aAAa,CAAC;AAAA,IAChB;AAAA,IACA,UAAU,CAAC,SAAS,aAAa;AAAA,IACjC,sBAAsB;AAAA,EAAA;AAE1B;AAEA,SAAS,eAAe,OAAuB;AAC7C,QAAM,aAAa,MAAM,KAAK,EAAE,YAAY;AAC5C,QAAM,QAAQ,CAAC,YAAY,YAAY,WAAW,WAAW,UAAU,UAAU,EAC9E,KAAK,CAAC,cAAc,cAAc,UAAU;AAC/C,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,uBAAuB,KAAK,EAAE;AACnF,SAAO,MAAM,CAAC,EAAE,YAAgB,IAAA,MAAM,MAAM,CAAC;AAC/C;AAEA,SAAS,eAAe,OAAoC;AAC1D,MAAI,UAAU;AAAkB,WAAA;AAChC,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,OAAO,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK;AACtE,UAAA,IAAI,WAAW,oBAAoB,4CAA4C;AAAA,EACvF;AACA,SAAO,OAAO,KAAK;AACrB;AAEA,SAAS,QAAQ,OAAyD;AACxE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAG,EAAA,IAAI,MAAM,SAAS,MAAS,CAAC;AAC1F;AAEA,SAASA,kBAAgB,OAAsB;AAC7C,QAAM,IAAI,UAAU,4BAA4B,GAAG,KAAK,eAAe,aAAa;AACtF;AC1LA,MAAM,MAAM;AAQZ,MAAMR,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAE/E,MAAM,cAAgC;AAAA,EACpC,MAAM;AAAA,EACN,aACE;AAAA,EACF,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,MAAM,iBAAqC;AAAA,EACzC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aACE;AAAA,IACF,MAAM;AAAA,IACN,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,aAAa;AAAA,IACb,MAAM;AAAA,EACR;AACF;AAEA,MAAM,0BAAsD;AAAA,EAC1D,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACrC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACvC,YAAY,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EAC3C,kBAAkB,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,EACjD,WAAW,EAAE,MAAM,SAAS;AAAA,EAC5B,WAAW,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,EACzC,cAAc,EAAE,MAAM,UAAU;AAClC;AAEA,MAAM,kBAAkB,CAAC,QAAQ,UAAU,cAAc,kBAAkB;AAE3E,MAAM,cACJ;AAIc,SAAA,sBACd,eAA4C,IAC7B;AACf,QAAM,OAA6B;AAAA,IACjC,SAAS,aAAa,WAAW,IAAI;AAAA,IACrC,OAAO,aAAa,SAAS,IAAI;AAAA,IACjC,UAAU,aAAa,YAAY,IAAI;AAAA,EAAA;AAElC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,cAAc,IAAI,GAAG,aAAa,IAAI,GAAG,gBAAgB,IAAI,CAAC;AAAA,EAAA;AAE7E;AAIA,SAAS,cAAc,MAA+C;AAC7D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE,oSAGA;AAAA,IACF,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACrD,UAAU,CAAC,MAAM;AAAA,MACjB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM,CAAC,iBAAiB,eAAe,WAAW,cAAc,SAAS;AAAA,QAC3E;AAAA,QACA,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,SAAS,kBAAkB;AAAA,IAChD;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU,CAAC,8CAA8C;AAAA,IACzD,SAAS,OAAO,KAAK,UAAU;AAC7B,YAAM,OAAO,YAAY,KAAK,eAAe,OAAO,MAAM,CAAC;AACrD,YAAA,iBAAiB,MAAM,MAAM;AAC5B,aAAA,WAAW,MAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,IAC1D;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAa,MAA+C;AAC5D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE,+RAGA;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU;AAAA,QACzB,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO,EAAE,MAAM,SAAS;AAAA,MAC1B;AAAA,MACA,UAAU,CAAC,SAAS,QAAQ,OAAO;AAAA,IACrC;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,kBAAkB,KAAK,KAAK;AACtC,YAAA,iBAAiB,QAAQ,SAAS,MAAM;AACxC,YAAA,iBAAiB,UAAU,KAAK,QAAQ,QAAQ,kBAAkB,GAAG,MAAM;AACjF,YAAM,WAAW,MAAM,OAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AACvD,UAAI,CAAC,SAAS;AAAO,cAAM,cAAc,QAAQ;AACjD,aAAO,aAAa,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAgB,MAA+C;AAC/D,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SACE;AAAA,IACF,aACE,uqBAOA;AAAA,IACF,SAAS;AAAA,IACT,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,GAAG;AAAA,QACH,gBAAgB;AAAA,UACd,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAc;AAAA,MACZ,GAAGA;AAAAA,MACH,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,SAAS;AAAA,QACvB,OAAO,EAAE,MAAM,UAAU,MAAM,CAAC,YAAY,EAAE;AAAA,QAC9C,kBAAkB,EAAE,MAAM,UAAU;AAAA,MACtC;AAAA,MACA,UAAU,CAAC,QAAQ,SAAS,kBAAkB;AAAA,IAChD;AAAA,IACA,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,aAAa;AAAA,IAC7C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,kBAAkB,KAAK,KAAK;AAC5C,YAAM,kBAAkB,UAAU,KAAK,QAAQ,QAAQ,kBAAkB;AACnE,YAAA,iBAAiB,QAAQ,SAAS,MAAM;AACxC,YAAA,iBAAiB,QAAQ,SAAS,OAAO;AACzC,YAAA,iBAAiB,iBAAiB,MAAM;AACxC,YAAA,iBAAiB,iBAAiB,OAAO;AAC/C,YAAM,WAAW,MAAM,OAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AACvD,UAAI,CAAC,SAAS;AAAO,cAAM,cAAc,QAAQ;AACjD,YAAM,gBAAgB,MAAM,oBAAoB,KAAK,KAAK;AACpD,YAAA,kBAAkB,KAAK,QAAQ;AACrC,YAAM,SAAS,MAAM;AAAA,QAAO,MAC1B,KAAK,SAAS,EAAE,GAAG,SAAS,eAAe,SAAS,IAAI,SAAS;AAAA,MAAA;AAE5D,aAAA,WAAW,KAAK,OAAO,MAAM;AAAA,IACtC;AAAA,EAAA;AAEJ;AAMA,SAAS,kBACP,KACA,OAC+B;AACxB,SAAA;AAAA,IACL,SAAS,YAAY,KAAK,eAAe,OAAO,MAAM,CAAC;AAAA,IACvD,QAAQ,eAAe,OAAO,QAAQ;AAAA,IACtC,WAAW,eAAe,OAAO,YAAY;AAAA,IAC7C,oBAAoB,YAAY,KAAK,eAAe,OAAO,kBAAkB,CAAC;AAAA,IAC9E,UAAU,eAAe,OAAO,WAAW;AAAA,IAC3C,UAAU,OAAO,MAAM,cAAc,WAAW,MAAM,YAAY;AAAA,IAClE,aAAa,MAAM,iBAAiB;AAAA,EAAA;AAExC;AAEA,SAAS,eAAe,OAAgC,KAAqB;AACrE,QAAA,QAAQ,eAAe,OAAO,GAAG;AACvC,MAAI,CAAC;AAAO,UAAM,IAAI,WAAW,oBAAoB,GAAG,GAAG,cAAc;AAClE,SAAA;AACT;AAEA,SAAS,eAAe,OAAgC,KAAiC;AACjF,QAAA,QAAQ,MAAM,GAAG;AAChB,SAAA,OAAO,UAAU,YAAY,MAAM,KAAS,IAAA,MAAM,SAAS;AACpE;AAEA,SAAS,YAAY,KAAqB,OAAuB;AACzD,QAAA,OAAO,QAAU,EAAA;AACvB,SAAO,KAAK,WAAW,KAAK,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK;AACnF;AAEA,eAAe,iBAAiB,MAAcuC,YAA4C;AACpF,MAAA;AACF,UAAM,QAAQ,EAAE,aAAa,MAAMA,UAAS;AAAA,WACrC,OAAO;AACV,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,MAAM,OAAO;AAAA,QAChB;AAAA,QACA;AAAA,QACA,EAAE,MAAM,WAAAA,WAAU;AAAA,MAAA;AAAA,IAEtB;AACM,UAAA;AAAA,EACR;AACF;AAEA,eAAe,oBACb,KACA,OACiB;AACb,MAAA,OAAO,MAAM,mBAAmB;AAAU,WAAO,MAAM;AACvD,MAAA,IAAI,OAAO,gBAAgB;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,IAAI,GAAG,iBAAiB;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAMnD,QAAO;AACT,MAAA;AACA,MAAA;AACA,MAAA;AACS,eAAA,MAAMA,MAAK,WAAW,0BAA0B;AAC5C,mBAAA,MAAMA,MAAK,WAAW,kCAAkC;AAAA,WAChE,OAAO;AACV,QAAA,YAAY,OAAO,kBAAkB,GAAG;AAC1C,YAAM,IAAI,WAAW,4BAA4B,MAAM,OAAO;AAAA,IAChE;AACM,UAAA;AAAA,EACR;AACA,MAAI,aAAa,cAAc;AACvB,UAAA,IAAI,WAAW,qBAAqB,0CAA0C;AAAA,EACtF;AACO,SAAA;AACT;AAEA,eAAe,kBACb,KACA,UACe;AACf,MAAI,IAAI;AAAW;AACf,MAAA,IAAI,OAAO,gBAAgB;AAC7B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACI,MAAA,CAAC,IAAI,GAAG,iBAAiB;AAC3B,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACA,QAAM,IAAI,GAAG;AAAA,IACX;AAAA,MACE;AAAA,MACA,oBAAoB,SAAS,OAAO;AAAA,MACpC,oBAAoB,SAAS,OAAO;AAAA,MACpC,oBAAoB,SAAS,SAAS;AAAA,MACtC,oBAAoB,SAAS,SAAS;AAAA,MACtC,oBAAoB,KAAK;AAAA,MACzB,oBAAoB,SAAS,QAAQ;AAAA,MACrC,oBAAoB,SAAS,WAAW;AAAA,MACxC,oBAAoB,SAAS,eAAe,IAAI;AAAA,MAChD;AAAA,IAAA,EACA,KAAK,IAAI;AAAA,EAAA;AAEP,QAAA,UAAU,MAAM,IAAI,GAAG,OAAO,uCAAuC,IAAI,OAC5E;AACC,MAAA,WAAW,OAAO,WAAW,OAAO;AACtC,UAAM,IAAI,UAAU,yBAAyB,2BAA2B,eAAe;AAAA,EACzF;AACF;AAWA,SAAS,WAAW,OAAmC;AACrD,SAAO,iBAAiB,SAAS,MAAM,SAAS,qBAC9C,OAAQ,MAA6B,SAAS;AAClD;AAEA,eAAe,OAAU,KAAmC;AACtD,MAAA;AACF,WAAO,MAAM,IAAI;AAAA,WACV,OAAO;AACV,QAAA,WAAW,KAAK,GAAG;AACf,YAAA,WAAW,MAAM,SAAS,qBAC5B,aACA,MAAM,SAAS,6BACf,eACA;AACE,YAAA,IAAI,UAAU,MAAM,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,WAAW,CAAE,CAAA;AAAA,IACrF;AACM,UAAA;AAAA,EACR;AACF;AAEA,SAAS,cAAc,UAAgD;AAC/D,QAAA,CAAC,KAAK,IAAI,SAAS;AACnB,QAAA,SAAS,SAAS,SAAS,WAAW;AAC5C,SAAO,IAAI;AAAA,IACT,SAAS,MAAM,OAAO;AAAA,IACtB,SACI,MAAM,UACN,+BAA+B,SAAS,SAAS,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,IACrF;AAAA,IACA;AAAA,IACA,aAAa,QAAQ;AAAA,EAAA;AAEzB;AAMA,SAAS,WAAW,QAAmD;AAC9D,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,kBAAkB,OAAO;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,IACnB,aAAa,OAAO;AAAA,IACpB,iBAAiB,OAAO;AAAA,IACxB,OAAO,OAAO,MAAM,IAAI,CAAC,UAAU;AAAA,MACjC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,UAAU,KAAK;AAAA,MACf,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,IAAA,EACd;AAAA,IACF,UAAU,OAAO;AAAA,IACjB,UAAU,OAAO;AAAA,IACjB,MAAM,OAAO,OACT;AAAA,MACA,MAAM,OAAO,KAAK;AAAA,MAClB,OAAO,OAAO,KAAK;AAAA,MACnB,UAAU,OAAO,KAAK;AAAA,MACtB,YAAY,OAAO,KAAK;AAAA,MACxB,QAAQ,OAAO,KAAK;AAAA,MACpB,iBAAiB,OAAO,KAAK;AAAA,MAC7B,kBAAkB,OAAO,KAAK;AAAA,MAC9B,SAAS,OAAO,KAAK;AAAA,IAAA,IAErB;AAAA,EAAA;AAER;AAEA,SAAS,aAAa,UAA8D;AAC3E,SAAA;AAAA,IACL,OAAO,SAAS;AAAA,IAChB,MAAM,SAAS;AAAA,IACf,OAAO,SAAS;AAAA,IAChB,QAAQ,SAAS;AAAA,IACjB,YAAY,SAAS;AAAA,IACrB,WAAW,SAAS;AAAA,IACpB,UAAU,SAAS;AAAA,IACnB,YAAY,SAAS;AAAA,IACrB,aAAa,SAAS;AAAA,IACtB,iBAAiB,SAAS;AAAA,IAC1B,WAAW,SAAS;AAAA,IACpB,cAAc,SAAS;AAAA,IACvB,WAAW,SAAS;AAAA,IACpB,aAAa,SAAS;AAAA,IACtB,kBAAkB;AAAA,MAChB,MAAM,SAAS,eAAe;AAAA,MAC9B,kBAAkB,SAAS,eAAe;AAAA,MAC1C,QAAQ,SAAS,eAAe;AAAA,IAClC;AAAA,IACA,eAAe,SAAS;AAAA,IACxB,UAAU,SAAS;AAAA,IACnB,QAAQ,WAAW,SAAS,MAAM;AAAA,EAAA;AAEtC;AAEA,SAAS,WACP,KACA,OACA,QACyB;AACzB,QAAM,WAAW;AAAA,IACf,GAAG,OAAO,WAAW,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,OAAO,KAAK,EAAE;AAAA,IACpF,GAAI,OAAO,WAAW,KAAK,CAAC,UAAU,OAAO,MAAM,gCAAgC;AAAA,IACnF,uEAAuE,OAAO,OAAO;AAAA,IACrF,uBAAuB,OAAO,MAAM;AAAA,IACpC;AAAA,EAAA;AAEK,SAAA;AAAA,IACL,MAAM,OAAO;AAAA,IACb,OAAO,OAAO;AAAA,IACd,kBAAkB,OAAO;AAAA,IACzB,QAAQ,OAAO;AAAA,IACf,YAAY,OAAO;AAAA,IACnB,WAAW,OAAO;AAAA,IAClB,UAAU,OAAO;AAAA,IACjB,YAAY,OAAO;AAAA,IACnB,aAAa,OAAO;AAAA,IACpB,iBAAiB,OAAO;AAAA,IACxB,WAAW,OAAO;AAAA,IAClB,cAAc,OAAO;AAAA,IACrB,WAAW,OAAO;AAAA,IAClB,cAAc,OAAO;AAAA,IACrB,cAAc,OAAO;AAAA,IACrB,kBAAkB,OAAO;AAAA,IACzB,aAAa,OAAO;AAAA,IACpB,WAAW;AAAA,IACX,iBAAiB,OAAO;AAAA,IACxB,UAAU,OAAO;AAAA,IACjB,YAAY;AAAA,MACV;AAAA,MACA;AAAA,MACA,qCAAqC,OAAO,eAAe,IAAI;AAAA,IACjE;AAAA,IACA,OAAO;AAAA,MACL,QAAQ,IAAI,QAAQ;AAAA,MACpB,MAAM,IAAI,QAAQ;AAAA,MAClB,UAAU,IAAI;AAAA,MACd,cAAc;AAAA,MACd,mBAAmB,iBAAiB,KAAK;AAAA,IAC3C;AAAA,EAAA;AAEJ;AAEA,SAAS,iBAAiB,OAAwC;AAChE,QAAM,WAAoC,CAAA;AAC1C,aAAW,OAAO,OAAO,KAAK,uBAAuB,EAAE,QAAQ;AACzD,QAAA,MAAM,GAAG,MAAM;AAAoB,eAAA,GAAG,IAAI,MAAM,GAAG;AAAA,EACzD;AACA,QAAM,OAAO,QAAA,EAAU,WAAW,QAAQ;AACrC,OAAA,OAAO,IAAI,cAAc,OAAO,KAAK,UAAU,QAAQ,CAAC,CAAC;AAC9D,SAAO,KAAK;AACd;ACzqBA,MAAMY,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,cAAc,CAAC,OAAO,MAAM;AAClC,MAAM,iBAAiB;AACvB,MAAM,aAAa,CAAC,cAAc,eAAe,OAAO;AACxD,MAAM,0BAA0B,KAAK,OAAO;AAC5C,MAAM,WAAW;AAEjB,MAAM,eAAiC;AAAA,EACrC,MAAM;AAAA,EACN,UAAU;AAAA,EACV,aAAa;AAAA,EACb,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,MAAM,cAAgC;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AACR;AAEO,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS,CAAC,cAAc,WAAW;AAAA,QACnC,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,MAAM,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,UAC5C;AAAA,UACA,UAAU,CAAC,UAAU;AAAA,UACrB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,YAAY,KAAK;AACjC,gBAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,gBAAM,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAClD,iBAAO,EAAE,UAAU,SAAS,GAAI,OAAO,EAAE,SAAS,CAAA,GAAK,OAAO,OAAO,QAAQ,OAAO;AAAA,QACtF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,0BAA0B;AAAA,QAC1E,SAAS;AAAA,UACP;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YAC1C,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,SAAS,EAAE,MAAM,UAAU;AAAA,UAC7B;AAAA,UACA,UAAU,CAAC,aAAa,UAAU;AAAA,UAClC,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU,MAAM,cAAc,KAAK,KAAK;AAAA,MAC/D;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,QACzD,SAAS,CAAC,cAAc,WAAW;AAAA,QACnC,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACrC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,MAAM,EAAE,MAAM,UAAU,MAAM,YAAY;AAAA,UAC5C;AAAA,UACA,UAAU,CAAC,QAAQ,UAAU;AAAA,UAC7B,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,QAC9C,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,yEAAyE;AAAA,QACpF,SAAS,OAAO,KAAK,UAAU,MAAM,YAAY,KAAK,KAAK;AAAA,MAC7D;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,cACb,KACA,OACkC;AAC5B,QAAA,UAAU,YAAY,KAAK;AAC3B,QAAA,MAAM,oBAAoB,OAAO,WAAW;AAClD,QAAM,OAAO,QAAQ,EAAE,KAAK,WAAW,GAAG,IACtC,QAAQ,EAAE,KAAK,QAAQ,GAAG,IAC1B,QAAQ,EAAE,KAAK,QAAQ,IAAI,KAAK,GAAG;AACjC,QAAA,aAAa,MAAM,YAAY,IAAI;AACrC,MAAA,WAAW,IAAI,aAAa,gBAAgB;AAC9C,UAAM,IAAI;AAAA,MACR;AAAA,MACA,oBAAoB,WAAW,IAAI,QAAQ,kCAAkC,cAAc;AAAA,IAAA;AAAA,EAE/F;AACM,QAAA,UAAU,WAAW,YAAY,KAAK,CAAC,SAAS,KAAK,QAAQ,cAAc,GAC7E;AACE,QAAA,UAAU,MAAM,QAAQ,IAAI;AAClC,QAAM,QAAQ,MAAM;AAAA,IAClB;AAAA,IACA,QAAQ,OAAO,IAAI,QAAQ,IAAI;AAAA,IAC/B;AAAA,EAAA;AAEF,MAAI,UAAU,YAAY,KAAK,CAAC,OAAO,QAAQ,QAAQ;AAC/C,UAAA,IAAI,UAAU,mBAAmB,oCAAoC;AAAA,EAC7E;AACA,QAAM,QAAkE,CAAA;AACxE,QAAM,UAAoB,CAAA;AAC1B,aAAW,SAAS,MAAM,UAAU,OAAO,uBAAuB,GAAG;AAC/D,QAAA,CAAC,WAAW,SAAS,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG;AAC1C,cAAA,KAAK,MAAM,IAAI;AACvB;AAAA,IACF;AACM,UAAA,MAAM,IAAI,IAAI,EAAE,SAAS,OAAO,MAAM,KAAK,GAAG,YAAY,MAAM,WAAW;AAAA,EACnF;AACA,QAAM,SAAS,MAAM,YAAqB,KAAK,SAAS,kBAAkB;AAAA,IACxE,SAAS;AAAA,MACP,SAAS,WAAW,IAAI;AAAA,MACxB,SAAS,WAAW,IAAI;AAAA,MACxB,aAAa,WAAW;AAAA,MACxB;AAAA,IACF;AAAA,IACA,SAAS,MAAM,YAAY;AAAA,EAAA,CAC5B;AACM,SAAA;AAAA,IACL,UAAU;AAAA,IACV,WAAW,WAAW;AAAA,IACtB,aAAa,WAAW;AAAA,IACxB,GAAG,aAAa,QAAQ,gBAAgB;AAAA,IACxC,GAAI,QAAQ,SAAS,EAAE,eAAe,YAAY,CAAC;AAAA,EAAA;AAEvD;AAEA,eAAe,YACb,KACA,OACkC;AAC5B,QAAA,UAAU,YAAY,KAAK;AAC3B,QAAA,OAAO,oBAAoB,OAAO,MAAM;AAC9C,MAAI,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACzD,MAAI,CAAC,MAAM;AACT,UAAM,SAAS,MAAM,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,UAAU,MAAM,SAAS,IAAI,EACjF,IAAI,CAAC,UAAU,OAAO,MAAM,IAAI,CAAC;AAChC,QAAA,MAAM,WAAW,GAAG;AACtB,YAAM,IAAI,UAAU,sBAAsB,SAAS,OAAO,uBAAuB,IAAI,EAAE;AAAA,IACzF;AACI,QAAA,MAAM,SAAS,GAAG;AACpB,YAAM,IAAI,WAAW,mBAAmB,GAAG,IAAI,6CAA6C;AAAA,IAC9F;AACA,WAAO,MAAM,CAAC;AAAA,EAChB;AACI,MAAA,CAAC,IAAI,WAAW;AAClB,QAAI,IAAI,OAAO,kBAAkB,CAAC,IAAI,GAAG,iBAAiB;AACxD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,UAAU,MAAM,IAAI,GAAG,OAAO,UAAU,IAAI,UAAU,IAAI,SAAS,OAAO,UAAU,IACtF,KAAA,EAAO;AACP,QAAA,WAAW,OAAO,WAAW,OAAO;AACtC,YAAM,IAAI,UAAU,yBAAyB,6BAA6B,eAAe;AAAA,IAC3F;AAAA,EACF;AACM,QAAA,UAAU,MAAM,YAAqB,KAAK,SAAS,iBAAiB,EAAE,MAAM,KAAA,CAAM;AACxF,SAAO,EAAE,UAAU,SAAS,SAAS,aAAa,SAAS,eAAe;AAC5E;AAEA,eAAe,WACb,KACA,SACA,MACoC;AAC9B,QAAA,SAAS,MAAM,YAAqB,KAAK,SAAS,eAAe,OAAO,EAAE,SAAS,CAAA,CAAE;AACvF,MAAA,CAAC,MAAM,QAAQ,MAAM;AAAG,oBAAgB,aAAa;AACzD,SAAQ,OAAqB,IAAI,CAAC,UAAU,aAAa,OAAO,aAAa,CAAC;AAChF;AAEA,SAAS,YAAY,OAAwC;AACrD,QAAA,UAAU,oBAAoB,OAAO,UAAU;AACrD,MAAI,CAAC,SAAS,KAAK,OAAO,GAAG;AAC3B,UAAM,IAAI,WAAW,oBAAoB,qBAAqB,OAAO,EAAE;AAAA,EACzE;AACO,SAAA;AACT;AAEA,SAAS,aAAa,OAAgB,QAAyC;AAC7E,MAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK;AAAG,oBAAgB,MAAM;AAChF,SAAA;AACT;AAEA,SAAS,gBAAgB,QAAuB;AAC9C,QAAM,IAAI;AAAA,IACR;AAAA,IACA,0CAA0C,MAAM;AAAA,IAChD;AAAA,EAAA;AAEJ;AAEA,SAAS,OAAO,OAA2B;AACzC,MAAI,SAAS;AACb,WAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,OAAQ;AAC/C,cAAA,OAAO,aAAa,GAAG,MAAM,SAAS,OAAO,QAAQ,KAAM,CAAC;AAAA,EACxE;AACA,SAAO,KAAK,MAAM;AACpB;AC1PA,MAAM,gBAAgB;AACtB,MAAMA,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AACf;AACA,MAAM,cAA0B;AAAA,EAC9B,MAAM;AAAA,EACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,EACzD,UAAU,CAAC,UAAU;AAAA,EACrB,sBAAsB;AACxB;AACA,MAAM,iBAAiB,CAAC,gBAAgB,KAAK;AAGtC,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aAAa,EAAE,MAAM,UAAU,YAAY,CAAC,GAAG,sBAAsB,MAAM;AAAA,QAC3E,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,OAAOA,kBAAgB;AAAA,UAC9D,UAAU,CAAC,QAAQ;AAAA,UACnB,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,oBAAoB;AAAA,QAC/B,SAAS,OAAO,QAAQ;AACtB,gBAAM,WAAW,MAAM,UAAU,KAAK,cAAc,CAAE,CAAA;AACtD,cAAI,CAAC,MAAM,QAAQ,SAAS,MAAM,GAAG;AACnC,kBAAM,IAAI;AAAA,cACR;AAAA,cACA;AAAA,cACA;AAAA,YAAA;AAAA,UAEJ;AACO,iBAAA,EAAE,QAAQ,SAAS;QAC5B;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,gBAAgB;AAAA,QAC9B,aAAa;AAAA,QACb,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,uCAAuC;AAAA,QAClD,SAAS,OAAO,KAAK,UACnB,MAAM,UAAU,KAAK,aAAa,EAAE,UAAU,oBAAoB,OAAO,UAAU,GAAG;AAAA,MAC1F;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aAAa,CAAC,gBAAgB;AAAA,QAC9B,aAAa;AAAA,QACb,cAAcA;AAAAA,QACd,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,QACvC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU,CAAC,+CAA+C;AAAA,QAC1D,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,oBAAoB,OAAO,UAAU;AAC9C,iBAAA;AAAA,YACL,UAAU;AAAA,YACV,GAAG,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS;AAAA,UAAA;AAAA,QAEtE;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,QACT,aACE;AAAA,QACF,aAAa,CAAC,gBAAgB;AAAA,QAC9B,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,YACb,MAAM;AAAA,UACR;AAAA,UACA,EAAE,MAAM,OAAO,aAAa,4BAA4B,MAAM,SAAS;AAAA,QACzE;AAAA,QACA,aAAa;AAAA,UACX,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,YACzC,cAAc,EAAE,MAAM,SAAS;AAAA,YAC/B,KAAK,EAAE,MAAM,SAAS;AAAA,UACxB;AAAA,UACA,UAAU,CAAC,UAAU;AAAA,UACrB,sBAAsB;AAAA,QACxB;AAAA,QACA,cAAc;AAAA,UACZ,MAAM;AAAA,UACN,YAAY;AAAA,YACV,UAAU,EAAE,MAAM,SAAS;AAAA,YAC3B,QAAQA;AAAAA,YACR,SAASA;AAAAA,UACX;AAAA,UACA,UAAU,CAAC,YAAY,UAAU,SAAS;AAAA,UAC1C,sBAAsB;AAAA,QACxB;AAAA,QACA,qBAAqB;AAAA,QACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,QACxC,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS,OAAO,KAAK,UAAU;AACvB,gBAAA,UAAU,oBAAoB,OAAO,UAAU;AACrD,gBAAM,UAAU,OAAO;AAAA,YACrB,eAAe,OAAO,CAAC,UAAU,OAAO,MAAM,KAAK,MAAM,QAAQ,EAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,MAAM,KAAK,CAAC,CAAC;AAAA,UAAA;AAEzC,cAAI,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AAC/B,kBAAA,IAAI,WAAW,oBAAoB,8BAA8B;AAAA,UACzE;AACM,gBAAA,SAAS,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS;AACxE,gBAAA,QAAQ,MAAM,UAAU,KAAK,qBAAqB,EAAE,UAAU,SAAS,GAAG,QAAA,CAAS;AAClF,iBAAA;AAAA,YACL,UAAU;AAAA,YACV,QAAQG,eAAa,OAAO,SAAS,2BAA2B;AAAA,YAChE,SAASA,eAAa,MAAM,SAAS,2BAA2B;AAAA,UAAA;AAAA,QAEpE;AAAA,MACF;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,eAAe,UACb,KACA,QACA,QACkC;AAC9B,MAAA;AACK,WAAAA,eAAa,MAAM,YAAY,KAAK,eAAe,QAAQ,MAAM,GAAG,MAAM;AAAA,WAC1E,OAAO;AACd,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACjE,QAAA,QAAQ,SAAS,iBAAiB,GAAG;AACvC,YAAM,IAAI,UAAU,sBAAsB,iCAAiC,OAAO,QAAQ,EAAE;AAAA,IAC9F;AACM,UAAA;AAAA,EACR;AACF;AC1JA,MAAM,OAAO;AACb,MAAMH,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,cAA0B,EAAE,MAAM,UAAU,YAAY,IAAI,sBAAsB;AACxF,MAAM,SAAS,CAAC,UAAU,UAAU,SAAS;AAC7C,MAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,SAAS,iBAAgC;AACvC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACRwC,cAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aACE;AAAA,MAAA,CACH;AAAA,MACDA,cAAY;AAAA,QACV,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,aAAa;AAAA,MAAA,CACd;AAAA,MACD,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,MACP,EAAE,MAAM,OAAO,aAAa,wEAAwE,MAAM,SAAS;AAAA,IACrH;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,KAAK,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACpD,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcxC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,oBAAoB,oCAAoC;AAAA,IACnE,SAAS,OAAO,KAAK,UACnBG;AAAAA,MACE,MAAM,YAAY,KAAK,MAAM,eAAe,YAAY,OAAO,KAAK,IAAI,EAAE,QAAQ,YAAY,OAAO,KAAK,EAAE,IAAI,CAAA,CAAE;AAAA,MAClH;AAAA,IACF;AAAA,EAAA;AAEN;AAEA,SAASqC,cAAY,SAKC;AACb,SAAA;AAAA,IACL,MAAM,QAAQ;AAAA,IACd,SAAS,QAAQ;AAAA,IACjB,aAAa,QAAQ;AAAA,IACrB,aAAa;AAAA,IACb,cAAcxC;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,cAAc,QAAQ,IAAI,EAAE;AAAA,IACvC,SAAS,OAAO,QACdG,eAAa,MAAM,YAAY,KAAK,MAAM,QAAQ,QAAQ,CAAA,CAAE,GAAG,QAAQ,MAAM;AAAA,EAAA;AAEnF;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aACE;AAAA,IACF,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,MAAM,SAAS,aAAa,mCAAmC,MAAM,SAAS;AAAA,MAChF,EAAE,MAAM,SAAS,aAAa,mCAAmC,MAAM,SAAS;AAAA,MAChF;AAAA,QACE,MAAM;AAAA,QACN,aAAa,oBAAoB,OAAO,KAAK,IAAI,CAAC;AAAA,QAClD,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,MAAM;AAAA,QACN,MAAM,CAAC,QAAQ,KAAK;AAAA,MACtB;AAAA,MACA,EAAE,MAAM,UAAU,aAAa,2CAA2C,MAAM,UAAU;AAAA,MAC1F,EAAE,MAAM,SAAS,aAAa,mBAAmB,MAAM,UAAU;AAAA,MACjE,EAAE,MAAM,UAAU,aAAa,4BAA4B,MAAM,SAAS;AAAA,IAC5E;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,OAAO,EAAE,MAAM,UAAU,MAAM,OAAO;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,KAAK,EAAE;AAAA,QAChD,QAAQ,EAAE,MAAM,UAAU;AAAA,QAC1B,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACrC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,MACzC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,UAAU,cAAc,MAAM,QAAQ;AACtC,YAAA,UAAU,QAAQ,OAAO,CAAC,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC;AAC7D,UAAA,QAAQ,SAAS,GAAG;AACtB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,oBAAoB,QAAQ,KAAK,IAAI,CAAC,SAAS,OAAO,KAAK,IAAI,CAAC;AAAA,QAAA;AAAA,MAEpE;AACO,aAAAG;AAAAA,QACL,MAAM,YAAY,KAAK,MAAM,eAAe;AAAA,UAC1C,YAAY,UAAU,KAAK;AAAA,UAC3B,GAAI,QAAQ,SAAS,IAAI,EAAE,UAAU,QAAA,IAAY,CAAC;AAAA,UAClD,GAAI,MAAM,SAAS,EAAE,aAAa,MAAM,OAAA,IAAW,CAAC;AAAA,UACpD,aAAa,MAAM,WAAW,OAAO,uBAAuB;AAAA,UAC5D,GAAI,MAAM,UAAU,SAAY,EAAE,OAAO,MAAM,MAAM,IAAI,CAAC;AAAA,UAC1D,GAAI,YAAY,OAAO,QAAQ,IAAI,EAAE,QAAQ,YAAY,OAAO,QAAQ,EAAE,IAAI,CAAC;AAAA,QAAA,CAChF;AAAA,QACD;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEA,SAAS,UAAU,OAAyD;AAC1E,QAAM,QAAQ,eAAe,MAAM,OAAO,OAAO;AACjD,QAAM,QAAQ,eAAe,MAAM,OAAO,OAAO;AACjD,MAAI,UAAU,QAAW;AACvB,QAAI,UAAU;AAAiB,YAAA,IAAI,WAAW,oBAAoB,0BAA0B;AAC5F,WAAO,EAAE,MAAM,YAAY,OAAO,OAAO,KAAK;EAChD;AACI,MAAA,MAAM,UAAU,QAAW;AACvB,UAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,EACrF;AACO,SAAA,EAAE,MAAM,YAAY,eAAe,OAAO,aAAa,SAAS,KAAK,IAAA;AAC9E;ACrLA,MAAMH,kBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,SAAS;AACf,MAAM,eAAe;AAEd,SAAS,oBAAmC;AAC1C,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,MACR,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EAAA;AAEJ;AAMA,eAAe,SAAS,KAA2C;AACjE,QAAM,UAAU,IAAI;AACpB,MAAI,CAAC;AAAS,UAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AACzF,QAAM,SAAS,MAAM,QAAQ,YAAA,GAAe;AAC5C,QAAM,OAAO,cAAc,IAAI,WAAW,QAAQ;AAClD,MAAI,MAAM;AACJ,QAAA,OAAO,OAAO,QAAgB,SAAkC;AACpE,UAAM,WAAW,MAAM,MAAM,GAAG,IAAI,WAAW,MAAM,IAAI;AAAA,MACvD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,oBAAoB,eAAe,UAAU,KAAK,GAAG;AAAA,MAChF,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,QAAQ,IAAI;AAAA,IAAA,CACb;AACG,QAAA;AACA,QAAA;AACO,eAAA,MAAM,SAAS;IAAK,QACvB;AACN,YAAM,IAAI,UAAU,4BAA4B,8BAA8B,SAAS,MAAM,IAAI,aAAa;AAAA,IAChH;AACI,QAAA,OAAO,OAAO,MAAM;AAChB,YAAA,QAAQ,OAAO,SAAS;AAC9B,YAAM,SAAS,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,YAAgB,IAAA,OAAO,MAAM,QAAQ,UAAU;AACxG,YAAA,IAAI,UAAU,SAAS,MAAM,IAAI,OAAO,MAAM,WAAW,sBAAsB,CAAC;AAAA,IACxF;AACA,WAAOG,eAAa,OAAO,QAAQ,GAAG,MAAM,SAAS;AAAA,EAAA;AAEvD,QAAM,QAAQ,MAAM,KAAK,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,EAAA,CAAG;AACpE,QAAM,YAAY,OAAO,MAAM,WAAW,EAAE;AACxC,MAAA,CAAC,MAAM,QAAQ,MAAM,QAAQ,KAAK,CAAC,MAAM,SAAS,SAAS,OAAO,GAAG;AACjE,UAAA,IAAI,UAAU,qBAAqB,wDAAwD;AAAA,EACnG;AACO,SAAA;AAAA,IACL,MAAM,CAAC,QAAQ,MAAM,QAAQ,UAC3B,KAAK,QAAQ,EAAE,SAAS,WAAW,MAAM,EAAE,GAAG,MAAM,aAAa,MAAA,GAAS,GAAI,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAA,GAAK;AAAA,EAAA;AAElH;AAEA,SAAS,cAAc,UAA0B;AACzC,QAAA,MAAM,IAAI,IAAI,QAAQ;AAC5B,QAAM,SAAS,IAAI,SAAS,QAAQ,OAAO;AACvC,MAAA,WAAW,UAAU,IAAI,IAAI,SAAS,MAAM,GAAG,MAAM,KAAK,MAAM;AACpE,MAAI,SAAS;AACb,MAAI,OAAO;AACX,SAAO,IAAI,SAAW,EAAA,QAAQ,OAAO,EAAE;AACzC;AAGO,SAAS,aAAa,OAA2C;AACtE,MAAI,UAAU;AAAkB,WAAA;AAChC,QAAMO,QAAO,OAAO,KAAK,EAAE,KAAA,EAAO;AAC9B,MAAAA,UAAS,UAAUA,UAAS;AAAgB,WAAA;AAC1C,QAAA,OAAOA,MAAK,MAAM,UAAU;AAC9B,MAAA;AAAa,WAAA,KAAK,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,UAAU,GAAI;AACpE,QAAA,KAAK,eAAe,OAAO,SAAS;AAC1C,MAAI,OAAO;AAAkB,WAAA;AACzB,MAAA,MAAM,KAAK,IAAI;AAAS,UAAA,IAAI,WAAW,oBAAoB,+BAA+B;AACvF,SAAA,KAAK,MAAM,KAAK,GAAI;AAC7B;AAEA,SAAS,cAAc,MAAuC;AACxD,MAAA,KAAK,WAAW,SAAS;AAAU,WAAA,EAAE,KAAK;AACvC,SAAA,EAAE,MAAM,KAAK,WAAW,GAAG,IAAI,OAAO,IAAI,IAAI;AACvD;AAEA,SAAS,QAAQ,OAAyD;AACxE,QAAM,OAAO,CAAC,YAAY,QAAQ,SAAS,UAAU,UAAU,cAAc,OAAO,cAAc,kBAAkB,eAAe,YAAY,cAAc,OAAO;AAC7J,SAAA,OAAO,YAAY,KAAK,OAAO,CAAC,QAAQ,MAAM,GAAG,MAAM,MAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1G;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,QAAQ,aAAa,gFAAgF,UAAU,MAAM;AAAA,IAC3I,SAAS;AAAA,MACP,EAAE,MAAM,WAAW,aAAa,gBAAgB,YAAY,IAAI,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,YAAY,aAAa,0CAA0C,MAAM,SAAS;AAAA,MAC1F,EAAE,MAAM,SAAS,aAAa,2BAA2B,MAAM,SAAS;AAAA,MACxE,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,oCAAoC,MAAM,UAAU;AAAA,MACjH,EAAE,MAAM,QAAQ,aAAa,uCAAuC,MAAM,UAAU;AAAA,IACtF;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACrC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,aAAa,EAAE,MAAM,UAAU;AAAA,QAC/B,MAAM,EAAE,MAAM,UAAU;AAAA,MAC1B;AAAA,MACA,UAAU,CAAC,MAAM;AAAA,MACjB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcV;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU;AAAA,MACR;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,aAAa,MAAM,OAAO;AACpC,YAAA,WAAW,YAAY,OAAO,UAAU;AAC9C,YAAMkC,UAAkC;AAAA,QACtC,QAAQ,WAAW,aAAa;AAAA,QAChC,gBAAgB,MAAM,gBAAgB;AAAA,QACtC,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,QAC/B,GAAI,YAAY,SAAY,EAAE,YAAY,YAAY,CAAC;AAAA,MAAA;AAEzD,UAAI,KAAK,MAAM,KAAK,KAAK,gBAAgB;AAAA,QACvC,QAAQ,cAAc,oBAAoB,OAAO,MAAM,CAAC;AAAA,QACxD,QAAAA;AAAA,QACA,OAAO,YAAY,OAAO,OAAO;AAAA,QACjC,iBAAiB,IAAI,kBAAkB,OAAO,WAAW;AAAA,SACxD,IAAI;AACA,aAAA,MAAM,SAAS,SAAS,GAAG,UAAU,aAAa,GAAG,UAAU,cAAc;AAClF,cAAM,IAAI,QAAQ,CAACvC,aAAY,WAAWA,UAAS,GAAI,CAAC;AACxD,YAAI,OAAO;AACN,aAAA,MAAM,KAAK,KAAK,mBAAmB,EAAE,cAAc,GAAG,cAAc;AAAA,MAC3E;AACA,UAAI,GAAG,UAAU,YAAY,GAAG,UAAU,YAAY;AAC9C,cAAA,QAAS,GAAG,SAAS;AAC3B,cAAM,IAAI,UAAU,SAAS,OAAO,MAAM,UAAU,GAAG,KAAK,EAAE,YAAa,CAAA,IAAI,OAAO,MAAM,WAAW,SAAS,GAAG,KAAK,EAAE,CAAC;AAAA,MAC7H;AACO,aAAA;AAAA,QACL,cAAc,GAAG;AAAA,QACjB,OAAO,GAAG;AAAA,QACV,UAAU,GAAG,YAAY;AAAA,QACzB,KAAK,GAAG,OAAO;AAAA,QACf,gBAAgB,GAAG,kBAAkB;AAAA,QACrC,GAAI,GAAG,QAAQ,EAAE,OAAO,QAAQ,GAAG,KAAgC,EAAE,IAAI,CAAC;AAAA,MAAA;AAAA,IAE9E;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,QAAQ,aAAa,wBAAwB,MAAM,UAAU,MAAM,CAAC,QAAQ,cAAc,EAAE;AAAA,MACpG,EAAE,MAAM,UAAU,aAAa,iCAAiC,MAAM,SAAS;AAAA,MAC/E,EAAE,MAAM,KAAK,aAAa,yBAAyB,MAAM,SAAS;AAAA,MAClE,EAAE,MAAM,kBAAkB,UAAU,kBAAkB,aAAa,yBAAyB,MAAM,UAAU;AAAA,MAC5G,EAAE,MAAM,UAAU,aAAa,eAAe,MAAM,SAAS;AAAA,MAC7D,EAAE,MAAM,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC1E;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,cAAc,EAAE;AAAA,QACvD,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,GAAG,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QAClC,gBAAgB,EAAE,MAAM,UAAU;AAAA,QAClC,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACvC,OAAO,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MACvC;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcK;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,gDAAgD;AAAA,IAC3D,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AAC/B,YAAM,OAAO,MAAM,KAAK,KAAK,cAAc;AAAA,QACzC,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,QACd,GAAG,MAAM;AAAA,QACT,gBAAgB,MAAM,mBAAmB;AAAA,QACzC,QAAQ,MAAM;AAAA,QACd,OAAO,MAAM;AAAA,MAAA,CACd;AACK,YAAA,QAAQ,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAqC;AAC7E,aAAA,EAAE,OAAO,MAAM,IAAI,OAAO,GAAG,aAAa,KAAK,eAAe;IACvE;AAAA,EAAA;AAEJ;AAEA,SAAS,aAAgC;AAChC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACzD,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,uCAAuC;AAAA,IAClD,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACxB,aAAA,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,oBAAoB,OAAO,UAAU,EAAA,CAAG;AAAA,IAC1F;AAAA,EAAA;AAEJ;AAEA,SAAS,gBAAmC;AACnC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,SAAS;AAAA,MACP,EAAE,MAAM,WAAW,aAAa,eAAe,YAAY,IAAI,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,YAAY,aAAa,8BAA8B,MAAM,SAAS;AAAA,MAC9E,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,uBAAuB,MAAM,UAAU;AAAA,MACpG,EAAE,MAAM,SAAS,aAAa,aAAa,MAAM,SAAS;AAAA,MAC1D,EAAE,MAAM,YAAY,aAAa,8CAA8C,MAAM,UAAU;AAAA,IACjG;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,SAAS,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACxC,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,aAAa,EAAE,MAAM,UAAU;AAAA,QAC/B,OAAO,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACtC,UAAU,EAAE,MAAM,UAAU;AAAA,MAC9B;AAAA,MACA,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,IACxC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,2DAA2D,yDAAyD;AAAA,IAC/H,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAI,MAAM,aAAa,UAAa,MAAM,gBAAgB,MAAM;AACxD,cAAA,IAAI,WAAW,oBAAoB,wCAAwC;AAAA,MACnF;AACA,YAAM,UAAmC,CAAA;AACnC,YAAA,UAAU,aAAa,MAAM,OAAO;AAC1C,UAAI,YAAY;AAAW,gBAAQ,aAAa;AAChD,UAAI,MAAM,aAAa;AAAmB,gBAAA,WAAW,OAAO,MAAM,QAAQ;AAC1E,UAAI,MAAM,gBAAgB;AAAM,gBAAQ,WAAW;AACnD,UAAI,MAAM,UAAU;AAAmB,gBAAA,QAAQ,OAAO,MAAM,KAAK;AACjE,UAAI,MAAM,aAAa;AAAmB,gBAAA,iBAAiB,MAAM,aAAa;AAC9E,UAAI,CAAC,OAAO,KAAK,OAAO,EAAE;AAAc,cAAA,IAAI,WAAW,oBAAoB,mBAAmB;AACxF,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,oBAAoB,OAAO,UAAU;AAC/C,YAAA,UAAU,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,SAAS;AAClE,YAAM,SAAS,MAAM,KAAK,KAAK,gBAAgB,EAAE,UAAU,SAAS,UAAU,QAAQ,UAAU,WAAW,IAAI;AACxG,aAAA,EAAE,UAAU,OAAO,UAAU,OAAO,QAAQG,eAAa,OAAO,OAAO,oBAAoB,CAAC,EAAE;AAAA,IACvG;AAAA,EAAA;AAEJ;AAEA,SAAS,cAAiC;AACjC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa,CAAC,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,MAAM;AAAA,IAClF,SAAS,CAAC,EAAE,MAAM,UAAU,aAAa,iCAAiC,MAAM,UAAU;AAAA,IAC1F,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,WAAW,KAAK,QAAQ,EAAE,MAAM,UAAU,WAAW,IAAI;AAAA,MACnG,UAAU,CAAC,UAAU;AAAA,MACrB,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcH;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,cAAc;AAAA,IAC9C,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,mEAAmE;AAAA,IAC9E,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AACzB,YAAA,UAAU,oBAAoB,OAAO,UAAU;AAC/C,YAAA,UAAU,MAAM,KAAK,KAAK,aAAa,EAAE,UAAU,SAAS;AAClE,aAAO,MAAM,KAAK,KAAK,cAAc,EAAE,UAAU,SAAS,UAAU,QAAQ,UAAU,QAAQ,YAAY,OAAO,QAAQ,EAAA,GAAK,IAAI;AAAA,IACpI;AAAA,EAAA;AAEJ;AAEA,SAAS,eAAkC;AAClC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS;AAAA,MACP,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,4BAA4B,MAAM,SAAS;AAAA,MAClG,EAAE,MAAM,QAAQ,aAAa,mCAAmC,MAAM,UAAU;AAAA,MAChF,EAAE,MAAM,eAAe,aAAa,eAAe,MAAM,UAAU,MAAM,CAAC,OAAO,MAAM,EAAE;AAAA,IAC3F;AAAA,IACA,aAAa;AAAA,MACX,MAAM;AAAA,MACN,YAAY;AAAA,QACV,UAAU,EAAE,MAAM,UAAU,WAAW,EAAE;AAAA,QACzC,MAAM,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,QACpC,aAAa,EAAE,MAAM,UAAU,MAAM,CAAC,OAAO,MAAM,EAAE;AAAA,MACvD;AAAA,MACA,sBAAsB;AAAA,IACxB;AAAA,IACA,cAAcA;AAAAA,IACd,qBAAqB;AAAA,IACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,IACvC,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,UAAU,CAAC,gCAAgC,gFAAgF;AAAA,IAC3H,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,OAAO,MAAM,SAAS,GAAG;AAC/B,YAAM,KAAK,KAAK,MAAM,KAAK,QAAQ,GAAI,IAAI;AAC3C,YAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AACpD,aAAA,MAAM,KAAK,KAAK,eAAe;AAAA,QACpC,UAAU,YAAY,OAAO,UAAU;AAAA,QACvC,MAAM,KAAK,OAAO;AAAA,QAClB;AAAA,QACA,aAAa,MAAM,eAAe;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EAAA;AAEJ;AC7VA,MAAM,OAAO,EAAE,MAAM,UAAmB,WAAW,EAAE;AAGrD,MAAM,SAAS,EAAE,MAAM,UAAmB,sBAAsB,KAAK;AACrE,MAAM,mBAAmB;AAAA,EACvB,aAAa;AAAA,EAAM,YAAY,EAAE,MAAM,WAAoB,SAAS,EAAE;AAAA,EACtE,YAAY;AAAA,EAAM,UAAU;AAAA,EAAM,SAAS;AAC7C;AAEA,SAAS,KAAQ,KAAqB,QAAgB,QAA6C;AACjG,SAAO,IAAI,QAAQ,KAAK,iBAAiB,QAAQ,QAAQ;AAAA,IACvD,SAAS,IAAI;AAAA,IAAS,QAAQ,IAAI;AAAA,IAAQ,WAAW,KAAK,IAAI,IAAI,IAAI,YAAY,KAAK,IAAA,IAAQ,OAAS,KAAK,IAAA,CAAK;AAAA,EAAA,CACnH;AACH;AAEA,SAAS,WAAW,MAAc,QAAgB,YAAwC,UAAoB,QAAQ,OAA0B;AACvI,SAAA;AAAA,IACL;AAAA,IAAM,SAAS,YAAY,IAAI;AAAA,IAAI,aAAa,EAAE,GAAG,QAAQ,YAAY,UAAU,sBAAsB,MAAM;AAAA,IAC/G,cAAc;AAAA,IAAQ,qBAAqB;AAAA,IAAG,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ,UAAU,OAAO;AAAA,IACvG,WAAW;AAAA,IAAQ,iBAAiB;AAAA,IACpC,SAAS,OAAO,QAAQ,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,SAAS,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,OAAO;AAAA,MAC5G,MAAM,KAAK,WAAW,KAAK,GAAG;AAAA,MAAG,UAAU;AAAA,MAAM,aAAa;AAAA,MAAM,MAAM,OAAO,SAAS,YAAY,YAAqB;AAAA,MAC3H,UAAU,SAAS,SAAS,IAAI;AAAA,IAAA,EAChC;AAAA,IACF,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,QAAQ,KAAK;AAAA,EAAA;AAEpD;AAEO,SAAS,uBAAsC;AAC7C,SAAA;AAAA,IACL,MAAM;AAAA,IAAY,SAAS;AAAA,IAC3B,UAAU;AAAA,MACR,WAAW,UAAU,0BAA0B,EAAE,MAAM,MAAM,UAAU,QAAQ,QAAQ,QAAQ,eAAe,EAAE,MAAM,UAAY,EAAA,GAAG,CAAC,QAAQ,UAAU,GAAG,IAAI;AAAA,MAC/J,WAAW,QAAQ,wBAAwB,CAAA,GAAI,CAAA,CAAE;AAAA,MACjD,WAAW,SAAS,yBAAyB,EAAE,aAAa,MAAM,eAAe,EAAE,MAAM,UAAY,EAAA,GAAG,CAAC,aAAa,GAAG,IAAI;AAAA,MAC7H,WAAW,UAAU,0BAA0B,EAAE,aAAa,QAAQ,CAAC,aAAa,GAAG,IAAI;AAAA,MAC3F,WAAW,UAAU,0BAA0B,EAAE,aAAa,QAAQ,CAAC,aAAa,GAAG,IAAI;AAAA,MAC3F,WAAW,UAAU,wBAAwB,CAAA,GAAI,CAAA,CAAE;AAAA,MACnD,UAAU,QAAQ,EAAE,KAAK,MAAM,KAAK,MAAM,KAAK,QAAQ,sBAAsB,EAAE,MAAM,WAAW,SAAS,EAAE,EAAA,GAAK,CAAC,OAAO,KAAK,CAAC;AAAA,MAC9H,UAAU,QAAQ,EAAE,MAAM,KAAQ,GAAA,CAAC,MAAM,CAAC;AAAA,MAC1C,UAAU,SAAS,EAAE,MAAM,MAAM,SAAS,EAAE,MAAM,SAAS,GAAG,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,UAAU,YAAY,EAAE,KAAK,CAAC,QAAQ,SAAS,CAAC;AAAA,MACxJ,UAAU,QAAQ,EAAE,MAAM,MAAM,YAAY,MAAM,YAAY,EAAE,MAAM,WAAW,GAAG,CAAC,QAAQ,cAAc,YAAY,CAAC;AAAA,MACxH,UAAU,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,UAAU,UAAU,SAAS,KAAK,QAAQ,EAAE,MAAM,WAAW,SAAS,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,EAAI,EAAA,GAAG,CAAA,CAAE;AAAA,MAChL,UAAU,UAAU,CAAC,GAAG,EAAE;AAAA,IAC5B;AAAA,EAAA;AAEJ;AAEA,SAAS,UAAU,MAAc,OAAmC,UAAuC;AACnG,QAAA,WAAW,SAAS,WAAW,SAAS;AAC9C,QAAM,aAAyC,EAAE,GAAG,kBAAkB,GAAG,MAAM;AACxE,SAAA;AAAA,IACL;AAAA,IAAM,SAAS,GAAG,IAAI;AAAA,IACtB,aAAa,EAAE,GAAG,QAAQ,YAAY,UAAU,CAAC,GAAG,OAAO,KAAK,gBAAgB,GAAG,GAAG,QAAQ,GAAG,sBAAsB,MAAM;AAAA,IAC7H,cAAc;AAAA,IAAQ,qBAAqB;AAAA,IAC3C,QAAQ,EAAE,MAAM,SAAS,OAAO,CAAC,QAAQ,OAAO,EAAE,SAAS,IAAI,IAAI,SAAS,QAAQ;AAAA,IACpF,WAAW;AAAA,IAAQ,iBAAiB;AAAA,IACpC,SAAS,OAAO,QAAQ,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,MAAM,OAAO,SAAS,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,OAAO;AAAA,MAC5G,MAAM,KAAK,WAAW,KAAK,GAAG;AAAA,MAAG,UAAU;AAAA,MAAM,aAAa;AAAA,MAC9D,MAAM,OAAO,SAAS,YAAY,YAAqB;AAAA,MACvD,UAAU,OAAO,KAAK,gBAAgB,EAAE,SAAS,IAAI,KAAK,SAAS,SAAS,IAAI;AAAA,IAAA,EAChF;AAAA,IACF,SAAS,OAAO,KAAK,UAAU;AACvB,YAAA,SAAS,EAAE,aAAa,OAAO,MAAM,WAAW,GAAG,YAAY,OAAO,MAAM,UAAU,GAAG,YAAY,OAAO,MAAM,UAAU,GAAG,UAAU,OAAO,MAAM,QAAQ;AAC9J,YAAA,OAAO,OAAO,MAAM,OAAO;AACjC,YAAMZ,QAAO;AACT,UAAA;AACA,UAAA;AAAU,kBAAU,KAAK,MAAM,MAAMA,MAAK,aAAa,IAAI,CAAC;AAAA,WAC3D;AACH,kBAAU,EAAE,GAAG,QAAQ,OAAO,OAAO,WAAW,GAAG,QAAQ,IAAI,SAAS,SAAS,IAAI,kBAAkB,OAAO;AAC9G,cAAMA,MAAK,cAAc,MAAM,KAAK,UAAU,OAAO,IAAI,MAAM,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AAAA,MACjG;AACA,UAAI,CAAC,IAAI;AAAe,cAAA,IAAI,UAAU,iBAAiB,0CAA0C;AACjG,YAAM,EAAE,MAAM,IAAI,MAAM,IAAI,QAAQ,YAAY;AAChD,YAAM,QAAQ,MAAM,KAAoB,KAAK,wBAAwB,EAAE,aAAa,OAAO,aAAa,YAAY,OAAO,YAAY,YAAY,OAAO,YAAY;AAChK,YAAA,SAAS,MAAM,sBAAsB,QAAQ,OAAO,QAAQ,OAAO,eAAe,QAAQ,MAAM;AACtG,UAAI,CAAC;AAAc,cAAA,IAAI,UAAU,4BAA4B,oCAAoC;AAC3F,YAAA,QAAQ,MAAM,OAAO;AAC3B,UAAI,OAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,MAAM;AACtD,UAAA;AACE,YAAA;AACJ,YAAI,SAAS;AAAgB,kBAAA,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,GAAG,GAAG,OAAO,MAAM,GAAG,GAAI,MAAM,OAAO,CAAC,GAA8B,OAAO,MAAM,wBAAwB,GAAK,CAAC;AAAA,iBAC7K,SAAS;AAAQ,kBAAQ,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,IAAI,CAAC;AAAA,iBACtE,SAAS;AAAS,kBAAQ,MAAM,OAAO,MAAM,SAAS,OAAO,MAAM,IAAI,GAAG,IAAI,YAAc,EAAA,OAAO,OAAO,MAAM,OAAO,CAAC,GAAI,MAAM,QAAQ,SAAiD;AAAA,iBAC3L,SAAS;AAAgB,kBAAA,MAAM,OAAO,KAAK,SAAS,OAAO,MAAM,IAAI,GAAG,CAAC,EAAE,YAAY,OAAO,MAAM,UAAU,GAAG,YAAY,OAAO,MAAM,UAAU,EAAG,CAAA,CAAC;AAAA,iBACxJ,SAAS;AAAkB,kBAAA,MAAM,OAAO,OAAO,OAAO;AAAA;AAC1D,kBAAQ,MAAM,OAAO,MAAM,SAAS,MAAM,SAAwD,OAAO,MAAM,UAAU,CAAC,GAAG,OAAO,MAAM,WAAW,CAAC,CAAC;AACrJ,eAAA,EAAE,SAAS;MAAM,UACxB;AAAc,YAAA,OAAO,oBAAoB,SAAS,KAAK;AAAG,eAAO,MAAM;AAAA,MAAE;AAAA,IAC7E;AAAA,EAAA;AAEJ;ACxFA,MAAM,UAAU;AAChB,MAAM,gBAA4B,EAAE,MAAM,UAAU,sBAAsB,KAAK;AAC/E,MAAM,mBAAqC,EAAE,MAAM,aAAa,UAAU,gBAAgB,aAAa,uBAAuB,MAAM,UAAU,UAAU,KAAK;AAC7J,MAAM,aAA+B,EAAE,MAAM,OAAO,UAAU,UAAU,aAAa,kBAAkB,MAAM,UAAU,UAAU,KAAK;AACtI,MAAM,iBAAmC,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,2CAA2C,MAAM,WAAW,UAAU,KAAK;AAEzK,SAAS,eAAe,OAAmC,WAAqB,IAAgB;AACvF,SAAA,EAAE,MAAM,UAAU,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,WAAW,KAAK,GAAG,MAAA,GAAS,UAAU,CAAC,gBAAgB,GAAG,QAAQ,GAAG,sBAAsB;AACpK;AAEA,eAAe,KAAK,KAAqB,QAAgB,QAAmE;AACpH,QAAA,SAASe,eAAa,MAAM,YAAqB,KAAK,SAAS,QAAQ,MAAM,GAAG,MAAM;AACxF,MAAA,OAAO,OAAO,OAAO;AACvB,UAAM,QAAQA,eAAa,OAAO,OAAO,GAAG,MAAM,QAAQ;AAC1D,UAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO;AAC3D,UAAM,SAAS,OAAO,MAAM,WAAW,WAAW,MAAM,SAAS;AACjE,UAAM,IAAI,UAAU,MAAM,GAAG,IAAI,GAAG,OAAO,MAAM,aAAa,WAAW,IAAI,MAAM,QAAQ,KAAK,EAAE,KAAK,MAAM,EAAE;AAAA,EACjH;AACO,SAAA;AACT;AAEA,eAAe,UAAU,OAAgC,SAAiB,SAAiB,OAAiC;AACpH,QAAAO,QAAO,YAAY,OAAO,OAAO;AACjC,QAAA,OAAO,YAAY,OAAO,OAAO;AACvC,MAAIA,SAAQ;AAAM,UAAM,IAAI,WAAW,cAAc,GAAG,OAAO,QAAQ,OAAO,gBAAgB;AAC1F,MAAA;AAAM,WAAO,KAAK,MAAM,MAAM,QAAU,EAAA,aAAa,IAAI,CAAC;AAC1D,MAAAA;AAAa,WAAA,KAAK,MAAMA,KAAI;AAChC,QAAM,IAAI,WAAW,cAAc,GAAG,KAAK,YAAY,QAAQ,QAAQ,MAAM,GAAG,CAAC,SAAS,QAAQ,QAAQ,MAAM,GAAG,CAAC,EAAE;AACxH;AAEA,MAAM,cAAiC;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,MAAqC;AAAA,EAC5G,SAAS,CAAC,kBAAkB,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,gEAAgE,MAAM,SAAA,CAAU;AAAA,EACnK,aAAa,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,UAAU,EAAE,MAAM,SAAA,EAAc,GAAA,CAAC,WAAW,CAAC;AAAA,EACxH,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,6CAA6C;AAAA,EACxD,SAAS,CAAC,KAAK,UAAU;AACjB,UAAA,WAAW,YAAY,OAAO,UAAU;AACvC,WAAA,KAAK,KAAK,YAAY,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,WAAW,oBAAoB,OAAO,WAAW,GAAG,GAAI,WAAW,EAAE,UAAU,KAAK,MAAM,QAAQ,EAAE,IAAI,CAAC,EAAA,CAAI;AAAA,EACxM;AACF;AAEA,MAAM,eAAkC;AAAA,EACtC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IACA,EAAE,MAAM,UAAU,UAAU,aAAa,aAAa,mBAAmB,MAAM,SAAS;AAAA,IACxF,EAAE,MAAM,QAAQ,UAAU,WAAW,aAAa,yBAAyB,MAAM,SAAS;AAAA,IAC1F,EAAE,MAAM,UAAU,UAAU,UAAU,aAAa,mCAAmC,MAAM,SAAS;AAAA,IACrG,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,0BAA0B,MAAM,UAAU;AAAA,IAC3F,EAAE,MAAM,UAAU,UAAU,UAAU,aAAa,iCAAiC,MAAM,SAAS;AAAA,EACrG;AAAA,EACA,aAAa,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY,QAAQ,EAAE,MAAM,SAAS,GAAG,OAAO,EAAE,MAAM,UAAa,GAAA,QAAQ,EAAE,MAAM,SAAS,EAAA,CAAG;AAAA,EAC9K,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,mEAAmE;AAAA,EAC9E,SAAS,CAAC,KAAK,UAAU;AACvB,UAAM,SAAkC,EAAE,cAAc,oBAAoB,OAAO,cAAc;AACjG,eAAW,OAAO,CAAC,aAAa,WAAW,QAAQ,GAAG;AAAQ,YAAA,QAAQ,YAAY,OAAO,GAAG;AAAO,UAAA;AAAO,eAAO,GAAG,IAAI;AAAA,IAAM;AACxH,UAAA,SAAS,YAAY,OAAO,QAAQ;AACtC,QAAA;AAAe,aAAA,SAAS,KAAK,MAAM,MAAM;AACzC,QAAA,OAAO,MAAM,UAAU;AAAU,aAAO,QAAQ,MAAM;AAC1D,QAAI,CAAC,OAAO,aAAa,CAAC,OAAO;AAAe,YAAA,IAAI,WAAW,cAAc,yBAAyB;AAC/F,WAAA,KAAK,KAAK,aAAa,MAAM;AAAA,EACtC;AACF;AAEA,MAAM,cAAiC;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,gBAAgB;AAAA,EAC1B,aAAa,eAAe,EAAE;AAAA,EAC9B,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,sCAAsC;AAAA,EACjD,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,eAAe,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG;AAChH;AAEA,MAAM,gBAAmC;AAAA,EACvC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,UAAU;AAAA,EACtC,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC;AAAA,EACpF,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,uDAAuD;AAAA,EAClE,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,YAAY,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG;AAC3J;AAEA,MAAM,kBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,EAAE,MAAM,eAAe,UAAU,eAAe,aAAa,sDAAsD,MAAM,UAAU,UAAU,MAAM,QAAQ,MAAM;AAAA,EACzM,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,aAAa,EAAE,MAAM,UAAU,WAAW,OAAO,CAAC,UAAU,aAAa,CAAC;AAAA,EAClJ,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,4EAA4E;AAAA,EACvF,SAAS,CAAC,KAAK,UAAU,KAAK,KAAK,cAAc;AAAA,IAC/C,cAAc,oBAAoB,OAAO,cAAc;AAAA,IAAG,QAAQ,oBAAoB,OAAO,QAAQ;AAAA,IAAG,aAAa,oBAAoB,OAAO,aAAa;AAAA,IAC7J,UAAU,EAAE,MAAM,SAAS,WAAW,IAAI,UAAU,GAAG;AAAA,EAAA,CACxD;AACH;AAEA,MAAM,sBAAyC;AAAA,EAC7C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,iDAAiD,MAAM,UAAU;AAAA,EAC1K,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,KAAK,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,OAAO,EAAE,MAAM,SAAS,KAAK,CAAC,UAAU,SAAS,CAAC;AAAA,EACpK,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,kGAAkG;AAAA,EAC7G,SAAS,CAAC,KAAK,UAAU;AACjB,UAAA,QAAQ,YAAY,OAAO,OAAO;AACjC,WAAA,KAAK,KAAK,kBAAkB,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,GAAI,QAAQ,EAAE,UAAU,EAAE,MAAA,MAAY,CAAA,EAAK,CAAA;AAAA,EAClN;AACF;AAEA,MAAM,kBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,OAAO,UAAU,OAAO,aAAa,qCAAqC,MAAM,UAAU,UAAU,MAAM;AAAA,EAC1K,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,KAAK,EAAE,MAAM,UAAU,WAAW,EAAE,EAAK,GAAA,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EACvL,cAAc,EAAE,MAAM,UAAU,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,OAAO,EAAE,MAAM,SAAS,OAAO,EAAE,MAAM,SAAS,IAAI,GAAG,UAAU,CAAC,OAAO,OAAO,GAAG,sBAAsB,KAAK;AAAA,EACrL,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,OAAO;AAAA,EACvC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,gFAAgF;AAAA,EAC3F,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,SAAS,MAAM,KAAK,KAAK,cAAc,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS;AACzK,UAAA,MAAM,oBAAoB,OAAO,KAAK;AAC5C,UAAMtB,QAAO;AACb,UAAM,UAAoB,CAAA;AACf,eAAA,CAAC,MAAM,IAAI,KAAK,OAAO,QAAQe,eAAa,OAAO,OAAO,kBAAkB,CAAC,GAAG;AACnF,YAAA,IAAIA,eAAa,MAAM,IAAI;AACjC,UAAI,OAAO,EAAE,SAAS,YAAY,OAAO,EAAE,WAAW;AAAU;AAChE,YAAM,SAAS,GAAG,GAAG,IAAI,IAAI;AAC7B,YAAMf,MAAK,MAAM,OAAO,MAAM,GAAG,OAAO,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,KAAM,CAAA;AAC1E,UAAA,OAAO,EAAE,SAAS;AAAU,cAAMA,MAAK,cAAc,QAAQ,EAAE,IAAI;AAAA;AAClE,cAAMA,MAAK,UAAU,QAAQ,WAAW,KAAK,KAAK,EAAE,MAAgB,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AACnG,cAAQ,KAAK,IAAI;AAAA,IACnB;AACM,UAAAA,MAAK,MAAM,GAAG,GAAG,WAAW,EAAE,WAAW,MAAM;AAC/C,UAAAA,MAAK,MAAM,GAAG,GAAG,YAAY,EAAE,WAAW,MAAM;AAC/C,WAAA,EAAE,KAAK,OAAO;EACvB;AACF;AAEA,MAAM,iBAAoC;AAAA,EACxC,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS,CAAC,kBAAkB,YAAY,gBAAgB,EAAE,MAAM,QAAQ,UAAU,QAAQ,aAAa,wEAAwE,MAAM,UAAU,UAAU,QAAQ,EAAE,MAAM,QAAQ,UAAU,QAAQ,aAAa,kBAAkB,MAAM,YAAY,EAAE,MAAM,aAAa,UAAU,aAAa,aAAa,6CAA6C,MAAM,UAAU;AAAA,EAC1Z,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,KAAK,MAAM,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,MAAM,EAAE,MAAM,SAAY,GAAA,WAAW,EAAE,MAAM,WAAW,GAAG,CAAC,UAAU,WAAW,MAAM,CAAC;AAAA,EAClP,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,kHAAoH,8GAAgH;AAAA,EAC/O,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,OAAO,YAAY,OAAO,MAAM,KAAK,YAAY,OAAO,WAAW,IAAI,MAAM,UAAU,OAAO,QAAQ,aAAa,WAAW,IAAI;AACjI,WAAA,KAAK,KAAK,aAAa,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,MAAM,oBAAoB,OAAO,MAAM,GAAG,KAAA,CAAM;AAAA,EAClN;AACF;AAEA,MAAM,oBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,IACP;AAAA,IAAkB;AAAA,IAAY;AAAA,IAC9B,EAAE,MAAM,OAAO,UAAU,OAAO,aAAa,uEAAuE,MAAM,UAAU,UAAU,KAAK;AAAA,IACnJ,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,iEAAiE,MAAM,SAAS;AAAA,EACzI;AAAA,EACA,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAA,GAAK,SAAS,EAAE,MAAM,WAAW,SAAS,EAAE,GAAG,KAAK,EAAE,MAAM,UAAU,WAAW,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC,UAAU,WAAW,KAAK,CAAC;AAAA,EACrN,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU,CAAC,0GAA0G;AAAA,EACrH,SAAS,OAAO,KAAK,UAAU;AACvB,UAAA,MAAM,oBAAoB,OAAO,KAAK;AAC5C,UAAMA,QAAO;AACb,UAAM,SAAS,MAAMA,MAAK,aAAa,GAAG,GAAG,kBAAkB;AAC/D,QAAI,UAAmB;AACnB,QAAA;AAAY,gBAAA,KAAK,MAAM,MAAMA,MAAK,aAAa,GAAG,GAAG,4BAA4B,CAAC;AAAA,IAAA,QAAU;AAAY,gBAAA;AAAA,IAAK;AAC3G,UAAA,UAAU,YAAY,OAAO,UAAU;AACvC,UAAA,MAAM,UAAU,MAAMA,MAAK,aAAa,OAAO,EAAE,MAAM,MAAM,EAAE,IAAI;AACzE,UAAM,QAAiC,CAAA;AACjC,UAAA,OAAO,OAAO,QAAgB;AAClC,iBAAW,SAAS,MAAMA,MAAK,QAAQ,GAAG,GAAG,UAAU,MAAM,IAAI,GAAG,KAAK,EAAE,EAAE,GAAG;AACxE,cAAA,OAAO,MAAM,GAAG,GAAG,IAAI,MAAM,IAAI,KAAK,MAAM;AAClD,YAAI,SAAS,WAAW,KAAK,WAAW,QAAQ;AAAG;AACnD,YAAI,MAAM;AAAa,gBAAM,KAAK,IAAI;AAAA,aACjC;AACG,gBAAA,QAAQ,MAAMA,MAAK,SAAS,GAAG,GAAG,WAAW,IAAI,EAAE;AACzD,cAAIsB,QAAsB;AACtB,cAAA;AAAE,YAAAA,QAAO,MAAM,SAAS,CAAC,IAAI,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAA,CAAM,EAAE,OAAO,KAAK;AAAA,UAAA,QAAU;AAAS,YAAAA,QAAA;AAAA,UAAK;AAChH,gBAAA,UAAU,IAAI,EAAE,IAAIA,SAAQ,EAAE,QAAQ,KAAK,MAAM,KAAK,OAAO,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5G;AAAA,MACF;AAAA,IAAA;AAEF,UAAM,KAAK,EAAE;AACN,WAAA,KAAK,KAAK,gBAAgB,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,SAAS,QAAQ,SAAS,KAAK,MAAA,CAAO;AAAA,EAClM;AACF;AAEA,MAAM,mBAAsC;AAAA,EAC1C,MAAM;AAAA,EACN,SAAS;AAAA,EACT,aAAa;AAAA,EACb,SAAS;AAAA,IACP;AAAA,IAAkB;AAAA,IAAY;AAAA,IAC9B,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,qEAAqE,MAAM,UAAU;AAAA,IAC5I,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,iFAAiF,MAAM,SAAS;AAAA,IACrJ,EAAE,MAAM,gBAAgB,UAAU,gBAAgB,aAAa,iDAAiD,MAAM,SAAS;AAAA,IAC/H,EAAE,MAAM,YAAY,UAAU,YAAY,aAAa,kDAAkD,MAAM,SAAS;AAAA,IACxH,EAAE,MAAM,iBAAiB,UAAU,iBAAiB,aAAa,4CAA4C,MAAM,SAAS;AAAA,IAC5H,EAAE,MAAM,WAAW,UAAU,WAAW,aAAa,kCAAkC,MAAM,SAAS;AAAA,IACtG,EAAE,MAAM,WAAW,UAAU,YAAY,aAAa,uCAAuC,MAAM,SAAS;AAAA,IAC5G,EAAE,MAAM,SAAS,UAAU,SAAS,aAAa,wCAAwC,MAAM,SAAS;AAAA,EAC1G;AAAA,EACA,aAAa,eAAe,EAAE,QAAQ,EAAE,MAAM,UAAU,WAAW,EAAE,GAAG,SAAS,EAAE,MAAM,WAAW,SAAS,EAAK,GAAA,UAAU,EAAE,MAAM,UAAU,GAAG,SAAS,EAAE,MAAM,SAAY,GAAA,cAAc,EAAE,MAAM,SAAS,GAAG,UAAU,EAAE,MAAM,SAAA,GAAY,eAAe,EAAE,MAAM,SAAS,GAAG,SAAS,EAAE,MAAM,YAAY,UAAU,EAAE,MAAM,SAAS,GAAG,OAAO,EAAE,MAAM,WAAW,GAAG,CAAC,UAAU,SAAS,CAAC;AAAA,EAC9X,cAAc;AAAA,EACd,qBAAqB;AAAA,EACrB,QAAQ,EAAE,MAAM,SAAS,OAAO,QAAQ;AAAA,EACxC,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,SAAS,OAAO,KAAK,UAAU;AAC7B,UAAM,SAAkC,EAAE,cAAc,oBAAoB,OAAO,cAAc,GAAG,QAAQ,oBAAoB,OAAO,QAAQ,GAAG,SAAS,MAAM,QAAQ;AACnK,UAAA,QAAQ,YAAY,OAAO,OAAO;AACxC,QAAI,OAAO;AACT,aAAO,QAAQ,EAAE,MAAM,mBAAmB,QAAQ;IAAM,WAC/C,MAAM,aAAa,MAAM;AAClC,aAAO,WAAW;AAAA,IAAA,WACT,YAAY,OAAO,UAAU,KAAK,YAAY,OAAO,eAAe,GAAG;AAChF,aAAO,WAAW,MAAM,UAAU,OAAO,YAAY,iBAAiB,aAAa;AAAA,IAAA,OAC9E;AACL,aAAO,UAAU,MAAM,UAAU,OAAO,WAAW,gBAAgB,SAAS;AAC5E,aAAO,WAAW;IACpB;AACM,UAAAnB,WAAU,YAAY,OAAO,SAAS;AACxC,QAAAA;AAAS,aAAO,UAAUA;AACxB,UAAA,UAAU,YAAY,OAAO,UAAU;AACzC,QAAA;AAAgB,aAAA,WAAW,CAAC,OAAO;AAChC,WAAA,KAAK,KAAK,eAAe,MAAM;AAAA,EACxC;AACF;AAEO,SAAS,mBAAkC;AACzC,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,CAAC,aAAa,aAAa,cAAc,eAAe,iBAAiB,qBAAqB,iBAAiB,gBAAgB,mBAAmB,gBAAgB;AAAA,EAAA;AAEhL;ACnPO,MAAM,UAAU;AA8BhB,MAAM,uBAAuB;AAAA,EAEzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EAET,YAAY,eAAwC,IAAI;AACtD,SAAK,WAAW;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAEV,SAAA,eAAe,aAAa,eAAe,gBAAgB;AAChE,SAAK,OAAO,aAAa,OAAO,QAAA,EAAU;AAC1C,SAAK,WAAW,aAAa;AACxB,SAAA,SAAS,aAAa,SAAS,aAAa;AAC5C,SAAA,wBAAwB,aAAa,yBACvC,CAAC,WAAW,IAAI,sBAAsB,QAAQ,KAAK,YAAY;AAClE,SAAK,WAAW,aAAa,WAAW,IAAI,sBAAsB;AAC7D,SAAA,iBAAiB,aAAa,kBAChC,CAAC,QAAQ,mBAAmB,IAAI,6BAA6B,QAAQ,cAAc;AACjF,SAAA,yBAAyB,aAAa,yBAAyB;AAC/D,SAAA,QAAQ,aAAa,QAAQ;AAAA,EACpC;AAAA,EAEA,MAAM,IAAI,MAAiC;AACrC,QAAA,kBAA0B,OAAO;AACjC,QAAA;AACI,YAAA,aAAa,gBAAgB,IAAI;AACrB,wBAAA,WAAW,OAAO,WAAW;AAC3C,UAAA,WAAW,OAAO,SAAS;AAC7B,YAAI,WAAW,QAAQ;AACf,gBAAA,IAAI,WAAW,qBAAqB,6CAA6C;AAAA,QACzF;AACI,YAAA,WAAW,OAAO,SAAS;AACvB,gBAAA,uBAAuB,MAAM;AAC/B,cAAA;AACA,cAAA;AACF,kBAAMkD,SAAQ,MAAM,cAAc,WAAW,QAAQ,KAAK,cAAc;AAAA,cACtE,KAAK,KAAK;AAAA,cACV,SAAS,KAAK;AAAA,YAAA,CACf;AACDA,mBAAM,WAAW,MAAM;AAAA,cACrBA,OAAM;AAAA,cACN,KAAK;AAAA,YAAA;AAEP,iCAAqB,MAAM;AAAA,cACzBA,OAAM;AAAA,cACN,KAAK;AAAA,YAAA;AAAA,mBAEA,OAAO;AACR,kBAAA,aAAa,eAAe,KAAK;AACvC,iCAAqB,EAAE,MAAM,eAAe,OAAO,WAAW;UAChE;AACA,gBAAM,KAAK,OAAO,OAAO,GACvB,KAAK;AAAA,YACH;AAAA,cACE,SAAS,sBAAsB,mBAAmB;AAAA,cAClD,kBAAkB,sBAAsB,YAAY;AAAA,cACpD,cAAc;AAAA,cACd,aAAa;AAAA,cACb,kBAAkB;AAAA,cAClB,aAAa,WAAW,OAAO,QAAQ,UAAU,IAAI,mBAAmB,KAAK;AAAA,cAC7E,eAAe;AAAA,cACf,GAAG,WAAW,SAAS;AAAA,cACvB,qBAAqB;AAAA,cACrB,uBAAuB,yBAAyB,oBAAoB;AAAA,YACtE;AAAA,YACA;AAAA,YACA;AAAA,UAAA,CAEJ;AAAA,CAAI;AAAA,QAAA,OACC;AACL,gBAAM,KAAK,OAAO,OAAO,WAAW,OAAO;AAAA,CAAI;AAAA,QACjD;AACO,eAAA;AAAA,MACT;AACI,UAAA,WAAW,OAAO,KAAK;AAClB,eAAA,MAAM,KAAK,gBAAgB,WAAW,QAAQ,WAAW,QAAQ,WAAW,IAAI;AAAA,MACzF;AACI,UAAA,CAAC,WAAW,QAAQ;AAClB,YAAA,WAAW,OAAO,MAAM;AAC1B,gBAAM,KAAK,OAAO,OAAO,GAAG,aAAa,KAAK,QAAQ,CAAC;AAAA,CAAI;AACpD,iBAAA;AAAA,QACT;AACM,cAAA,IAAI,WAAW,oBAAoB,gCAAgC;AAAA,MAC3E;AACI,UAAA,CAAC,WAAW,QAAQ,WAAW,SAAS,YAAY,WAAW,SAAS,MAAM;AAC1E,cAAA,KAAK,OAAO,OAAO,GAAG,WAAW,KAAK,UAAU,WAAW,MAAM,CAAC;AAAA,CAAI;AACrE,eAAA;AAAA,MACT;AAEA,YAAM,UAAU,KAAK,SAAS,IAAI,WAAW,QAAQ,WAAW,IAAI;AACpE,UACE,WAAW,OAAO,QAAQ,WAAW,WAAW,SAAS,QAAQ,KACjE,WAAW,WAAW,SAAS,IAAI,GACnC;AACM,cAAA,KAAK,OAAO,OAAO,GAAG,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AAC5D,eAAA;AAAA,MACT;AACA,UAAI,QAAQ,cAAc;AAAgC,+BAAA,WAAW,QAAQ,OAAO;AACpF,YAAM,QAAQ,MAAM,KAAK,mBAAmB,SAAS,WAAW,MAAM;AAChE,YAAA,cAAc,WAAW,OAAO,QAClC,MAAM,KAAK,iBAAiB,WAAW,OAAO,KAAK,IACnD;AACJ,YAAM,SAAS,iBAAiB,SAAS,WAAW,YAAY,WAAW;AAC3E,UAAI,MAAM,SAAS,WAAW,SAAS,CAAC,QAAQ,mBAAmB;AACjE,cAAM,IAAI;AAAA,UACR;AAAA,UACA,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAAA;AAAA,MAErC;AACM,YAAA,UAAU,QAAQ,kBACpB,MAAM,KAAK,eAAe,MAAM,QAAQ,IACxC;AACJ,aAAO,MAAM,KAAK;AAAA,QAChB;AAAA,QACA,OAAO;AAAA,QACP,MAAM;AAAA,QACN,MAAM;AAAA,QACN;AAAA,QACA;AAAA,QACA,IAAI,gBAAkB,EAAA;AAAA,MAAA;AAAA,aAEjB,OAAO;AACR,YAAA,aAAa,eAAe,KAAK;AACjC,YAAA,WAAW,cAAc,YAAY,EAAE,SAAS,QAAQ,UAAU,iBAAiB;AACzF,YAAM,KAAK,OAAO,OAAO,GAAG,YAAY,UAAU,MAAM,CAAC;AAAA,CAAI;AAC7D,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,QAAuB,QAAiB,MAAgC;AAC5F,QAAI,UAAU,MAAM;AACZ,YAAA,IAAI,WAAW,qBAAqB,gDAAgD;AAAA,IAC5F;AACA,QAAI,OAAO,gBAAgB;AACnB,YAAA,IAAI,WAAW,qBAAqB,wCAAwC;AAAA,IACpF;AAEQ,eAAA,CAAC,MAAM,KAAK,KAAK;AAAA,MACrB,CAAC,SAAS,OAAO,KAAK;AAAA,MACtB,CAAC,WAAW,OAAO,OAAO;AAAA,MAC1B,CAAC,YAAY,OAAO,OAAO;AAAA,MAC3B,CAAC,mBAAmB,OAAO,cAAc;AAAA,MACzC,CAAC,QAAQ,OAAO,IAAI;AAAA,MACpB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,GAEpB;AACA,UAAI,UAAU,QAAW;AACvB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,KAAK,IAAI;AAAA,QAAA;AAAA,MAEb;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,cAAc,QAAQ,KAAK,cAAc;AAAA,MAC3D,aAAa;AAAA,MACb,KAAK,KAAK;AAAA,MACV,SAAS,KAAK;AAAA,IAAA,CACf;AACD,UAAM,WAAW,MAAM,4BAA4B,MAAM,UAAU,KAAK,YAAY;AACpF,UAAM,UAAU,MAAM,KAAK,eAAe,MAAM,QAAQ;AACxD,UAAM,KAAK,MAAM;AAAA,MACf,UAAU,KAAK;AAAA,MACf,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM;AAAA,MACnB;AAAA,MACA,SAAS,OAAO,QAAQ,WACtB,MAAM,KAAK,wBAAwB,QAAQ,QAAQ,MAAM,UAAU,MAAM,OAAO,OAAO;AAAA,IAAA,CAC1F;AACM,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,wBACJ,QACA,QACA,QACA,OACA,SACe;AACf,QAAI,OAAO,SAAS;AAAS,YAAA,IAAI,WAAW,oBAAoB,uBAAuB;AACjF,UAAA,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;AAChD,UAAA,aAAa,OAAO,MAAM,CAAC;AACjC,QAAI,WAAW,SAAS,QAAQ,KAAK,WAAW,SAAS,IAAI,GAAG;AACxD,YAAA,KAAK,OAAO,OAAO,GAAG,YAAY,KAAK,UAAU,OAAO,CAAC;AAAA,CAAI;AACnE;AAAA,IACF;AACA,UAAM,cAAc,iBAAiB,SAAS,YAAY,QAAW,MAAM,IAAI;AAC3E,QAAA,YAAY,OAAO,UAAU,KAAK;AAC9B,YAAA,IAAI,WAAW,qBAAqB,yCAAyC;AAAA,IACrF;AACM,UAAA,cAAc,YAAY,OAAO,QACnC,MAAM,KAAK,iBAAiB,YAAY,OAAO,KAAK,IACpD;AACJ,UAAM,SAAS,iBAAiB,SAAS,YAAY,aAAa,IAAI;AACtE,UAAM,SAAyB;AAAA,MAC7B,GAAG;AAAA,MACH,QAAQ,OAAO,OAAO,UAAU,OAAO;AAAA,MACvC,WAAW,OAAO,OAAO,UAAU,cAAc,OAAO,OAAO,OAAO,IAAI,OAAO;AAAA,MACjF,SAAS,OAAO,OAAO;AAAA,MACvB,gBAAgB,OAAO,OAAO;AAAA,MAC9B,MAAM,OAAO,OAAO,QAAQ;AAAA,MAC5B,KAAK,OAAO,OAAO,OAAO;AAAA,IAAA;AAE5B,QAAI,OAAO,WAAW,SAAS,CAAC,QAAQ,mBAAmB;AACzD,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,MAAA;AAAA,IAErC;AACM,UAAA,KAAK,gBAAgB,SAAS,OAAO,OAAO,QAAQ,OAAO,SAAS,MAAM,MAAM;AAAA,EACxF;AAAA,EAEA,MAAM,gBACJ,SACA,OACA,QACA,OACA,SACA,aACA,QACiB;AACjB,UAAM,UAAU,OAAO,WAAW,OAAO,WAAW;AAC9C,UAAA,YAAY,KAAK;AACnB,QAAA;AACE,UAAA,QAAQ,mBAAmB,CAAC,SAAS;AACvC,cAAM,IAAI,UAAU,iBAAiB,qCAAqC,CAAC;AAAA,MAC7E;AACA,UAAI,QAAQ;AAAuB,cAAA,QAAS,eAAe;AAC3D,YAAM,YAAY,SAAS,eAAe,QAAA,EAAU,aAAa;AAAA,QAC/D,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,gBAAgB;AAAA,MAAA;AAElB,YAAM,UAA0B;AAAA,QAC9B,SAAS,EAAE,QAAQ,QAAQ,QAAQ,MAAM,QAAQ,KAAK;AAAA,QACtD,YAAY;AAAA,QACZ,YAAY,SAAS,cAAc;AAAA,UACjC,MAAM,OAAO,QAAQ;AAAA,UACrB,UAAU,OAAO,YAAY;AAAA,UAC7B,iBAAiB,OAAO;AAAA,QAC1B;AAAA,QACA;AAAA,QACA,SAAS,SAAS,WAAW;AAAA,QAC7B,QAAQ,EAAE,QAAQ,OAAO,OAAO;AAAA,QAChC;AAAA,QACA,gBAAgB,OAAO;AAAA,QACvB,UAAU,KAAK,IAAI,IAAI,OAAO;AAAA,QAC9B;AAAA,QACA,KAAK,KAAK;AAAA,QACV,IAAI;AAAA,UACF,QAAQ,CAAC,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,UAC3C,QAAQ,CAAC,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,UAC3C,QAAQ,CAAC,YAAY,KAAK,OAAO,SAAS,OAAO,KAAK,QAAQ,QAAQ,IAAI;AAAA,UAC1E,iBAAiB,KAAK,OAAO,kBAAuB,KAAA;AAAA,QACtD;AAAA,QACA;AAAA,QACA,WAAW,OAAO;AAAA,QAClB;AAAA,QACA,aAAa;AAAA,QACb,SAAS,SAAS;AAAA,MAAA;AAEpB,YAAM,OAAO,MAAM,QAAQ,QAAQ,SAAS,KAAK;AAC7C,UAAA;AACa,uBAAA,MAAM,QAAQ,cAAc,QAAQ;AAAA,eAC5C,OAAO;AACd,cAAM,IAAI;AAAA,UACR;AAAA,UACA,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,UACrD;AAAA,QAAA;AAAA,MAEJ;AACM,YAAA,WAAW,gBAAgB,MAAM;AAAA,QACrC,SAAS,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAC1C,UAAU;AAAA,QACV,aAAa,KAAK,IAAA,IAAQ;AAAA,MAAA,CAC3B;AACD,YAAM,KAAK,OAAO;AAAA,QAChB,GAAG,cAAc,UAAU,OAAO,MAAM,CAAC,GAAG,OAAO,WAAW,QAAQ,KAAK,IAAI;AAAA,MAAA;AAE1E,aAAA;AAAA,aACA,OAAO;AACR,YAAA,aAAa,eAAe,KAAK;AACjC,YAAA,WAAW,cAAc,YAAY;AAAA,QACzC,SAAS,GAAG,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,QAC1C,UAAU;AAAA,QACV,aAAa,KAAK,IAAA,IAAQ;AAAA,MAAA,CAC3B;AACK,YAAA,KAAK,OAAO,OAAO,GAAG,YAAY,UAAU,OAAO,MAAM,CAAC;AAAA,CAAI;AACpE,UAAI,OAAO;AAAS,cAAM,KAAK,OAAO,OAAO,eAAe,WAAW,IAAI;AAAA,CAAI;AAC/E,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,SACA,QAC2D;AAC3D,QAAI,QAAQ,mBAAoB,QAAQ,WAAW,YAAY,QAAQ,SAAS,SAAU;AACxF,YAAM,QAAQ,MAAM,cAAc,QAAQ,KAAK,cAAc;AAAA,QAC3D,KAAK,KAAK;AAAA,QACV,SAAS,KAAK;AAAA,MAAA,CACf;AACD,UAAI,QAAQ,iBAAiB;AAC3B,cAAM,WAAW,MAAM,4BAA4B,MAAM,UAAU,KAAK,YAAY;AAAA,MACtF;AACO,aAAA;AAAA,IACT;AACO,WAAA,oBAAoB,QAAQ,KAAK,cAAc;AAAA,MACpD,KAAK,KAAK;AAAA,MACV,SAAS,KAAK;AAAA,IAAA,CACf;AAAA,EACH;AAAA,EAEA,MAAM,eAAe,QAAqD;AAClE,UAAA,KAAK,+BAA+B,MAAM;AAC1C,UAAA,iBAAiB,KAAK,sBAAsB,MAAM;AACxD,WAAO,MAAM,mBAAmB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,KAAK,eAAe,QAAQ,cAAc;AAAA,IAAA;AAAA,EAE9C;AAAA,EAEA,MAAM,+BAA+B,QAAuC;AAC1E,UAAM,WAAW,OAAO;AACpB,QAAA,CAAC,YAAY,OAAO;AAAK;AAC7B,QAAI,OAAO,gBAAgB;AACzB,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAE7B;AACA,QAAI,CAAC,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAChD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,UAAU,SAAS,IAAI;AAAA,MAAA;AAAA,IAE7B;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,MAAgD;AACjE,QAAA;AACA,QAAA;AACI,YAAA,SAAS,MAAM,MAAM,KAAK,OAAO,UAAU,IAAI,MAAM,QAAA,EAAU,aAAa,IAAI;AAAA,aAC/E,OAAO;AACd,YAAM,IAAI;AAAA,QACR;AAAA,QACA,yBAAyB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MAAA;AAAA,IAEnF;AACI,QAAA;AACA,QAAA;AACO,eAAA,KAAK,MAAM,GAAG;AAAA,IAAA,QACjB;AACA,YAAA,IAAI,WAAW,sBAAsB,yBAAyB;AAAA,IACtE;AACI,QAAA,CAAC,UAAU,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,GAAG;AAC5D,YAAA,IAAI,WAAW,sBAAsB,8BAA8B;AAAA,IAC3E;AACO,WAAA;AAAA,EACT;AACF;AAEO,SAAS,eACd,kBACA,iBACA,iBACA,wBACA,uBACiB;AACX,QAAA,WAAW,IAAI;AACV,aAAA,UAAU,kBAAkB,QAAQ;AAAG,aAAS,SAAS,MAAM;AACjE,WAAA,SAAS,kBAAkB;AAC3B,WAAA,SAAS,iBAAiB,gBAAgB,CAAC;AAC3C,WAAA,SAAS,oBAAoB;AAC7B,WAAA,SAAS,0BAA0B;AACnC,WAAA,SAAS,gBAAgB,eAAe,CAAC;AACzC,WAAA,SAAS,kBAAkB;AAC3B,WAAA,SAAS,gBAAgB,eAAe,CAAC;AACzC,WAAA,SAAS,uBAAuB,sBAAsB,CAAC;AACvD,WAAA,SAAS,sBAAsB,qBAAqB,CAAC;AACrD,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,gBAAgB;AACzB,WAAA,SAAS,mBAAmB;AAC5B,WAAA,SAAS,sBAAsB;AAC/B,WAAA,SAAS,kBAAkB;AAC7B,SAAA;AACT;AAIA,SAAS,uBAAuB,QAAuB,SAAkC;AAE/E,aAAA,CAAC,MAAM,KAAK,KAAK;AAAA,IACrB,CAAC,WAAW,OAAO,OAAO;AAAA,IAC1B,CAAC,QAAQ,OAAO,IAAI;AAAA,IACpB,CAAC,YAAY,OAAO,QAAQ;AAAA,IAC5B,CAAC,YAAY,OAAO,QAAQ;AAAA,IAC5B,CAAC,iBAAiB,OAAO,YAAY;AAAA,IACrC,CAAC,sBAAsB,OAAO,gBAAgB;AAAA,EAAA,GAEhD;AACA,QAAI,UAAU,QAAW;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,QACA,KAAK,IAAI,8CAA8C,QAAQ,MAAM,IAAI,QAAQ,IAAI;AAAA,MAAA;AAAA,IAEzF;AAAA,EACF;AACF;AAEA,MAAM,qBAA4C;AAAA,EAChD,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,kBAAkB,mCAAmC,CAAC,CAAC;AAClG;AAEA,SAAS,aAAa,UAAmC;AAChD,SAAA;AAAA,IACL,gBAAgB,OAAO;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,SAAS,QAAU,EAAA,IAAI,CAAC,WAAW,KAAK,OAAO,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,OAAO,EAAE;AAAA,IACrF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,IAAI;AACb;AAEA,SAAS,WAAW,UAA2B,YAA4B;AACnE,QAAA,SAAS,SAAS,UAAU,KAAK,CAAC,cAAc,UAAU,SAAS,UAAU;AACnF,MAAI,CAAC;AAAQ,UAAM,IAAI,WAAW,kBAAkB,mBAAmB,UAAU,EAAE;AAC5E,SAAA;AAAA,IACL,GAAG,OAAO,IAAI,KAAK,OAAO,OAAO;AAAA,IACjC;AAAA,IACA;AAAA,IACA,GAAG,OAAO,SAAS,IAAI,CAAC,YAAY,KAAK,QAAQ,KAAK,OAAO,EAAE,CAAC,IAAI,QAAQ,OAAO,EAAE;AAAA,EAAA,EACrF,KAAK,IAAI;AACb;AAEA,SAAS,YAAY,UAA2B,SAAoC;AAC3E,SAAA;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,UAAU,SAAS,OAAO,OAAO,CAAC;AAAA,IAClC,GAAI,QAAQ,cAAc,CAAC,IAAI,QAAQ,WAAW,IAAI,CAAC;AAAA,IACvD,IAAK,QAAQ,aAAa,UAAU,KAAK,IACrC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,YAAa;AAAA,QAAI,CAAC,aAC3B,KAAK,SAAS,KAAK,OAAO,EAAE,CAAC,IAAI,SAAS,WAAW;AAAA,MACvD;AAAA,IAAA,IAEA,CAAC;AAAA,IACL,IAAK,QAAQ,SAAS,UAAU,KAAK,IACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,QAAQ,QAAS,IAAI,CAAC,WAAW,OAAO,OAAO,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,WAAW,EAAE;AAAA,IAAA,IAEzF,CAAC;AAAA,IACL,IAAK,QAAQ,UAAU,UAAU,KAAK,IAClC,CAAC,IAAI,aAAa,GAAG,QAAQ,SAAU,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC,IACvE,CAAC;AAAA,EAAA,EACL,KAAK,IAAI;AACb;AAEA,SAAS,eAA0B;AAC1B,SAAA;AAAA,IACL,QAAQ,OAAO,UAAU,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,IACrD,QAAQ,OAAO,UAAU,MAAM,QAAQ,EAAE,OAAO,KAAK;AAAA,IACrD,WAAW,YAAY,MAAM,UAAU,UAAU;AAAA,IACjD,QAAQ,OAAO,YAAY,MAAM,QAAQ,EAAE,SAAS,OAAO;AAAA,IAC3D,iBAAiB,MAAM,QAAQ,EAAE,gBAAgB;AAAA,EAAA;AAErD;AAEA,eAAe,sBAAsB,UAAoD;AACvF,MAAI,CAAC,UAAU,mBAAmB;AAChC,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,EAAE,UAAU,SAAS,IAAI;AAAA,IAAA;AAAA,EAE7B;AACA,QAAM,SAAS,+BAA+B,SAAS,IAAI,KAAK,SAAS,GAAG;AAEtE,QAAA,UAAU,MAAM,QAAQ,EAAE,SAAS,MAAM,IAAI,KAAU,KAAA;AAC7D,SAAO,OAAO,kBAAkB,OAAO,OAAO,YAAkB,MAAA;AAClE;ACxlBsB,eAAA,OAAOrD,OAAgB,MAAiC;AAC5E,cAAYA,KAAI;AAChB,SAAO,MAAM,IAAI,uBAAuB,EAAE,IAAI,IAAI;AACpD;ACLA,eAAsB,iBACpB8C,SACA,MACA,UACA,WACAK,YACA,eAAe,MACA;AACf,QAAM,QAAQA,eAAc,SAASL,QAAO,YAAYA,QAAO;AACzD,QAAA,WAAW,KAAK,QAAQ,SAAS;AACvC,QAAM,gBAA0B,CAAA;AAChC,aAAW,QAAQ,OAAO;AACpB,QAAA;AACF,oBAAc,KAAK,MAAM,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC;AAAA,aAC9C,OAAO;AACV,UAAA,CAAC,YAAY,OAAO,UAAU,KAAK,CAAC,YAAY,OAAO,kBAAkB;AAAS,cAAA;AAAA,IACxF;AAAA,EACF;AACI,MAAA,CAAC,UAAU,UAAU,OAAO,IAAI,KAAK,CAAC,UAAU,UAAU,eAAe,IAAI,GAAG;AAClF,UAAM,IAAI;AAAA,MACR;AAAA,MACA,GAAGK,UAAS,sBAAsBL,QAAO,IAAI,KAAK,QAAQ;AAAA,MAC1D;AAAA,IAAA;AAAA,EAEJ;AACA,MAAI,CAAC;AAAc;AACf,MAAA;AACI,UAAA,WAAW,MAAM,SAAS,QAAQ;AACxC,QAAI,CAAC,UAAU,UAAU,eAAe,IAAI,GAAG;AAC7C,YAAM,IAAI;AAAA,QACR;AAAA,QACA,GAAGK,UAAS,mBAAmBL,QAAO,IAAI,KAAK,QAAQ;AAAA,QACvD;AAAA,MAAA;AAAA,IAEJ;AAAA,WACO,OAAO;AACV,QAAA,CAAC,YAAY,OAAO,UAAU;AAAS,YAAA;AAAA,EAC7C;AACF;AAEA,SAAS,UAAU,WAAmB,OAA0B,MAAyB;AAChF,SAAA,MAAM,KAAK,CAAC,SAAS;AAC1B,UAAMzB,YAAW,KAAK,SAAS,KAAK,QAAQ,IAAI,GAAG,SAAS;AAC5D,WAAOA,cAAa,MAAMA,cAAa,QAAQ,CAACA,UAAS,WAAW,KAAK,KAAK,GAAG,EAAE,KAC/E,CAAC,KAAK,WAAWA,SAAQ;AAAA,EAAA,CAC9B;AACH;ACZO,MAAM,SAA6B;AAAA,EAYxC,YAAYyB,SAA4B;AAXxC,SAAS,OAAO;AAChB,SAAS,cAAc;AACd,SAAA,iBAAiB,QAAQ,SAAS;AAClC,SAAA,WAAW,kBAAkB,QAAQ,QAAQ;AAC7C,SAAA,OAAO,cAAc,QAAQ,IAAI;AAC1C,SAAS,MAAM,QAAQ;AACvB,SAAS,aAAa,QAAQ,KAAK,CAAC,IAAI,SAAS,QAAQ,QAAQ,KAAK,CAAC,CAAC,IAAI,QAAQ;AACpF,SAAS,oBAAoB,QAAQ;AACrC,SAAS,OAAO;AAId,SAAK,SAASA;AAAA,EAChB;AAAA,EAEA,MAAc;AACZ,WAAO,QAAQ;EACjB;AAAA,EAEA,UAAkB;AAChB,WAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe,QAAQ;EAChE;AAAA,EAEA,IAAI,MAAkC;AACpC,QAAI,CAAC,KAAK,OAAO,YAAY,SAAS,IAAI,GAAG;AAC3C,YAAM,IAAI,UAAU,oBAAoB,sCAAsC,IAAI,EAAE;AAAA,IACtF;AACO,WAAA,QAAQ,IAAI,IAAI;AAAA,EACzB;AAAA,EAEA,KAAK,MAAqB;AACxB,YAAQ,KAAK,IAAI;AAAA,EACnB;AAAA,EAEA,YAAY,MAAoB;AAC9B,YAAQ,WAAW;AAAA,EACrB;AAAA,EAEA,MAAM,aAAa,MAA+B;AAC1C,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACK,aAAA,MAAM,SAAS,MAAM,MAAM;AAAA,aAC3B,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAmC;AAC1C,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACF,aAAO,IAAI,WAAW,MAAM,SAAS,IAAI,CAAC;AAAA,aACnC,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,MACA,OACA,UAAkD,CAAA,GACnC;AACT,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,UAAU,MAAM,OAAO;AAAA,QAC3B,MAAM,QAAQ,YAAY,OAAO;AAAA,QACjC,MAAM,QAAQ;AAAA,MAAA,CACf;AAAA,aACM,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,UACJ,MACA,OACA,UAAkD,CAAA,GACnC;AACT,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,UAAU,MAAM,OAAO;AAAA,QAC3B,MAAM,QAAQ,YAAY,OAAO;AAAA,QACjC,MAAM,QAAQ;AAAA,MAAA,CACf;AAAA,aACM,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,MAAc;AACpB,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACM,cAAA,MAAM,QAAQ,MAAM,EAAE,eAAe,MAAM,GAAG,IAAI,CAAC,WAAW;AAAA,QACpE,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM,OAAO;AAAA,QACrB,aAAa,MAAM,YAAY;AAAA,QAC/B,WAAW,MAAM,eAAe;AAAA,MAChC,EAAA;AAAA,aACK,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,KAAK,MAAqC;AACxC,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACF,aAAO,SAAS,MAAM,KAAK,IAAI,CAAC;AAAA,aACzB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAqC;AAC/C,UAAM,KAAK,WAAW,MAAM,QAAQ,KAAK;AACrC,QAAA;AACF,aAAO,SAAS,MAAM,MAAM,IAAI,CAAC;AAAA,aAC1B,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAA+B;AACtC,UAAA,KAAK,WAAW,MAAM,MAAM;AAC9B,QAAA;AACK,aAAA,MAAM,SAAS,IAAI;AAAA,aACnB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,UAA6C,IAAqB;AAC5E,UAAA,YAAY,QAAQ,OAAO,OAAO;AAClC,UAAA,KAAK,WAAW,WAAW,OAAO;AACpC,QAAA;AACK,aAAA,MAAM,QAAQ,SAAS,KAAK,WAAW,QAAQ,UAAU,UAAU,CAAC;AAAA,aACpE,OAAO;AACR,YAAA,mBAAmB,OAAO,SAAS;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,UAA6C,IAAqB;AAC7E,UAAA,YAAY,MAAM,KAAK,YAAY,EAAE,KAAK,QAAQ,KAAK,QAAQ,QAAQ,OAAQ,CAAA;AACrF,UAAM,OAAO,SAAS,KAAK,WAAW,MAAM;AACtC,UAAA,KAAK,UAAU,MAAM,IAAI,WAAA,GAAc,EAAE,WAAW,MAAM,MAAM,IAAO,CAAA;AACtE,WAAA;AAAA,EACT;AAAA,EAEA,MAAM,OAAO,MAAc,IAA2B;AAC9C,UAAA,KAAK,WAAW,MAAM,OAAO;AAC7B,UAAA,KAAK,WAAW,IAAI,OAAO;AAC7B,QAAA;AACI,YAAA,OAAO,MAAM,EAAE;AAAA,aACd,OAAO;AACd,YAAM,mBAAmB,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAc,UAAmC,IAAmB;AAC/E,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACF,YAAM,GAAG,MAAM,EAAE,WAAW,QAAQ,aAAa,OAAO;AAAA,aACjD,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAc,UAAkD,IAAmB;AAC7F,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACI,YAAA,MAAM,MAAM,EAAE,WAAW,QAAQ,WAAW,MAAM,QAAQ,KAAA,CAAM;AAAA,aAC/D,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,MAAM,MAAc,MAA6B;AAC/C,UAAA,KAAK,WAAW,MAAM,OAAO;AAC/B,QAAA;AACI,YAAA,MAAM,MAAM,IAAI;AAAA,aACf,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAgB,MAA6B;AACnD,UAAA,KAAK,WAAW,QAAQ,MAAM;AACpC,UAAM,KAAK,WAAW,MAAM,SAAS,KAAK;AACtC,QAAA;AACI,YAAA,QAAQ,QAAQ,IAAI;AAAA,aACnB,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,MAAc,IAA2B;AAChD,UAAA,KAAK,WAAW,MAAM,MAAM;AAClC,UAAM,KAAK,WAAW,IAAI,SAAS,KAAK;AACpC,QAAA;AACI,YAAA,SAAS,MAAM,EAAE;AAAA,aAChB,OAAO;AACd,YAAM,mBAAmB,OAAO,GAAG,IAAI,OAAO,EAAE,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,KACJ,MACA,SACmB;AACb,UAAA,KAAK,WAAW,MAAM,QAAQ,QAAQ,UAAU,QAAQ,CAAC,QAAQ,SAAS;AAC1E,UAAA,QAAQ,QAAQ,QAAQ,QAAQ,QAClC,OACA,QAAQ,QACR,QAAQ,YAAY,OAAO,MAC3B;AACA,QAAA;AACK,aAAA,IAAI,aAAa,MAAM,KAAK,MAAM,OAAO,QAAQ,IAAI,CAAC;AAAA,aACtD,OAAO;AACR,YAAA,mBAAmB,OAAO,IAAI;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,MAAcK,YAA4C;AACrE,UAAA,KAAK,WAAW,MAAMA,UAAS;AAAA,EACvC;AAAA,EAEA,WAAW,YAAsB;AACzB,UAAA,OAAOG,WAAe,QAAQ;AAC7B,WAAA;AAAA,MACL,OAAO,OAAmB;AACxB,aAAK,OAAO,KAAK;AAAA,MACnB;AAAA,MACA,YAAY;AACH,eAAA,KAAK,OAAO,KAAK;AAAA,MAC1B;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEA,MAAM,SAAS,QAAgB,aAAoC;AAC3D,UAAA,KAAK,WAAW,QAAQ,MAAM;AACpC,UAAM,KAAK,WAAW,aAAa,SAAS,KAAK;AAC7C,QAAA;AACI,YAAA;AAAA,QACJ,SAAS,KAAK,YAAY,iBAAiB,MAAM,CAAC,CAAC;AAAA,QACnD,WAAW,EAAE,OAAO,GAAG,UAAUC,UAAc,OAAO;AAAA,QACtD,kBAAkB,aAAa,EAAE,OAAO,MAAM,MAAM,KAAO;AAAA,MAAA;AAAA,aAEtD,OAAO;AACR,YAAA,mBAAmB,OAAO,WAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,SAAiB,MAAgB;AACzC,SAAK,cAAc,OAAO;AACnB,WAAA,MAAM,QAAQ,SAAS,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM,QAAQ,SAAiB,MAAgB,aAAqB;AAClE,SAAK,cAAc,OAAO;AAC1B,UAAM,KAAK,WAAW,aAAa,SAAS,KAAK;AACjD,UAAM,QAAQ,MAAM,SAAS,MAAM,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,GAAG,OAAO,MAAO,CAAA;AACtF,UAAM,SAAuB,CAAA;AACvB,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AACjE,QAAA;AACI,YAAA;AAAA,QACJ,SAAS,KAAK,YAAY,MAAM,MAAM,CAAC;AAAA,QACvC,WAAW,EAAE,OAAO,GAAG,UAAUA,UAAc,OAAO;AAAA,QACtD,kBAAkB,aAAa,EAAE,OAAO,MAAM,MAAM,KAAO;AAAA,MAAA;AAEvD,YAAA,OAAO,MAAM,YAAY,KAAK;AACpC,aAAO,EAAE,SAAS,SAAS,GAAG,MAAM,QAAQ,IAAI,WAAc,GAAA,QAAQ,OAAO,MAAM,EAAE;AAAA,aAC9E,OAAO;AACd,YAAM,KAAK;AACL,YAAA,mBAAmB,OAAO,WAAW;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,OAA2C;AAChD,UAAA,YAAY,QAAQ,QAAQ,KAAK;AAAA,EACzC;AAAA,EAEA,MAAM,OAAO,OAA2C;AAChD,UAAA,YAAY,QAAQ,QAAQ,KAAK;AAAA,EACzC;AAAA,EAEA,MAAM,YAA6B;AACjC,UAAM,SAAuB,CAAA;AAC7B,qBAAiB,SAAS,QAAQ;AAAO,aAAO,KAAK,IAAI,WAAW,KAAK,CAAC;AAC1E,WAAO,IAAI,YAAY,EAAE,OAAO,OAAO,MAAM,CAAC;AAAA,EAChD;AAAA,EAEA,MAAM,SAAS,QAAwC;AAC/C,UAAA,SAAS,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAA,CAAQ;AAC3E,QAAA;AACK,aAAA,MAAM,OAAO,SAAS,MAAM;AAAA,IAAA,QAC7B;AACC,aAAA;AAAA,IAAA,UACP;AACA,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAiC;AAC5C,QAAA,CAAC,KAAK,gBAAgB,KAAK,OAAO,QAAQ,MAAM,eAAe,YAAY;AACvE,YAAA,IAAI,UAAU,oBAAoB,kCAAkC;AAAA,IAC5E;AACM,UAAA,KAAK,OAAO,MAAM;AAChB,YAAA,MAAM,WAAW,IAAI;AAC7B,YAAQ,MAAM;AACd,UAAM,QAAkB,CAAA;AACpB,QAAA;AACF,aAAO,MAAM;AACL,cAAA,QAAQ,MAAM;AACpB,YAAI,UAAU;AAAM;AACd,cAAA,OAAO,MAAM,CAAC;AAChB,YAAA,SAAS,MAAM,SAAS;AAAI;AAChC,YAAI,SAAS;AAAS,gBAAA,IAAI,UAAU,oBAAoB,uBAAuB;AAC3E,YAAA,SAAS,KAAK,SAAS;AAAK,gBAAM,IAAI;AAAA;AACrC,gBAAM,KAAK,IAAI;AAAA,MACtB;AAAA,IAAA,UACA;AACQ,cAAA,MAAM,WAAW,KAAK;AAC9B,cAAQ,MAAM;AACR,YAAA,KAAK,OAAO,IAAI;AAAA,IACxB;AACA,WAAO,IAAI,YAAY,EAAE,OAAO,WAAW,KAAK,KAAK,CAAC;AAAA,EACxD;AAAA,EAEA,kBAA2B;AAClB,WAAA,QAAQ,QAAQ,MAAM,KAAK;AAAA,EACpC;AAAA,EAEA,iBAAiB,SAKE;AACjB,UAAM,SAAS,gBAAgB;AAAA,MAC7B,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,MAChB,UAAU;AAAA,MACV,SAAS,QAAQ;AAAA,MACjB,aAAa,QAAQ;AAAA,MACrB,WAAW,QAAQ;AAAA,IAAA,CACpB;AACM,WAAA,GAAG,UAAU,QAAQ,QAAQ;AAC7B,WAAA;AAAA,MACL,CAAC,OAAO,aAAa,GAAG,MAAM,OAAO,OAAO,aAAa,EAAE;AAAA,MAC3D,OAAO,CAAC,UAAU,QAAQ,OAAO,MAAM,KAAK;AAAA,MAC5C,WAAW,CAAC,UAAU,OAAO,UAAU,KAAK;AAAA,MAC5C,QAAQ,MAAM,OAAO,OAAO;AAAA,MAC5B,OAAO,MAAM,OAAO,MAAM;AAAA,IAAA;AAAA,EAE9B;AAAA,EAEQ,cAAc,SAAuB;AAC3C,QAAI,CAAC,KAAK,OAAO,aAAa,SAAS,OAAO,GAAG;AAC/C,YAAM,IAAI,UAAU,oBAAoB,8BAA8B,OAAO,EAAE;AAAA,IACjF;AAAA,EACF;AAAA,EAEA,MAAc,WACZ,WACAJ,YACA,eAAe,MACA;AACT,UAAA;AAAA,MACJ,KAAK;AAAA,MACL;AAAA,MACA,OAAO,SAAS;AACV,YAAA;AACK,iBAAA,MAAM,SAAS,IAAI;AAAA,iBACnB,OAAO;AACR,gBAAA,mBAAmB,OAAO,IAAI;AAAA,QACtC;AAAA,MACF;AAAA,MACA;AAAA,MACAA;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AACF;AAEA,gBAAgB,YACd,QAC4B;AAC5B,QAAM,OAAO,KAAK;AACd,MAAA,UAAU,IAAI,WAAW,IAAI;AACjC,MAAI,OAAO;AACX,mBAAiB,SAAS,QAAQ;AAChC,QAAI,SAAS;AACN,WAAA,SAAS,MAAM,YAAY;AAChC,YAAM,SAAS,KAAK,IAAI,OAAO,MAAM,MAAM,aAAa,MAAM;AAC9D,cAAQ,IAAI,MAAM,SAAS,QAAQ,SAAS,MAAM,GAAG,IAAI;AACjD,cAAA;AACE,gBAAA;AACV,UAAI,SAAS,MAAM;AACX,cAAA;AACI,kBAAA,IAAI,WAAW,IAAI;AACtB,eAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACA,MAAI,OAAO;AAAS,UAAA,QAAQ,MAAM,GAAG,IAAI;AAC3C;AAEA,MAAM,aAAiC;AAAA,EAIrC,YAAY,QAA0C;AAF1C,SAAA,YAAA;AAGV,SAAK,SAAS;AAAA,EAChB;AAAA,EAJA;AAAA,EAMA,MAAM,KAAK,QAA4C;AAC/C,UAAA,SAAS,MAAM,KAAK,OAAO,KAAK,QAAQ,GAAG,OAAO,QAAQ,KAAK,SAAS;AAC9E,QAAI,OAAO,cAAc;AAAU,aAAA;AACnC,SAAK,aAAa,OAAO;AACzB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,MAAM,QAAqC;AACzC,UAAA,SAAS,MAAM,KAAK,OAAO,MAAM,QAAQ,GAAG,OAAO,QAAQ,KAAK,SAAS;AAC/E,SAAK,aAAa,OAAO;AACzB,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,KAAK,QAAiC;AACpC,SAAK,YAAY;AACV,WAAA,QAAQ,QAAQ,MAAM;AAAA,EAC/B;AAAA,EAEA,MAAM,OAA8B;AAClC,WAAO,SAAS,MAAM,KAAK,OAAO,KAAM,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,OAAsB;AACpB,UAAA,KAAK,OAAO;EACpB;AAAA,EAEA,QAAuB;AACd,WAAA,KAAK,OAAO;EACrB;AACF;AAEA,SAAS,SAAS,OASD;AACR,SAAA;AAAA,IACL,QAAQ,MAAM,OAAO;AAAA,IACrB,aAAa,MAAM,YAAY;AAAA,IAC/B,WAAW,MAAM,eAAe;AAAA,IAChC,MAAM,MAAM;AAAA,IACZ,MAAM,MAAM,QAAQ;AAAA,IACpB,OAAO,MAAM,SAAS;AAAA,IACtB,KAAK,MAAM,OAAO;AAAA,IAClB,KAAK,MAAM,OAAO;AAAA,EAAA;AAEtB;AAEA,eAAe,QAAQ,SAAiB,MAAgB;AACtD,SAAO,MAAM,IAAI,QAKd,CAAC5C,UAAS,WAAW;AACtB,UAAM,QAAQ,MAAM,SAAS,MAAM,EAAE,OAAO,CAAC,UAAU,QAAQ,MAAM,GAAG,OAAO,MAAO,CAAA;AACtF,UAAM,SAAuB,CAAA;AAC7B,UAAM,SAAuB,CAAA;AACvB,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/D,UAAA,OAAO,GAAG,QAAQ,CAAC,UAAU,OAAO,KAAK,IAAI,WAAW,KAAK,CAAC,CAAC;AAC/D,UAAA,KAAK,SAAS,MAAM;AAC1B,UAAM,KAAK,SAAS,CAAC,SACnBA,SAAQ;AAAA,MACN,SAAS,SAAS;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,QAAQ,OAAO,MAAM;AAAA,MACrB,QAAQ,OAAO,MAAM;AAAA,IACtB,CAAA,CAAC;AAAA,EAAA,CACL;AACH;AAEA,eAAe,YAAY,OAAkD;AAC3E,MAAI,MAAM,aAAa;AAAM,WAAO,MAAM;AAC1C,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AACtC,UAAA,KAAK,SAAS,MAAM;AAC1B,UAAM,KAAK,SAAS,CAAC,SAASA,SAAQ,QAAQ,CAAC,CAAC;AAAA,EAAA,CACjD;AACH;AAEA,SAAS,OAAO,QAAkC;AAChD,QAAM,SAAS,IAAI,WAAW,OAAO,OAAO,CAAC,MAAM,UAAU,OAAO,MAAM,QAAQ,CAAC,CAAC;AACpF,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AACnB,WAAA,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACO,SAAA;AACT;AAEA,eAAe,YACb,QACA,OACe;AACf,QAAM,IAAI,QAAc,CAACA,UAAS,WAAW;AACpC,WAAA,MAAM,OAAO,CAAC,UAAyB,QAAQ,OAAO,KAAK,IAAIA,SAAA,CAAS;AAAA,EAAA,CAChF;AACH;AAEA,eAAe,iBAA6C;AAC1D,SAAO,MAAM,IAAI,QAAQ,CAACA,UAAS,WAAW;AAC5C,UAAM,SAAS,CAAC,UAAsB,KAAK,IAAI,WAAW,KAAK,CAAC;AAC1D,UAAA,QAAQ,MAAM,KAAK,IAAI;AACvB,UAAA,UAAU,CAAC,UAAiB;AACxB;AACR,aAAO,KAAK;AAAA,IAAA;AAEd,UAAM,UAAU,MAAM;AACZ,cAAA,MAAM,IAAI,QAAQ,MAAM;AACxB,cAAA,MAAM,IAAI,OAAO,KAAK;AACtB,cAAA,MAAM,IAAI,SAAS,OAAO;AAAA,IAAA;AAE9B,UAAA,OAAO,CAAC,UAA6B;AACjC;AACR,MAAAA,SAAQ,KAAK;AAAA,IAAA;AAEP,YAAA,MAAM,KAAK,QAAQ,MAAM;AACzB,YAAA,MAAM,KAAK,OAAO,KAAK;AACvB,YAAA,MAAM,KAAK,SAAS,OAAO;AAAA,EAAA,CACpC;AACH;AAEA,SAAS,mBAAmB,OAAgB,MAA0B;AACpE,MAAI,iBAAiB;AAAkB,WAAA;AACvC,QAAM,OAAQ,MAA4B;AAC1C,QAAM,OAAO,SAAS,WAClB,aACA,SAAS,YAAY,SAAS,UAC9B,qBACA,SAAS,WACT,kBACA,SAAS,WACT,iBACA;AACG,SAAA,IAAI,UAAU,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAAG,MAAM,KAAK;AAChG;AAEA,SAAS,kBAAkB,OAAuB;AAChD,SAAO,UAAU,UAAU,YAAY,UAAU,WAAW,UAAU;AACxE;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,UAAU,QAAQ,WAAW,UAAU,UAAU,YAAY;AACtE;AC9kBA,MAAM,cAAcA,UAAQH,UAAQ,cAAc,YAAY,GAAG,CAAC,GAAG,OAAO;AAC5E,MAAM,cAAc,OAAO;AAAA,EACzB,uBAAuB,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,IAAI,IAAI,CAAC,CAAC;AAChE;AACA,MAAM,SAAS,wBAAwB;AAAA,EACrC,cAAc;AAAA,EACd,MAAM,QAAQ,KAAK,MAAM,CAAC;AAAA,EAC1B,KAAK,QAAQ,IAAI;AAAA,EACjB;AAAA,EACA,SAAS,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe,QAAQ,IAAI;AAAA,EACpE;AAAA,EACA,MAAM,MAAM,OAAO,WAAW;AAChC,CAAC;AACD,MAAM,OAAO,IAAI,SAAS,MAAM;AAChC,YAAY,IAAI;AAChB,KAAK,YAAY,MAAM,OAAO,MAAM,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC;"}