@midscene/test 1.15.3 → 1.15.4-beta-20261013090705.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cli/index.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/engine/registry.ts","../../../src/cli/test-project.ts","../../../src/parser/identifiers.ts","../../../src/parser/normalize.ts","../../../src/parser/source.ts","../../../src/parser/variables.ts","../../../src/parser/collect.ts","../../../src/cli/result-store.ts","../../../src/cli/project-preparation.ts","../../../src/cli/prepare-test-run.ts","../../../src/report/result-markdown.ts","../../../src/cli/document-invocation.ts","../../../src/cli/operation-journal.ts","../../../src/cli/run-prepared-project.ts","../../../src/cli/test-project-runner.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { NodeRegistry as CoreNodeRegistry } from '@midscene/core/internal/test-runner';\nimport type { NodeDefinition } from '../node/types';\n\nexport type NodeRegistry = Omit<\n CoreNodeRegistry,\n 'get' | 'require' | 'register' | 'definitions'\n> & {\n get(name: string): NodeDefinition<any, any> | undefined;\n require(name: string): NodeDefinition<any, any>;\n register<TInput, TData>(node: NodeDefinition<TInput, TData>): NodeRegistry;\n definitions(): readonly NodeDefinition<any, any, any>[];\n};\nexport const NodeRegistry: {\n new (nodes?: readonly NodeDefinition<any, any>[]): NodeRegistry;\n} = CoreNodeRegistry;\n","import { dirname, isAbsolute, resolve, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { require as tsxRequire } from 'tsx/cjs/api';\nimport { NodeRegistry } from '../engine/registry';\nimport type { NodeDefinition } from '../node/types';\n\nimport type {\n JsonValue,\n ProjectSetupDefinition,\n ResolvedExecutionProject,\n TestFileSelection,\n TestTagSelection,\n} from '@midscene/core/internal/test-runner';\nexport type {\n JsonPrimitive,\n JsonValue,\n ProjectSetupContext,\n ProjectSetupDefinition,\n ProjectTeardown,\n ProjectTeardownContext,\n ResolvedExecutionProject,\n TestFileSelection,\n TestTagSelection,\n} from '@midscene/core/internal/test-runner';\nimport type { ExecutionProjectDefinition as CoreExecutionProjectDefinition } from '@midscene/core/internal/test-runner';\n\nexport type ExecutionProjectDefinition<TContext = unknown> = Omit<\n CoreExecutionProjectDefinition<TContext>,\n 'nodes'\n> & {\n nodes?: readonly NodeDefinition<any, any, TContext>[];\n};\n\nexport interface TestOptions {\n maxConcurrency?: number;\n bail?: number;\n testTimeout?: number;\n}\n\nexport interface ResolvedTestOptions {\n maxConcurrency: number;\n bail: number;\n testTimeout: number;\n}\n\nexport interface TestOutputDefinition {\n reportDir?: string;\n}\n\nexport interface ResolvedTestOutputDefinition {\n reportDir: string;\n}\n\nconst projectIdFromIndex = (index: number): string => `project-${index}`;\n\nexport interface TestProjectDefinition<TContext = undefined> {\n setup?: ProjectSetupDefinition<TContext>;\n projects?: readonly ExecutionProjectDefinition<TContext>[];\n test?: TestOptions;\n output?: TestOutputDefinition;\n nodes?: readonly NodeDefinition<any, any, TContext>[];\n}\n\nexport interface LoadedExecutionProject<TProjectContext = unknown>\n extends ResolvedExecutionProject<TProjectContext> {\n /** Effective Nodes: globals plus project-local overrides. */\n readonly nodes: NodeRegistry;\n}\n\nexport interface LoadedTestProject<TContext = undefined> {\n projects: readonly LoadedExecutionProject<TContext>[];\n hasExplicitProjects: boolean;\n test: ResolvedTestOptions;\n output: ResolvedTestOutputDefinition;\n nodes: NodeRegistry;\n resolveNode(name: string): NodeDefinition<any, any, TContext> | undefined;\n}\n\nexport const defineTestProject = <TContext = undefined>(\n definition: TestProjectDefinition<TContext>,\n): TestProjectDefinition<TContext> => definition;\n\nexport const defineProjectSetup = <TProjectContext>(\n definition: ProjectSetupDefinition<TProjectContext>,\n): ProjectSetupDefinition<TProjectContext> => definition;\n\nconst getDefaultExport = (loaded: unknown, absolutePath: string): unknown => {\n if (typeof loaded === 'object' && loaded !== null && 'default' in loaded) {\n const defaultExport = (loaded as { default: unknown }).default;\n if (\n typeof defaultExport === 'object' &&\n defaultExport !== null &&\n '__esModule' in defaultExport\n ) {\n if ('default' in defaultExport) {\n return (defaultExport as { default: unknown }).default;\n }\n throw new TypeError(\n `Midscene config \"${absolutePath}\" must have a default export.`,\n );\n }\n return defaultExport;\n }\n throw new TypeError(\n `Midscene config \"${absolutePath}\" must have a default export.`,\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst rejectUnknownKeys = (\n value: Record<string, unknown>,\n allowedKeys: readonly string[],\n label: string,\n): void => {\n const allowed = new Set(allowedKeys);\n const unknown = Object.keys(value).find((key) => !allowed.has(key));\n if (unknown) {\n throw new TypeError(\n `Midscene config ${label}.${unknown} is not supported.`,\n );\n }\n};\n\nconst isAbsolutePattern = (pattern: string): boolean =>\n isAbsolute(pattern) ||\n /^[A-Za-z]:[\\\\/]/.test(pattern) ||\n pattern.startsWith('\\\\\\\\');\n\nconst validatePatterns = (\n value: unknown,\n field: 'include' | 'exclude',\n label = 'files',\n allowEmptyInclude = false,\n): readonly string[] => {\n if (!Array.isArray(value)) {\n throw new TypeError(`Midscene config ${label}.${field} must be an array.`);\n }\n if (field === 'include' && value.length === 0 && !allowEmptyInclude) {\n throw new TypeError(\n `Midscene config ${label}.include must be a non-empty array.`,\n );\n }\n\n return value.map((pattern, index) => {\n if (typeof pattern !== 'string' || pattern.trim().length === 0) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be a non-empty string.`,\n );\n }\n if (isAbsolutePattern(pattern)) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be relative to the project root.`,\n );\n }\n if (pattern.split(/[\\\\/]/).includes('..')) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must not contain a \"..\" path segment.`,\n );\n }\n if (pattern.includes('\\\\')) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must use POSIX path separators (/).`,\n );\n }\n if (pattern.startsWith('!')) {\n if (field === 'include') {\n throw new TypeError(\n `Midscene config ${label}.include[${index}] must not be a negated pattern. Use files.exclude instead.`,\n );\n }\n throw new TypeError(\n `Midscene config ${label}.exclude[${index}] must not be a negated pattern.`,\n );\n }\n return pattern;\n });\n};\n\nexport const validateTestFileSelection = (\n value: unknown,\n label = 'files',\n): TestFileSelection | undefined => {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(value, ['include', 'exclude'], label);\n const include = validatePatterns(value.include, 'include', label);\n const exclude =\n value.exclude === undefined\n ? undefined\n : validatePatterns(value.exclude, 'exclude', label);\n return Object.freeze({\n include: Object.freeze(include),\n ...(exclude ? { exclude: Object.freeze(exclude) } : {}),\n });\n};\n\nconst validateTagList = (\n value: unknown,\n field: 'include' | 'exclude',\n label: string,\n): readonly string[] => {\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new TypeError(`Midscene config ${label}.${field} must be an array.`);\n }\n return value.map((tag, index) => {\n if (typeof tag !== 'string' || tag.trim().length === 0) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be a non-empty string.`,\n );\n }\n return tag;\n });\n};\n\nconst validateTagSelection = (\n value: unknown,\n label: string,\n): Readonly<Required<TestTagSelection>> => {\n if (value === undefined) return Object.freeze({ include: [], exclude: [] });\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n return Object.freeze({\n include: Object.freeze(validateTagList(value.include, 'include', label)),\n exclude: Object.freeze(validateTagList(value.exclude, 'exclude', label)),\n });\n};\n\nfunction assertJsonValue(\n value: unknown,\n path: string,\n seen: Set<unknown>,\n): asserts value is JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return;\n }\n if (typeof value === 'number') {\n if (Number.isFinite(value)) return;\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (typeof value !== 'object' || value === undefined) {\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null\n ) {\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (seen.has(value)) {\n throw new TypeError(`Midscene config ${path} must not contain cycles.`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n assertJsonValue(item, `${path}[${index}]`, seen),\n );\n } else {\n for (const [key, child] of Object.entries(value)) {\n assertJsonValue(child, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nconst deepFreezeJson = <T extends JsonValue>(value: T): T => {\n if (typeof value === 'object' && value !== null) {\n for (const child of Object.values(value)) deepFreezeJson(child);\n Object.freeze(value);\n }\n return value;\n};\n\nconst validateVariables = (\n value: unknown,\n label: string,\n): Readonly<Record<string, JsonValue>> => {\n if (value === undefined) return Object.freeze({});\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n assertJsonValue(value, label, new Set());\n return deepFreezeJson(value as Record<string, JsonValue>);\n};\n\nconst validateSetup = <TSetup>(\n value: unknown,\n label: string,\n): TSetup | undefined => {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(value, ['name', 'setup'], label);\n if (typeof value.name !== 'string' || value.name.trim().length === 0) {\n throw new TypeError(`Midscene config ${label}.name must be non-empty.`);\n }\n if (typeof value.setup !== 'function') {\n throw new TypeError(`Midscene config ${label}.setup must be a function.`);\n }\n return value as unknown as TSetup;\n};\n\nconst validatePositiveInteger = (\n value: unknown,\n fallback: number,\n label: string,\n): number => {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new TypeError(`Midscene config ${label} must be a positive integer.`);\n }\n return value as number;\n};\n\nconst validateNonNegativeInteger = (\n value: unknown,\n fallback: number,\n label: string,\n): number => {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || (value as number) < 0) {\n throw new TypeError(\n `Midscene config ${label} must be a non-negative integer.`,\n );\n }\n return value as number;\n};\n\nconst validateExecutionProjects = <TProjectContext>(\n value: unknown,\n defaultSetup: unknown,\n globalNodes: NodeRegistry,\n): {\n projects: readonly LoadedExecutionProject<TProjectContext>[];\n hasExplicitProjects: boolean;\n} => {\n if (value === undefined) {\n const setup = validateSetup<ProjectSetupDefinition<TProjectContext>>(\n defaultSetup,\n 'setup',\n );\n return {\n hasExplicitProjects: false,\n projects: Object.freeze([\n Object.freeze({\n projectId: projectIdFromIndex(0),\n name: 'default',\n ...(setup ? { setup } : {}),\n tags: Object.freeze({ include: [], exclude: [] }),\n retry: 0,\n variables: Object.freeze({}),\n nodes: new NodeRegistry(globalNodes.definitions()),\n }),\n ]),\n };\n }\n if (defaultSetup !== undefined) {\n throw new TypeError(\n 'Midscene config setup cannot be used together with projects. Move setup to projects[].setup.',\n );\n }\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(\n 'Midscene config projects must be a non-empty array when declared.',\n );\n }\n const names = new Set<string>();\n const projects = value.map((candidate, index) => {\n const label = `projects[${index}]`;\n if (!isRecord(candidate)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(\n candidate,\n ['name', 'setup', 'nodes', 'files', 'tags', 'retry', 'variables'],\n label,\n );\n if (\n typeof candidate.name !== 'string' ||\n candidate.name.trim().length === 0\n ) {\n throw new TypeError(`Midscene config ${label}.name must be non-empty.`);\n }\n if (names.has(candidate.name)) {\n throw new TypeError(\n `Midscene config project name \"${candidate.name}\" must be unique.`,\n );\n }\n names.add(candidate.name);\n const files = validateTestFileSelection(candidate.files, `${label}.files`);\n if (candidate.nodes !== undefined && !Array.isArray(candidate.nodes)) {\n throw new TypeError(`Midscene config ${label}.nodes must be an array.`);\n }\n const localNodes = new NodeRegistry(\n candidate.nodes as NodeDefinition[] | undefined,\n );\n const nodes = new NodeRegistry([\n ...globalNodes.definitions().filter((node) => !localNodes.has(node.name)),\n ...localNodes.definitions(),\n ]);\n return Object.freeze({\n projectId: projectIdFromIndex(index),\n name: candidate.name,\n nodes,\n ...(files ? { files } : {}),\n tags: validateTagSelection(candidate.tags, `${label}.tags`),\n retry: validateNonNegativeInteger(candidate.retry, 0, `${label}.retry`),\n variables: validateVariables(candidate.variables, `${label}.variables`),\n ...(candidate.setup === undefined\n ? {}\n : {\n setup: validateSetup<ProjectSetupDefinition<TProjectContext>>(\n candidate.setup,\n `${label}.setup`,\n )!,\n }),\n });\n });\n return { projects: Object.freeze(projects), hasExplicitProjects: true };\n};\n\nconst validateTestOptions = (value: unknown): ResolvedTestOptions => {\n if (value !== undefined && !isRecord(value)) {\n throw new TypeError('Midscene config test must be an object.');\n }\n const candidate = value ?? {};\n return Object.freeze({\n maxConcurrency: validatePositiveInteger(\n (candidate as Record<string, unknown>).maxConcurrency,\n 1,\n 'test.maxConcurrency',\n ),\n bail: validateNonNegativeInteger(\n (candidate as Record<string, unknown>).bail,\n 0,\n 'test.bail',\n ),\n testTimeout: validatePositiveInteger(\n (candidate as Record<string, unknown>).testTimeout,\n 120_000,\n 'test.testTimeout',\n ),\n });\n};\n\nconst validateOutputPath = (\n value: unknown,\n fallback: string,\n label: string,\n): string => {\n if (value === undefined) return fallback;\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new TypeError(`Midscene config ${label} must be non-empty.`);\n }\n return value;\n};\n\nconst validateOutput = (value: unknown): ResolvedTestOutputDefinition => {\n if (value !== undefined && !isRecord(value)) {\n throw new TypeError('Midscene config output must be an object.');\n }\n const candidate = (value ?? {}) as Record<string, unknown>;\n rejectUnknownKeys(candidate, ['reportDir'], 'output');\n return Object.freeze({\n reportDir: validateOutputPath(\n candidate.reportDir,\n './midscene_run/report',\n 'output.reportDir',\n ),\n });\n};\n\nconst validateTestProjectDefinition = <TContext>(\n definition: unknown,\n): LoadedTestProject<TContext> => {\n if (!isRecord(definition)) {\n throw new TypeError('Midscene config must default export an object.');\n }\n if (definition.nodes !== undefined && !Array.isArray(definition.nodes)) {\n throw new TypeError('Midscene config nodes must be an array.');\n }\n if ('setupWorkflow' in definition) {\n throw new TypeError(\n 'Midscene config setupWorkflow is no longer supported. Use setup or projects[].setup instead.',\n );\n }\n if ('setupDocument' in definition) {\n throw new TypeError(\n 'Midscene config setupDocument is not supported. Use setup or projects[].setup for resources, and beforeAll/afterAll for document lifecycle steps.',\n );\n }\n if ('root' in definition) {\n throw new TypeError(\n 'Midscene config root is not supported. Pass the Test Project directory to midscene-test instead.',\n );\n }\n if ('files' in definition) {\n throw new TypeError(\n 'Midscene config files is not supported at the root. Move it to projects[].files.',\n );\n }\n if ('testRunner' in definition) {\n throw new TypeError(\n 'Midscene config testRunner is not supported. Rename it to test.',\n );\n }\n rejectUnknownKeys(\n definition,\n ['setup', 'projects', 'test', 'output', 'nodes'],\n 'root',\n );\n const nodes = new NodeRegistry(\n definition.nodes as NodeDefinition[] | undefined,\n );\n const resolvedProjects = validateExecutionProjects<TContext>(\n definition.projects,\n definition.setup,\n nodes,\n );\n return {\n ...resolvedProjects,\n test: validateTestOptions(definition.test),\n output: validateOutput(definition.output),\n nodes,\n resolveNode: (name) =>\n nodes.get(name) as NodeDefinition<any, any, TContext> | undefined,\n };\n};\n\nconst assertSupportedConfig = (absolutePath: string): '.ts' | '.mjs' => {\n if (!absolutePath.endsWith('.ts') && !absolutePath.endsWith('.mjs')) {\n const extension = absolutePath.match(/(\\.[^./\\\\]+)$/)?.[1] ?? '(none)';\n throw new TypeError(\n `Unsupported Midscene config extension: ${extension}. Supported extensions: .ts, .mjs.`,\n );\n }\n return absolutePath.endsWith('.mjs') ? '.mjs' : '.ts';\n};\n\nconst canRetryWithCjsLoader = (error: unknown): error is Error => {\n if (!(error instanceof Error)) return false;\n const errorCode = (error as Error & { code?: string }).code;\n return (\n (error instanceof SyntaxError &&\n /^Unexpected (?:identifier|reserved word|token)/.test(error.message)) ||\n errorCode === 'ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX' ||\n (errorCode === 'ERR_UNKNOWN_FILE_EXTENSION' &&\n /^Unknown file extension\\b/.test(error.message))\n );\n};\n\nexport async function loadTestProject<TContext = undefined>(\n configPath?: string,\n): Promise<LoadedTestProject<TContext>> {\n if (!configPath) {\n return validateTestProjectDefinition<TContext>({\n nodes: [],\n });\n }\n\n const absolutePath = resolve(configPath);\n const extension = assertSupportedConfig(absolutePath);\n let loaded: unknown;\n try {\n if (extension === '.mjs') {\n loaded = await import(pathToFileURL(absolutePath).href);\n } else {\n // Select tsx's ESM entry even when this loader is built as CommonJS.\n // Its CommonJS entry can resolve the async loader relative to the wrong directory.\n const { tsImport } = await import('tsx/esm/api');\n loaded = await tsImport(pathToFileURL(absolutePath).href, {\n parentURL: pathToFileURL(`${dirname(absolutePath)}${sep}`).href,\n tsconfig: false,\n });\n }\n } catch (error) {\n try {\n if (extension === '.mjs' || !canRetryWithCjsLoader(error)) throw error;\n loaded = tsxRequire(absolutePath, pathToFileURL(absolutePath));\n } catch (fallbackError) {\n const message =\n fallbackError instanceof Error ? `: ${fallbackError.message}` : '';\n throw new Error(\n `Failed to load Midscene config \"${absolutePath}\"${message}`,\n { cause: fallbackError },\n );\n }\n }\n\n return validateTestProjectDefinition<TContext>(\n getDefaultExport(loaded, absolutePath),\n );\n}\n","import { createHash } from 'node:crypto';\n\n/** Internal invocation identity keeps repeated legacy files distinct. */\nexport const createCaseInvocationId = (\n projectId: string,\n sourcePath: string,\n caseIndex: number,\n invocationIndex = 0,\n): string =>\n createHash('sha256')\n .update(\n JSON.stringify([\n projectId,\n sourcePath,\n caseIndex,\n ...(invocationIndex ? [invocationIndex] : []),\n ]),\n )\n .digest('hex');\n\nexport const createDocumentInvocationId = (\n projectId: string,\n sourcePath: string,\n invocationIndex = 0,\n): string =>\n createHash('sha256')\n .update(\n JSON.stringify([\n projectId,\n sourcePath,\n ...(invocationIndex ? [invocationIndex] : []),\n ]),\n )\n .digest('hex');\n","import {\n type ResolveNodeForNormalization,\n normalizeStep as coreNormalizeStep,\n normalizeSteps as coreNormalizeSteps,\n} from '@midscene/core/internal/test-runner';\nimport type { NormalizedStep } from './types';\nexport type { ResolveNodeForNormalization } from '@midscene/core/internal/test-runner';\n\nexport const normalizeStep: (\n value: unknown,\n index?: number,\n resolveNode?: ResolveNodeForNormalization,\n) => NormalizedStep = coreNormalizeStep;\nexport const normalizeSteps: (\n values: unknown,\n resolveNode?: ResolveNodeForNormalization,\n) => NormalizedStep[] = coreNormalizeSteps;\n","import type { TestRunReportValue } from '@midscene/core';\nimport {\n isReportSecretKey,\n sanitizeReportText,\n} from '@midscene/core/internal/test-runner';\nimport { JSON_SCHEMA, load } from 'js-yaml';\n\ninterface SourceNode {\n start: number;\n end: number;\n value: unknown;\n children: SourceNode[];\n}\n\n/** Keep author formatting while redacting values by parsed YAML keys, including aliases. */\nexport function parseWorkflowSource(source: string): {\n parsed: unknown;\n sourceYaml: TestRunReportValue;\n} {\n const stack: SourceNode[] = [];\n const nodes: SourceNode[] = [];\n const sensitiveNodes = new Set<SourceNode>();\n const sensitiveValues = new Set<unknown>();\n const redactedPaths = new Set<string>();\n // js-yaml removes the BOM before reporting source positions.\n const sourceOffset = source.charCodeAt(0) === 0xfeff ? 1 : 0;\n const parsed = load(source, {\n schema: JSON_SCHEMA,\n listener(event, state) {\n if (event === 'open') {\n stack.push({\n start: state.position + sourceOffset,\n end: 0,\n value: null,\n children: [],\n });\n return;\n }\n const node = stack.pop()!;\n node.end = state.position + sourceOffset;\n node.value = state.result;\n stack.at(-1)?.children.push(node);\n nodes.push(node);\n if (state.kind !== 'mapping') return;\n for (let index = 0; index < node.children.length; index += 2) {\n const key = node.children[index].value;\n const value = node.children[index + 1];\n if (typeof key !== 'string' || !isReportSecretKey(key) || !value)\n continue;\n sensitiveNodes.add(value);\n if (value.value !== null) sensitiveValues.add(value.value);\n redactedPaths.add(`$..[${JSON.stringify(key)}]`);\n }\n },\n });\n // Redact the definition as well when a secret value refers to a YAML anchor.\n const ranges = nodes\n .filter(\n (node) => sensitiveNodes.has(node) || sensitiveValues.has(node.value),\n )\n .sort((left, right) => left.start - right.start || right.end - left.end);\n let offset = 0;\n let redacted = '';\n for (const range of ranges) {\n if (range.start < offset) continue;\n const text = source.slice(range.start, range.end);\n const leading = text.match(/^\\s*/)?.[0] ?? '';\n const trailing = text.slice(leading.length).match(/\\s*$/)?.[0] ?? '';\n redacted += `${source.slice(offset, range.start)}${leading}\"[REDACTED]\"${trailing}`;\n offset = range.end;\n }\n redacted += source.slice(offset);\n const value = sanitizeReportText(redacted, 64 * 1024);\n return {\n parsed,\n sourceYaml: {\n value,\n ...(redactedPaths.size ? { redactedPaths: [...redactedPaths] } : {}),\n ...(value !== redacted ? { truncatedPaths: ['$'] } : {}),\n },\n };\n}\n","import type { JsonValue } from '../cli/test-project';\nimport { WorkflowParseError } from '../errors';\n\nexport interface VariableResolutionLocation {\n projectName: string;\n sourcePath: string;\n phase: 'beforeAll' | 'beforeEach' | 'steps' | 'afterEach' | 'afterAll';\n stepIndex: number;\n caseIndex?: number;\n}\n\nexport interface ResolveWorkflowVariablesOptions {\n variables?: Readonly<Record<string, JsonValue>>;\n env?: Readonly<NodeJS.ProcessEnv>;\n location: VariableResolutionLocation;\n}\n\nconst interpolationExpression =\n /\\$\\{\\{([A-Za-z_][A-Za-z0-9_]*)\\}\\}|\\$\\{([^{}]+)\\}/g;\nconst exactEnvExpression = /^\\$\\{\\{([A-Za-z_][A-Za-z0-9_]*)\\}\\}$/;\nconst exactProjectExpression = /^\\$\\{([^{}]+)\\}$/;\n\nconst missingVariable = (\n kind: 'environment' | 'project',\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): never => {\n throw new WorkflowParseError(\n `Undefined ${kind} variable \"${name}\" in ${options.location.sourcePath}.`,\n { ...options.location, variable: name, variableKind: kind },\n );\n};\n\nconst projectVariable = (\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): JsonValue => {\n if (!Object.hasOwn(options.variables ?? {}, name)) {\n return missingVariable('project', name, options);\n }\n return options.variables![name];\n};\n\nconst environmentVariable = (\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): string => {\n const value = options.env?.[name];\n if (value === undefined) return missingVariable('environment', name, options);\n return value;\n};\n\nconst interpolationValue = (\n name: string,\n value: JsonValue,\n options: ResolveWorkflowVariablesOptions,\n): string => {\n if (typeof value === 'object' && value !== null) {\n throw new WorkflowParseError(\n `Project variable \"${name}\" must be a primitive when embedded in a string.`,\n {\n ...options.location,\n variable: name,\n variableKind: 'project',\n },\n );\n }\n return String(value);\n};\n\nconst resolveString = (\n value: string,\n options: ResolveWorkflowVariablesOptions,\n): JsonValue => {\n const exactEnv = exactEnvExpression.exec(value);\n if (exactEnv) return environmentVariable(exactEnv[1], options);\n const exactProject = exactProjectExpression.exec(value);\n if (exactProject) return projectVariable(exactProject[1], options);\n\n return value.replace(\n interpolationExpression,\n (_match, environmentName: string | undefined, projectName: string) =>\n environmentName\n ? environmentVariable(environmentName, options)\n : interpolationValue(\n projectName,\n projectVariable(projectName, options),\n options,\n ),\n );\n};\n\nexport const resolveWorkflowVariables = (\n value: unknown,\n options: ResolveWorkflowVariablesOptions,\n): unknown => {\n if (typeof value === 'string') return resolveString(value, options);\n if (Array.isArray(value)) {\n return value.map((child) => resolveWorkflowVariables(child, options));\n }\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [\n key,\n resolveWorkflowVariables(child, options),\n ]),\n );\n }\n return value;\n};\n","import { readFileSync } from 'node:fs';\nimport { sep } from 'node:path';\nimport { classifyWorkflowDocumentFormat } from '@midscene/core/internal/test-runner';\nimport type { JsonValue } from '../cli/test-project';\nimport { WorkflowParseError } from '../errors';\nimport type { NodeDefinition } from '../node/types';\nimport {\n createCaseInvocationId,\n createDocumentInvocationId,\n} from './identifiers';\nimport { normalizeSteps } from './normalize';\nimport { parseWorkflowSource } from './source';\nimport type {\n CollectedCase,\n CollectedWorkflowDocument,\n WorkflowDocumentSource,\n} from './types';\nimport { resolveWorkflowVariables } from './variables';\n\nexport interface CollectWorkflowDocumentOptions {\n resolveNode(name: string): NodeDefinition<any, any> | undefined;\n variables?: Readonly<Record<string, JsonValue>>;\n env?: Readonly<NodeJS.ProcessEnv>;\n}\n\nconst isMapping = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport class NativeWorkflowFormatError extends WorkflowParseError {\n readonly actualFormat: 'legacy' | 'legacy-batch' | 'mixed';\n\n constructor(\n actualFormat: 'legacy' | 'legacy-batch' | 'mixed',\n sourcePath: string,\n ) {\n super(\n actualFormat === 'legacy'\n ? `Legacy tasks/flow YAML is not supported by midscene-test: ${sourcePath}. Run it with \\`midscene ${sourcePath}\\`, or migrate the file to cases/steps.`\n : actualFormat === 'legacy-batch'\n ? `Legacy YAML batch configuration is not a midscene-test workflow document: ${sourcePath}. Run it with \\`midscene --config ${sourcePath}\\`, or migrate it to a native project config.`\n : `A workflow file cannot mix legacy tasks/flow with native cases/steps or lifecycle hooks: ${sourcePath}. Keep the formats in separate files and run each file with its matching command.`,\n { sourcePath, actualFormat, expectedFormat: 'native' },\n );\n this.actualFormat = actualFormat;\n }\n}\n\nconst rejectUnknownKeys = (\n value: Record<string, unknown>,\n allowed: readonly string[],\n label: string,\n) => {\n const allowedSet = new Set(allowed);\n const unknown = Object.keys(value).filter((key) => !allowedSet.has(key));\n if (unknown.length) {\n throw new WorkflowParseError(\n `${label} has unsupported field \"${unknown[0]}\".`,\n { field: unknown[0] },\n );\n }\n};\n\nexport const createCaseId = (\n projectId: string,\n sourcePath: string,\n caseIndex: number,\n): string => createCaseInvocationId(projectId, sourcePath, caseIndex);\n\nexport const createWorkflowDocumentId = (\n projectId: string,\n sourcePath: string,\n): string => createDocumentInvocationId(projectId, sourcePath);\n\nexport function collectWorkflowDocument(\n source: WorkflowDocumentSource,\n options: CollectWorkflowDocumentOptions,\n): CollectedWorkflowDocument {\n let snapshot: ReturnType<typeof parseWorkflowSource>;\n try {\n snapshot = parseWorkflowSource(readFileSync(source.absolutePath, 'utf8'));\n } catch (error) {\n throw new WorkflowParseError(\n `Failed to parse workflow document \"${source.sourcePath}\".`,\n { sourcePath: source.sourcePath },\n error,\n );\n }\n const { parsed, sourceYaml } = snapshot;\n\n if (!isMapping(parsed)) {\n throw new WorkflowParseError('Workflow document must be a mapping.');\n }\n const format = classifyWorkflowDocumentFormat(parsed);\n if (format === 'legacy' || format === 'legacy-batch' || format === 'mixed') {\n throw new NativeWorkflowFormatError(format, source.sourcePath);\n }\n rejectUnknownKeys(\n parsed,\n ['beforeAll', 'beforeEach', 'cases', 'afterEach', 'afterAll'],\n 'Workflow document',\n );\n if (!Array.isArray(parsed.cases) || parsed.cases.length === 0) {\n throw new WorkflowParseError(\n 'Workflow document must contain a non-empty cases array.',\n );\n }\n\n const sourcePath = source.sourcePath.split(sep).join('/');\n const resolveStepVariables = (\n step: ReturnType<typeof normalizeSteps>[number],\n phase: 'beforeAll' | 'beforeEach' | 'steps' | 'afterEach' | 'afterAll',\n stepIndex: number,\n caseIndex?: number,\n ) => ({\n ...step,\n templateInput: step.input,\n input: resolveWorkflowVariables(step.input, {\n variables: options.variables,\n env: options.env ?? process.env,\n location: {\n projectName: source.projectName ?? source.projectId,\n sourcePath,\n phase,\n stepIndex,\n ...(caseIndex === undefined ? {} : { caseIndex }),\n },\n }) as typeof step.input,\n });\n const normalizeLifecycle = (\n phase: 'beforeAll' | 'beforeEach' | 'afterEach' | 'afterAll',\n ) => {\n const value = parsed[phase];\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new WorkflowParseError(\n `Workflow document ${phase} must be an array.`,\n { phase },\n );\n }\n return normalizeSteps(value, options.resolveNode).map(\n (normalized, stepIndex) => {\n const resolved = options.resolveNode(normalized.node);\n if (!resolved) {\n throw new WorkflowParseError(\n `Workflow document ${phase} step ${stepIndex + 1} references unknown node \"${normalized.node}\".`,\n { phase, stepIndex, node: normalized.node },\n );\n }\n return resolveStepVariables(normalized, phase, stepIndex);\n },\n );\n };\n const lifecycle = {\n beforeAll: normalizeLifecycle('beforeAll'),\n beforeEach: normalizeLifecycle('beforeEach'),\n afterEach: normalizeLifecycle('afterEach'),\n afterAll: normalizeLifecycle('afterAll'),\n };\n const ids = new Set<string>();\n const cases: CollectedCase[] = parsed.cases.map((definition, caseIndex) => {\n if (!isMapping(definition)) {\n throw new WorkflowParseError(`Case ${caseIndex + 1} must be a mapping.`, {\n caseIndex,\n });\n }\n rejectUnknownKeys(\n definition,\n ['name', 'tags', 'steps'],\n `Case ${caseIndex + 1}`,\n );\n if (\n typeof definition.name !== 'string' ||\n definition.name.trim().length === 0\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} name must be a non-empty string.`,\n { caseIndex },\n );\n }\n if (!Array.isArray(definition.steps) || definition.steps.length === 0) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} steps must be a non-empty array.`,\n { caseIndex },\n );\n }\n const tags = definition.tags ?? [];\n if (\n !Array.isArray(tags) ||\n tags.some((tag) => typeof tag !== 'string' || tag.trim().length === 0)\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} tags must be an array of non-empty strings.`,\n { caseIndex },\n );\n }\n\n const steps = normalizeSteps(definition.steps, options.resolveNode).map(\n (normalized, stepIndex) => {\n if (!options.resolveNode(normalized.node)) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} step ${stepIndex + 1} references unknown node \"${normalized.node}\".`,\n { caseIndex, stepIndex, node: normalized.node },\n );\n }\n return resolveStepVariables(normalized, 'steps', stepIndex, caseIndex);\n },\n );\n const caseId = createCaseId(source.projectId, sourcePath, caseIndex);\n if (ids.has(caseId)) {\n throw new WorkflowParseError(`Case id collision: ${caseId}.`, {\n caseId,\n });\n }\n ids.add(caseId);\n\n return {\n caseId,\n projectId: source.projectId,\n sourcePath,\n caseIndex,\n definition: {\n name: definition.name,\n tags: tags as string[],\n steps,\n },\n };\n });\n\n return {\n documentId: createWorkflowDocumentId(source.projectId, sourcePath),\n projectId: source.projectId,\n sourcePath,\n sourceYaml,\n lifecycle,\n cases,\n } satisfies CollectedWorkflowDocument;\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, sep } from 'node:path';\nimport {\n WorkflowPublicationError,\n sanitizeReportError,\n} from '@midscene/core/internal/test-runner';\nimport type { CaseRunResult, WorkflowDocumentRunResult } from '../engine/types';\nimport type { PreparedExecutionProject } from './execution-plan';\nimport type { TestProjectCollectionError, TestProjectRunResult } from './types';\n\nconst writeJson = async (path: string, value: unknown) => {\n try {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, JSON.stringify(value, null, 2));\n } catch (error) {\n throw new WorkflowPublicationError('write-result', path, error);\n }\n};\n\nexport const writeTestRunPlan = (\n runDir: string,\n projects: readonly PreparedExecutionProject[],\n) =>\n writeJson(join(runDir, 'plan.json'), {\n schemaVersion: 1,\n createdAt: new Date().toISOString(),\n projects: projects.map((item) => ({\n projectId: item.project.projectId,\n name: item.project.name,\n documents: item.plans ?? [],\n })),\n });\n\nconst toPosix = (value: string): string => value.split(sep).join('/');\n\nexport const caseAttemptResultPath = (\n projectId: string,\n documentId: string,\n result: CaseRunResult,\n): string =>\n toPosix(\n join(\n projectId,\n 'documents',\n documentId,\n 'cases',\n result.caseId,\n `${result.runId}.json`,\n ),\n );\n\nexport const workflowDocumentResultPath = (\n result: WorkflowDocumentRunResult,\n): string =>\n toPosix(\n join(\n result.projectId,\n 'documents',\n result.documentId,\n result.attemptIndex === undefined\n ? 'document.json'\n : `${result.documentRunId}.json`,\n ),\n );\n\nexport const collectionErrorPath = (\n projectId: string,\n sourcePath: string,\n): string => {\n const id = createHash('sha256')\n .update(JSON.stringify([projectId, sourcePath]))\n .digest('hex');\n return toPosix(join(projectId, 'collection-errors', `${id}.json`));\n};\n\nexport const writeWorkflowDocumentResult = (\n runDir: string,\n result: WorkflowDocumentRunResult,\n) => {\n const { documentRunId: _documentRunId, ...persistedResult } = result;\n return writeJson(\n join(runDir, workflowDocumentResultPath(result)),\n persistedResult,\n );\n};\n\nexport const writeCaseAttemptResult = (\n runDir: string,\n projectId: string,\n documentId: string,\n result: CaseRunResult,\n) => {\n const { runId: attemptId, ...persistedResult } = result;\n return writeJson(\n join(runDir, caseAttemptResultPath(projectId, documentId, result)),\n {\n ...persistedResult,\n attemptId,\n },\n );\n};\n\nexport const writeCollectionError = (\n runDir: string,\n collectionError: TestProjectCollectionError,\n) => {\n return writeJson(\n join(\n runDir,\n collectionErrorPath(\n collectionError.projectId,\n collectionError.sourcePath,\n ),\n ),\n { kind: 'collection-error', ...collectionError },\n );\n};\n\nconst relativeToSummary = (summaryPath: string, target: string): string => {\n const value = relative(dirname(summaryPath), target);\n return toPosix(value || '.');\n};\n\nconst errorJson = sanitizeReportError;\n\nexport interface TestProjectResultFileOptions {\n projectRoot: string;\n configPath?: string;\n result: TestProjectRunResult;\n}\n\nexport const writeTestProjectRunResult = (\n options: TestProjectResultFileOptions,\n) => {\n const { result } = options;\n const fact = (path: string) => toPosix(path);\n\n return writeJson(result.summaryPath, {\n schemaVersion: result.schemaVersion,\n runId: result.runId,\n startedAt: result.startedAt,\n endedAt: result.endedAt,\n durationMs: result.durationMs,\n status: result.status,\n exitCode: result.exitCode,\n ...(result.errors?.length ? { errors: result.errors.map(errorJson) } : {}),\n projectRoot: options.projectRoot,\n ...(options.configPath ? { configPath: options.configPath } : {}),\n factsRoot: '.',\n plan: 'plan.json',\n ...(result.operationLog\n ? {\n operationLog: {\n ...result.operationLog,\n path: relativeToSummary(\n result.summaryPath,\n result.operationLog.path,\n ),\n },\n }\n : {}),\n reportDir: relativeToSummary(result.summaryPath, result.reportDir),\n ...(result.reportPath\n ? { report: relativeToSummary(result.summaryPath, result.reportPath) }\n : {}),\n ...(result.markdownPath\n ? { markdown: relativeToSummary(result.summaryPath, result.markdownPath) }\n : {}),\n summary: result.summary,\n projects: result.projects.map((project) => ({\n projectId: project.projectId,\n name: project.name,\n status: project.status,\n retry: project.retry,\n fileSelection: project.fileSelection,\n tagSelection: project.tagSelection,\n sourceCount: project.sourceCount,\n selectedCaseCount: project.selectedCaseCount,\n filteredCaseCount: project.filteredCaseCount,\n ...(project.lifecycle\n ? {\n lifecycle: {\n status: project.lifecycle.status,\n startedAt: project.lifecycle.startedAt,\n endedAt: project.lifecycle.endedAt,\n durationMs: project.lifecycle.durationMs,\n ...(project.lifecycle.cleanup\n ? { cleanup: project.lifecycle.cleanup }\n : {}),\n ...(project.lifecycle.pendingOperations\n ? { pendingOperations: project.lifecycle.pendingOperations }\n : {}),\n ...(project.lifecycle.setupError\n ? { setupError: errorJson(project.lifecycle.setupError) }\n : {}),\n ...(project.lifecycle.teardownErrors\n ? {\n teardownErrors:\n project.lifecycle.teardownErrors.map(errorJson),\n }\n : {}),\n },\n }\n : {}),\n cases: project.cases.map((outcome) => ({\n ...(outcome.documentRunId\n ? { documentRunId: outcome.documentRunId }\n : {}),\n documentId: outcome.documentId,\n caseId: outcome.caseId,\n sourcePath: outcome.sourcePath,\n caseIndex: outcome.caseIndex,\n name: outcome.name,\n status: outcome.status,\n ...(outcome.notRunReason ? { notRunReason: outcome.notRunReason } : {}),\n ...(outcome.attempts\n ? {\n attempts: outcome.attempts.map((attempt) => ({\n attemptId: attempt.runId,\n attemptIndex: attempt.attemptIndex,\n status: attempt.status,\n ...(attempt.cleanup ? { cleanup: attempt.cleanup } : {}),\n ...(attempt.pendingOperations\n ? { pendingOperations: attempt.pendingOperations }\n : {}),\n ...(attempt.executionStatus\n ? { executionStatus: attempt.executionStatus }\n : {}),\n ...(attempt.retryDecision\n ? { retryDecision: attempt.retryDecision }\n : {}),\n resultFile: fact(\n caseAttemptResultPath(\n project.projectId,\n outcome.documentId,\n attempt,\n ),\n ),\n ...(attempt.reportPaths?.length\n ? {\n reports: attempt.reportPaths.map((path) =>\n relativeToSummary(result.summaryPath, path),\n ),\n }\n : {}),\n })),\n }\n : {}),\n })),\n documents: project.documents.map((document) => ({\n documentId: document.documentId,\n ...(document.attemptIndex === undefined\n ? {}\n : {\n attemptIndex: document.attemptIndex,\n documentRunId: document.documentRunId,\n }),\n sourcePath: document.sourcePath,\n status: document.status,\n ...(document.cleanup ? { cleanup: document.cleanup } : {}),\n ...(document.pendingOperations\n ? { pendingOperations: document.pendingOperations }\n : {}),\n ...(document.executionStatus\n ? { executionStatus: document.executionStatus }\n : {}),\n ...(document.retryDecision\n ? { retryDecision: document.retryDecision }\n : {}),\n resultFile: fact(workflowDocumentResultPath(document)),\n ...(document.reportPaths?.length\n ? {\n reports: document.reportPaths.map((path) =>\n relativeToSummary(result.summaryPath, path),\n ),\n }\n : {}),\n })),\n collectionErrors: project.collectionErrors.map((error) => ({\n sourcePath: error.sourcePath,\n errorFile: fact(collectionErrorPath(error.projectId, error.sourcePath)),\n })),\n })),\n });\n};\n","import { readdirSync } from 'node:fs';\nimport { join, relative, resolve, sep } from 'node:path';\nimport type { CollectedWorkflowDocument } from '@midscene/core/internal/test-runner';\nimport { buildTestRunReportPlan } from '@midscene/core/internal/test-runner';\nimport { globSync } from 'tinyglobby';\nimport { WorkflowError, WorkflowParseError } from '../errors';\nimport { collectWorkflowDocument } from '../parser/collect';\nimport type {\n PreparedDocumentInvocation,\n PreparedExecutionProject,\n ProjectPreparationOptions,\n} from './execution-plan';\nimport { writeCollectionError } from './result-store';\nimport type { LoadedExecutionProject, TestFileSelection } from './test-project';\nimport { validateTestFileSelection } from './test-project';\nimport type { TestProjectCollectionError } from './types';\n\nexport const CONFIG_NAMES = [\n 'midscene.config.ts',\n 'midscene.config.mjs',\n] as const;\nconst CONFIG_PREFIX = 'midscene.config.';\nconst ALWAYS_IGNORED_PATTERNS = [\n '.git/**',\n '.midscene/**',\n 'midscene_run/**',\n 'node_modules/**',\n '**/.git/**',\n '**/.midscene/**',\n '**/midscene_run/**',\n '**/node_modules/**',\n];\n\nexport const DEFAULT_TEST_FILE_SELECTION: TestFileSelection = {\n include: ['**/*.{yaml,yml}'],\n};\n\nconst toPosix = (value: string): string => value.split(sep).join('/');\n\nconst discoverResolvedTestFiles = (\n projectRoot: string,\n selection: TestFileSelection,\n): string[] => {\n const root = resolve(projectRoot);\n const match = (patterns: readonly string[]) =>\n globSync(patterns, {\n absolute: true,\n caseSensitiveMatch: false,\n cwd: root,\n dot: true,\n expandDirectories: false,\n followSymbolicLinks: false,\n ignore: [...ALWAYS_IGNORED_PATTERNS, ...(selection.exclude ?? [])],\n onlyFiles: true,\n }).filter((file) => /\\.ya?ml$/i.test(file));\n const files = match(selection.include);\n\n return [...new Set(files.map((file) => resolve(file)))].sort((a, b) => {\n const relativeA = toPosix(relative(root, a));\n const relativeB = toPosix(relative(root, b));\n return relativeA < relativeB ? -1 : relativeA > relativeB ? 1 : 0;\n });\n};\n\nexport const discoverTestFiles = (\n projectRoot: string,\n selection: TestFileSelection = DEFAULT_TEST_FILE_SELECTION,\n): string[] => {\n const normalized = validateTestFileSelection(selection);\n if (!normalized) throw new TypeError('Test file selection is required.');\n return discoverResolvedTestFiles(projectRoot, normalized);\n};\n\nexport const discoverTestConfig = (projectRoot: string): string | undefined => {\n const root = resolve(projectRoot);\n const candidates = readdirSync(root)\n .filter((name) => name.startsWith(CONFIG_PREFIX))\n .sort();\n const supported = candidates.filter((name) =>\n CONFIG_NAMES.includes(name as (typeof CONFIG_NAMES)[number]),\n );\n const unsupported = candidates.filter(\n (name) => !CONFIG_NAMES.includes(name as (typeof CONFIG_NAMES)[number]),\n );\n if (unsupported.length > 0) {\n throw new Error(\n [\n `Unsupported or conflicting Midscene configs found in ${root}:`,\n ...candidates.map((name) => `- ${name}`),\n `Only ${CONFIG_NAMES.join(' and ')} are supported.`,\n ].join('\\n'),\n );\n }\n if (supported.length > 1) {\n throw new Error(\n [\n `Multiple Midscene configs found in ${root}:`,\n ...supported.map((name) => `- ${name}`),\n 'Pass --config <path> to select one explicitly.',\n ].join('\\n'),\n );\n }\n return supported[0] ? join(root, supported[0]) : undefined;\n};\n\nconst asCollectionError = (\n projectId: string,\n projectName: string,\n sourcePath: string,\n error: unknown,\n): TestProjectCollectionError => ({\n projectId,\n projectName,\n sourcePath,\n error:\n error instanceof WorkflowError\n ? error\n : new WorkflowParseError(\n `Failed to collect workflow document \"${sourcePath}\": ${\n error instanceof Error ? error.message : String(error)\n }`,\n { projectName, sourcePath },\n error,\n ),\n});\n\nexport const matchesTags = (\n tags: readonly string[],\n selection: LoadedExecutionProject['tags'],\n): boolean => {\n if (selection.exclude.some((tag) => tags.includes(tag))) return false;\n return (\n selection.include.length === 0 ||\n selection.include.some((tag) => tags.includes(tag))\n );\n};\n\nconst filterDocumentCases = (\n document: CollectedWorkflowDocument,\n project: LoadedExecutionProject,\n): { document?: CollectedWorkflowDocument; filtered: number } => {\n const cases = document.cases.filter((item) =>\n matchesTags(item.definition.tags ?? [], project.tags),\n );\n const filtered = document.cases.length - cases.length;\n return cases.length === 0\n ? { filtered }\n : { document: { ...document, cases }, filtered };\n};\n\nexport const selectProjects = <TProjectContext>(\n projects: readonly LoadedExecutionProject<TProjectContext>[],\n names: readonly string[] | undefined,\n): readonly LoadedExecutionProject<TProjectContext>[] => {\n if (!names || names.length === 0) return projects;\n const requested = new Set(names);\n if (requested.size !== names.length) {\n throw new Error('Each --project name may only be specified once.');\n }\n const known = new Set(projects.map((project) => project.name));\n const unknown = names.find((name) => !known.has(name));\n if (unknown) throw new Error(`Unknown Midscene project: ${unknown}`);\n return projects.filter((project) => requested.has(project.name));\n};\n\n/** Prepare and validate every document before any Project resource is acquired. */\nexport async function prepareProject(\n project: LoadedExecutionProject,\n projectRoot: string,\n runDir: string,\n defaultTimeoutMs: number,\n options: ProjectPreparationOptions = {},\n): Promise<PreparedExecutionProject> {\n const platform = options.platform?.trim();\n const fileSelection = project.files ?? DEFAULT_TEST_FILE_SELECTION;\n const prerequisiteFile = options.prerequisiteFile\n ? resolve(options.prerequisiteFile)\n : undefined;\n const mainFiles =\n options.files ?? discoverResolvedTestFiles(projectRoot, fileSelection);\n const files = [\n ...(prerequisiteFile ? [prerequisiteFile] : []),\n ...mainFiles.filter((file) => file !== prerequisiteFile),\n ];\n const occurrences = new Map<string, number>();\n const sources = files.map((absolutePath) => {\n const invocationIndex = occurrences.get(absolutePath) ?? 0;\n occurrences.set(absolutePath, invocationIndex + 1);\n return {\n projectId: project.projectId,\n projectName: project.name,\n sourcePath: toPosix(relative(projectRoot, absolutePath)),\n absolutePath,\n invocationIndex,\n };\n });\n const collectionErrors: TestProjectCollectionError[] = [];\n const invocations: PreparedDocumentInvocation[] = [];\n const plans: import('@midscene/core').TestRunReportDocumentPlan[] = [];\n let filteredCaseCount = 0;\n\n if (sources.length === 0) {\n const error = asCollectionError(\n project.projectId,\n project.name,\n '<project>',\n new WorkflowParseError(\n `No workflow YAML files found for project \"${project.name}\" in ${projectRoot}.`,\n { projectName: project.name, projectRoot },\n ),\n );\n collectionErrors.push(error);\n await writeCollectionError(runDir, error);\n }\n\n for (const source of sources) {\n try {\n const collected = await options.collectDocument?.(source, project);\n if (collected) {\n filteredCaseCount += collected.filteredCaseCount;\n if (collected.invocation) {\n const plan = buildTestRunReportPlan(collected.invocation.document, {\n defaultTimeoutMs: collected.invocation.defaultTimeoutMs,\n retry: collected.invocation.retry,\n });\n invocations.push({ ...collected.invocation, plan });\n plans.push(plan);\n }\n continue;\n }\n const document = collectWorkflowDocument(source, {\n resolveNode: project.nodes.get.bind(project.nodes),\n variables: project.variables,\n env: process.env,\n });\n const filtered =\n source.absolutePath === prerequisiteFile\n ? { document, filtered: 0 }\n : filterDocumentCases(document, project);\n const plan = buildTestRunReportPlan(document, {\n selectedCaseIds:\n filtered.document?.cases.map((item) => item.caseId) ?? [],\n defaultTimeoutMs,\n retry: { scope: 'case', count: project.retry },\n });\n plans.push(plan);\n filteredCaseCount += filtered.filtered;\n if (filtered.document)\n invocations.push({\n plan,\n document: filtered.document,\n retry: { scope: 'case', count: project.retry },\n defaultTimeoutMs,\n reportEnabled: true,\n bindings: { resolveNode: project.nodes.require.bind(project.nodes) },\n });\n } catch (error) {\n const collectionError = asCollectionError(\n project.projectId,\n project.name,\n source.sourcePath,\n error,\n );\n collectionErrors.push(collectionError);\n await writeCollectionError(runDir, collectionError);\n }\n }\n\n const documents = invocations.map((invocation) => invocation.document);\n const prerequisiteSource = sources.find(\n (source) => source.absolutePath === prerequisiteFile,\n );\n const prerequisiteDocument = documents.find(\n (document) => document.sourcePath === prerequisiteSource?.sourcePath,\n );\n return {\n project,\n ...(platform ? { platform } : {}),\n documentConcurrency: options.documentConcurrency ?? 1,\n ...(prerequisiteDocument\n ? { prerequisiteDocumentId: prerequisiteDocument.documentId }\n : {}),\n fileSelection,\n sources,\n documents,\n invocations,\n plans,\n collectionErrors,\n selectedCaseCount: documents.reduce(\n (total, document) => total + document.cases.length,\n 0,\n ),\n filteredCaseCount,\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { existsSync, mkdirSync, statSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { NativeWorkflowFormatError } from '../parser/collect';\nimport type {\n PreparedExecutionProject,\n PreparedTestRunPlan,\n TestProjectRunOptions,\n TestRunInput,\n} from './execution-plan';\nimport {\n discoverTestConfig,\n prepareProject,\n selectProjects,\n} from './project-preparation';\nimport { loadTestProject } from './test-project';\n\nconst padDatePart = (value: number): string => String(value).padStart(2, '0');\n\nexport const createTestRunId = (\n date = new Date(),\n uuid = randomUUID(),\n): string => {\n const timestamp = [\n date.getFullYear(),\n padDatePart(date.getMonth() + 1),\n padDatePart(date.getDate()),\n padDatePart(date.getHours()),\n padDatePart(date.getMinutes()),\n padDatePart(date.getSeconds()),\n ].join('');\n return `${timestamp}-${uuid.slice(0, 8)}`;\n};\n\nconst assertDirectory = (path: string, label: string): void => {\n if (!existsSync(path) || !statSync(path).isDirectory()) {\n throw new Error(`${label} does not exist or is not a directory: ${path}`);\n }\n};\n\nconst resolveRunInput = (options: TestProjectRunOptions): TestRunInput => {\n const cwd = resolve(options.cwd ?? process.cwd());\n assertDirectory(cwd, 'Test working directory');\n const inputPath = options.projectRoot\n ? resolve(cwd, options.projectRoot)\n : undefined;\n const singleFile =\n inputPath && existsSync(inputPath) && statSync(inputPath).isFile()\n ? inputPath\n : undefined;\n if (singleFile && !/\\.ya?ml$/i.test(singleFile))\n throw new Error(\n `Test input must be a YAML file or project directory: ${singleFile}`,\n );\n const cliProjectRoot = singleFile ? dirname(singleFile) : inputPath;\n if (cliProjectRoot) assertDirectory(cliProjectRoot, 'Test project directory');\n const projectRoot = cliProjectRoot ?? cwd;\n return {\n cwd,\n projectRoot,\n configSearchRoot: projectRoot,\n ...(singleFile ? { singleFile } : {}),\n };\n};\n\n/** Composition boundary only: execution receives no raw input syntax or host options. */\nexport async function prepareTestRun(\n options: TestProjectRunOptions,\n): Promise<PreparedTestRunPlan> {\n const startedAt = new Date();\n const runId = createTestRunId(startedAt);\n const input = resolveRunInput(options);\n const configPath = options.configPath\n ? resolve(input.configSearchRoot, options.configPath)\n : discoverTestConfig(input.configSearchRoot);\n if (options.configPath && /\\.ya?ml$/i.test(configPath!)) {\n throw new Error(\n `midscene-test --config only accepts a native TypeScript or JavaScript project config: ${configPath}. Run legacy batch YAML with \\`midscene --config ${options.configPath}\\`.`,\n );\n }\n if (options.configPath && !existsSync(configPath!))\n throw new Error(`Midscene config does not exist: ${configPath}`);\n const definition = await loadTestProject<unknown>(configPath);\n const resultDir = options.resultDir\n ? resolve(input.cwd, options.resultDir)\n : join(input.projectRoot, '.midscene', 'test-results');\n const runDir = join(resultDir, runId);\n const summaryPath = join(runDir, 'summary.json');\n const reportDir = resolve(input.projectRoot, definition.output.reportDir);\n mkdirSync(resultDir, { recursive: true });\n mkdirSync(runDir);\n const projects: PreparedExecutionProject[] = [];\n for (const project of selectProjects(\n definition.projects,\n options.projectNames,\n ))\n projects.push(\n await prepareProject(\n project,\n input.projectRoot,\n runDir,\n definition.test.testTimeout,\n input.singleFile ? { files: [input.singleFile] } : undefined,\n ),\n );\n const hasFormatMismatch = projects.some((project) =>\n project.collectionErrors.some(\n ({ error }) => error instanceof NativeWorkflowFormatError,\n ),\n );\n return {\n startedAt,\n runId,\n projectRoot: input.projectRoot,\n ...(configPath ? { configPath } : {}),\n resultDir,\n runDir,\n summaryPath,\n reportDir,\n definition,\n projects,\n // A wrong-format file invalidates the complete command invocation. Other\n // native collection failures retain the existing per-Project isolation.\n preflightScope: hasFormatMismatch ? 'run' : 'project',\n reportEnabled: true,\n publications: [],\n onProgress: options.onProgress ?? (() => {}),\n };\n}\n","import { writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, sep } from 'node:path';\nimport type {\n TestRunReportDump,\n TestRunReportSourceIndex,\n TestRunReportStep,\n} from '@midscene/core';\nimport type { TestProjectRunResult } from '../cli/types';\nimport { buildTestRunReportDump } from './test-run-report';\n\nconst text = (value: string): string =>\n value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll('|', '&#124;')\n .replaceAll('[', '&#91;')\n .replaceAll(']', '&#93;')\n .replaceAll('*', '&#42;')\n .replaceAll('_', '&#95;')\n .replaceAll('`', '&#96;')\n .replaceAll('\\\\', '&#92;')\n .replace(/[\\r\\n]+/g, ' ');\n\nconst duration = (ms: number): string => {\n const seconds = Math.round(ms / 1000);\n return seconds < 60\n ? `${seconds}s`\n : `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n};\nconst href = (from: string, target: string): string =>\n relative(dirname(from), target).split(sep).map(encodeURIComponent).join('/');\n\nexport interface TestResultMarkdownOptions {\n /** Relative or hosted URL of the HTML report. */\n reportHref?: string;\n}\n\n/** Render the same sanitized execution facts used by the HTML report. */\nexport function renderTestResultMarkdown(\n dump: TestRunReportDump,\n options: TestResultMarkdownOptions = {},\n): string {\n const { summary } = dump;\n const outcome =\n dump.status === 'success'\n ? `✅ **${summary.passed}/${summary.total} passed**`\n : `❌ **${summary.failed} failed** · ${summary.passed} passed · ${summary.notRun} not run`;\n const lines = [\n '## Midscene Test',\n '',\n `${outcome} · ${duration(dump.durationMs)}`,\n '',\n ];\n if (summary.filtered) lines.push(`**Filtered:** ${summary.filtered}`, '');\n const infrastructure = [\n summary.collectionErrors\n ? `${summary.collectionErrors} collection errors`\n : '',\n summary.documentFailures\n ? `${summary.documentFailures} document failures`\n : '',\n summary.projectFailures\n ? `${summary.projectFailures} project failures`\n : '',\n ].filter(Boolean);\n if (infrastructure.length)\n lines.push(`**Infrastructure:** ${infrastructure.join(' · ')}`, '');\n const groups: { name: string; rows: string[] }[] = [];\n const errors: string[] = [];\n const recordSteps = (label: string, steps: readonly TestRunReportStep[]) => {\n for (const step of steps) {\n if (step.status === 'failed')\n errors.push(\n `${label} / ${step.node}: ${step.error?.message ?? 'Step failed'}`,\n );\n }\n };\n for (const project of dump.projects) {\n if (project.lifecycle?.setupError)\n errors.push(`${project.name}: ${project.lifecycle.setupError.message}`);\n for (const error of project.lifecycle?.teardownErrors ?? [])\n errors.push(`${project.name}: ${error.message}`);\n for (const error of project.collectionErrors)\n errors.push(\n `${project.name} / ${error.sourcePath}: ${error.error.message}`,\n );\n for (const document of project.documents) {\n const name = document.sourcePath\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:yaml|yml)$/, '');\n const group = {\n name: dump.projects.length > 1 ? `${project.name} / ${name}` : name,\n rows: [] as string[],\n };\n groups.push(group);\n recordSteps(`${project.name} / ${document.sourcePath}`, [\n ...document.beforeAll,\n ...document.afterAll,\n ]);\n for (const error of document.teardownErrors ?? [])\n errors.push(`${document.sourcePath}: ${error.message}`);\n for (const failure of document.hostErrors ?? [])\n errors.push(\n `${document.sourcePath} / ${failure.phase}: ${failure.error.message}`,\n );\n for (const testCase of document.cases) {\n group.rows.push(\n ` - ${testCase.status === 'success' ? '✅' : testCase.status === 'not-run' ? '⏭️' : '❌'} ${text(testCase.name)}`,\n );\n }\n }\n }\n for (const diagnostic of dump.diagnostics ?? []) {\n if (diagnostic.level === 'error') errors.push(diagnostic.message);\n }\n if (errors.length)\n lines.push(\n '### Execution errors',\n '',\n ...errors.map((error) => `- ${text(error)}`),\n '',\n );\n for (const group of groups) {\n if (group.rows.length) lines.push(`- ${text(group.name)}`, ...group.rows);\n }\n if (!groups.some((group) => group.rows.length))\n lines.push('No cases were reported.');\n if (options.reportHref)\n lines.push(\n '',\n `[Open the Midscene Test report ↗](<${options.reportHref}>)`,\n );\n return `${lines.join('\\n')}\\n`;\n}\n\nconst emptyIndex = (): TestRunReportSourceIndex => ({\n sources: [],\n metrics: {\n modelCallCount: 0,\n modelTimeMs: 0,\n promptTokens: 0,\n cachedInputTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n },\n});\n\n/** Write a per-run Markdown artifact even when HTML publication fails or is disabled. */\nexport async function writeTestResultMarkdown(\n result: TestProjectRunResult,\n index: TestRunReportSourceIndex = emptyIndex(),\n): Promise<string> {\n const output = join(dirname(result.summaryPath), 'result.md');\n const dump = buildTestRunReportDump(result, index);\n await writeFile(\n output,\n renderTestResultMarkdown(dump, {\n ...(result.reportPath\n ? { reportHref: href(output, result.reportPath) }\n : {}),\n }),\n );\n return output;\n}\n","import {\n WorkflowExecutionFailure,\n decideRetry,\n isResourceRecoveryError,\n runDocumentAttempts,\n runWorkflowDocument,\n} from '@midscene/core/internal/test-runner';\nimport type {\n CaseRunOutcome,\n StepExecutionInfo,\n StepRunResult,\n WorkflowDocumentExecutionResult,\n WorkflowDocumentRunResult,\n} from '@midscene/core/internal/test-runner';\nimport { isFatalDeviceError } from '../errors';\nimport type { PreparedDocumentInvocation } from './execution-plan';\nimport {\n writeCaseAttemptResult,\n writeWorkflowDocumentResult,\n} from './result-store';\nimport type { LoadedExecutionProject } from './test-project';\nimport type { TestProjectCaseRunResult } from './types';\n\ninterface DocumentInvocationSinks {\n cases: TestProjectCaseRunResult[];\n documents: WorkflowDocumentRunResult[];\n}\n\ninterface ExecuteDocumentInvocationOptions {\n invocation: PreparedDocumentInvocation;\n project: LoadedExecutionProject<unknown>;\n projectContext: unknown;\n runDir: string;\n signal: AbortSignal;\n rootSignal: AbortSignal;\n shouldBail(): boolean;\n isProjectFatal(): boolean;\n markProjectFatal(): void;\n addFailedCases(count: number): void;\n onProgress(message: string): void;\n onDocumentResult?(result: WorkflowDocumentRunResult): Promise<void>;\n sinks: DocumentInvocationSinks;\n}\n\nconst stepPosition = (info: StepExecutionInfo) =>\n info.scope === 'case' ? info.case : info.document;\n\nconst formatStep = (info: StepExecutionInfo): string => {\n const position = stepPosition(info);\n const phase = position.phase === 'steps' ? 'step' : position.phase;\n return `${phase} ${position.stepIndex + 1}/${info.stepCount}: ${info.node}`;\n};\n\nconst formatStepResult = (\n info: StepExecutionInfo,\n result: StepRunResult,\n): string => {\n const indent = info.scope === 'case' ? ' ' : ' ';\n if (result.status === 'not-run')\n return `${indent}– ${formatStep(info)} (not run: ${result.notRunReason})`;\n const symbol = result.status === 'success' ? '✓' : '✗';\n const error = result.error ? ` — ${result.error.message}` : '';\n const continuation = result.continuedAfterError ? '; continuing' : '';\n return `${indent}${symbol} ${formatStep(info)} (${result.durationMs} ms)${error}${continuation}`;\n};\n\nconst caseHasFatalError = (outcome: CaseRunOutcome): boolean =>\n (outcome.attempts ?? []).some(\n (attempt) =>\n [...attempt.beforeEach, ...attempt.steps, ...attempt.afterEach].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) ||\n (attempt.teardownErrors ?? []).some(isFatalDeviceError) ||\n !!attempt.executionErrors?.some(isResourceRecoveryError),\n );\n\nconst documentHasFatalError = (result: WorkflowDocumentRunResult): boolean =>\n [...result.beforeAll, ...result.afterAll].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) ||\n (result.teardownErrors ?? []).some(isFatalDeviceError) ||\n !!result.executionErrors?.some(isResourceRecoveryError);\n\n/** Execute prepared document policies through the shared retry boundary. */\nexport async function executeDocumentInvocation(\n options: ExecuteDocumentInvocationOptions,\n): Promise<void> {\n const { invocation, project, sinks } = options;\n const { document } = invocation;\n const documentRetry = invocation.retry.scope === 'document';\n const attempts: WorkflowDocumentExecutionResult[] = [];\n\n await runDocumentAttempts(\n {\n retry: documentRetry ? invocation.retry.count : 0,\n signal: options.signal,\n shouldStop: () => options.shouldBail() || options.isProjectFatal(),\n },\n async (documentAttemptIndex) => {\n if (documentRetry)\n options.onProgress(\n ` file attempt ${documentAttemptIndex + 1}/${invocation.retry.count + 1}: ${document.sourcePath}`,\n );\n const execution = await runWorkflowDocument(document, {\n plan: invocation.plan,\n documentAttemptIndex: documentRetry ? documentAttemptIndex : undefined,\n ...invocation.bindings,\n project,\n projectContext: options.projectContext,\n retry: documentRetry ? 0 : invocation.retry.count,\n signal: options.signal,\n defaultTimeoutMs: invocation.defaultTimeoutMs,\n shouldStop: () =>\n options.rootSignal.aborted ||\n options.shouldBail() ||\n options.isProjectFatal(),\n stopReason: () =>\n options.rootSignal.aborted\n ? 'interrupted'\n : options.isProjectFatal()\n ? 'fatal-error'\n : 'bail',\n isFatalError: (run) =>\n [...run.beforeEach, ...run.steps, ...run.afterEach].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) || (run.teardownErrors ?? []).some(isFatalDeviceError),\n onCaseStart: (collectedCase) => {\n options.onProgress(\n ` [case ${collectedCase.caseIndex + 1}/${document.cases.length}] ${collectedCase.definition.name}`,\n );\n },\n onStepStart: (info) => {\n const indent = info.scope === 'case' ? ' ' : ' ';\n options.onProgress(`${indent}→ ${formatStep(info)}`);\n },\n onStepResult: async (info, result) => {\n await invocation.bindings.onStepResult?.(info, result);\n options.onProgress(formatStepResult(info, result));\n },\n onCaseResult: async (attempt) => {\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n options.onProgress(\n ` ${attempt.status === 'success' ? '✓' : '✗'} attempt ${attempt.attemptIndex + 1}/${documentRetry ? 1 : invocation.retry.count + 1}: ${attempt.name} (${attempt.durationMs} ms)`,\n );\n },\n onCaseOutcome: (outcome) => {\n if (caseHasFatalError(outcome)) options.markProjectFatal();\n if (!documentRetry && outcome.status === 'failed')\n options.addFailedCases(1);\n },\n onDocumentResult: options.onDocumentResult,\n }).catch(async (error: unknown) => {\n if (error instanceof WorkflowExecutionFailure) {\n const partial = error.result as WorkflowDocumentExecutionResult;\n const resourceOnly =\n error.errors.length > 0 &&\n error.errors.every(\n (failure) =>\n isResourceRecoveryError(failure) ||\n partial.document.hostErrors?.some(\n (host) =>\n host.phase === 'cleanup' &&\n (host.error === failure ||\n (host.error instanceof Error &&\n host.error.cause === failure)),\n ),\n );\n // Recovery and disposal failures stop this Project, not independent\n // Projects. Publication and other infrastructure failures still throw.\n if (resourceOnly) {\n if (error.errors.some(isResourceRecoveryError))\n options.markProjectFatal();\n return partial;\n }\n if (documentRetry)\n partial.document.retryDecision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: 'failed',\n infrastructureError: true,\n });\n attempts.push(partial);\n sinks.documents.push(partial.document);\n sinks.cases.push(\n ...partial.cases.map((outcome) => ({\n ...outcome,\n documentId: document.documentId,\n documentRunId: partial.document.documentRunId,\n })),\n );\n try {\n for (const outcome of partial.cases)\n for (const attempt of outcome.attempts ?? [])\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n await writeWorkflowDocumentResult(options.runDir, partial.document);\n } catch (publicationError) {\n throw new WorkflowExecutionFailure(partial, [\n ...error.errors,\n publicationError,\n ]);\n }\n }\n throw error;\n });\n\n if (documentHasFatalError(execution.document)) options.markProjectFatal();\n const owners = [\n execution.document,\n ...execution.cases.flatMap((outcome) => outcome.attempts ?? []),\n ];\n const cleanupPending = owners.some(\n (owner) => owner.cleanup?.status === 'pending',\n );\n const operationPending = owners.some(\n (owner) => !!owner.pendingOperations?.length,\n );\n const cleanupFailed = owners.some(\n (owner) =>\n owner.cleanup?.status === 'failed' ||\n !!owner.teardownErrors?.length ||\n ('hostErrors' in owner &&\n owner.hostErrors?.some(({ phase }) => phase === 'cleanup')),\n );\n // Files share the Project context; stop reusing it without cancelling\n // independent Projects. Publication and execution errors still throw.\n if (cleanupPending || cleanupFailed || operationPending)\n options.markProjectFatal();\n const failed =\n execution.document.status === 'failed' ||\n execution.cases.some((item) => item.status !== 'success');\n const decision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: failed ? 'failed' : 'success',\n cleanupPending,\n cleanupFailed,\n operationPending,\n fatalError: options.isProjectFatal(),\n interrupted: options.signal.aborted || options.rootSignal.aborted,\n shouldStop: options.shouldBail(),\n });\n if (documentRetry) execution.document.retryDecision = decision;\n attempts.push(execution);\n sinks.cases.push(\n ...execution.cases.map((outcome) => ({\n ...outcome,\n documentId: document.documentId,\n documentRunId: execution.document.documentRunId,\n })),\n );\n sinks.documents.push(execution.document);\n // Per-attempt callbacks publish incremental facts; seal the final retry\n // decision after callback-driven interruption/bail has been observed.\n try {\n for (const outcome of execution.cases)\n for (const attempt of outcome.attempts ?? [])\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n await writeWorkflowDocumentResult(options.runDir, execution.document);\n } catch (error) {\n execution.document.status = 'failed';\n execution.document.hostErrors = [\n ...(execution.document.hostErrors ?? []),\n { phase: 'publication', error },\n ];\n if (documentRetry)\n execution.document.retryDecision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: 'failed',\n infrastructureError: true,\n });\n throw new WorkflowExecutionFailure(execution, [error]);\n }\n return decision.decision === 'retry' ? 'failed' : undefined;\n },\n );\n\n const final = attempts.at(-1);\n if (!final) return;\n const failedCases = final.cases.filter(\n (item) => item.status === 'failed',\n ).length;\n if (documentRetry && failedCases) options.addFailedCases(failedCases);\n else if (final.document.status === 'failed' && failedCases === 0)\n options.addFailedCases(Math.max(1, failedCases));\n}\n","import { appendFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { TestRunReportOperationEvent } from '@midscene/core';\n\n/** Registered operations keep this sink after the report has been sealed.\n * Each small, bounded event is written before returning to the operation. No\n * open file descriptor or mutable report object is retained by the journal.\n */\nexport function createOperationJournal(runDir: string) {\n const path = join(runDir, 'operations.jsonl');\n writeFileSync(path, '', { flag: 'wx' });\n return {\n path,\n append(event: Readonly<TestRunReportOperationEvent>) {\n appendFileSync(path, `${JSON.stringify(event)}\\n`);\n },\n };\n}\n","import { setMaxListeners } from 'node:events';\nimport { dirname, join } from 'node:path';\nimport type { TestRunReportSourceIndex } from '@midscene/core';\nimport {\n WorkflowExecutionFailure,\n WorkflowPublicationError,\n asExecutionError,\n observeResourceOperations,\n runConcurrentJobs,\n} from '@midscene/core/internal/test-runner';\nimport type {\n CollectedCase,\n WorkflowDocumentRunResult,\n} from '@midscene/core/internal/test-runner';\nimport {\n TestRunReportAssembler,\n calculateTestRunHealth,\n} from '@midscene/core/report';\nimport { getDebug } from '@midscene/shared/logger';\nimport { createProjectRuntime } from '../engine/project-runtime';\nimport { writeTestResultMarkdown } from '../report/result-markdown';\nimport {\n buildTestRunReportDump,\n collectTestRunReportSources,\n} from '../report/test-run-report';\nimport { executeDocumentInvocation } from './document-invocation';\nimport type {\n PreparedDocumentInvocation,\n PreparedExecutionProject,\n PreparedTestRunPlan,\n} from './execution-plan';\nimport { createOperationJournal } from './operation-journal';\nimport { writeTestProjectRunResult, writeTestRunPlan } from './result-store';\nimport type {\n TestExecutionProjectRunResult,\n TestProjectCaseRunResult,\n TestProjectRunResult,\n TestProjectRunSummary,\n} from './types';\n\nconst asNotRun = (\n documentId: string,\n collectedCase: CollectedCase,\n projectName: string,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n): TestProjectCaseRunResult => ({\n documentId,\n caseId: collectedCase.caseId,\n projectName,\n name: collectedCase.definition.name,\n sourcePath: collectedCase.sourcePath,\n caseIndex: collectedCase.caseIndex,\n status: 'not-run',\n notRunReason: reason,\n});\n\nconst summarize = (\n projects: readonly TestExecutionProjectRunResult[],\n): TestProjectRunSummary => {\n const healthCases = projects.flatMap((project) => {\n const documentAttemptByRunId = new Map(\n project.documents.map((document) => [\n document.documentRunId,\n document.attemptIndex ?? 0,\n ]),\n );\n return latestById(project.cases, (item) => item.caseId).map((item) => {\n return {\n status: item.status,\n ...(item.run ? { run: item.run } : {}),\n ...(item.attempts ? { attempts: item.attempts } : {}),\n retryCount: item.documentRunId\n ? (documentAttemptByRunId.get(item.documentRunId) ?? 0)\n : 0,\n };\n });\n });\n const documents = projects.flatMap((project) =>\n latestById(project.documents, (item) => item.documentId),\n );\n const health = calculateTestRunHealth(healthCases);\n return {\n total: health.total,\n passed: health.passed,\n failed: health.failed,\n notRun: health.notRun,\n passedAfterRetry: health.passedAfterRetry,\n finalPassRate: health.finalPassRate,\n firstPassRate: health.firstPassRate,\n filtered: projects.reduce(\n (total, project) => total + project.filteredCaseCount,\n 0,\n ),\n collectionErrors: projects.reduce(\n (total, project) => total + project.collectionErrors.length,\n 0,\n ),\n documentFailures: documents.filter(\n (document) => document.status === 'failed',\n ).length,\n projectFailures: projects.filter((project) => project.status === 'failed')\n .length,\n };\n};\n\nconst latestById = <T>(items: readonly T[], id: (item: T) => string): T[] => [\n ...new Map(items.map((item) => [id(item), item])).values(),\n];\n\nconst notRunSuite = (\n prepared: PreparedExecutionProject,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n): TestProjectCaseRunResult[] =>\n prepared.documents.flatMap((document) =>\n document.cases.map((item) =>\n asNotRun(document.documentId, item, prepared.project.name, reason),\n ),\n );\n\n/** The executor sees prepared policies and bindings, never source-language rules. */\nexport async function runPreparedTestProject(\n plan: PreparedTestRunPlan,\n): Promise<TestProjectRunResult> {\n const {\n startedAt,\n runId,\n projectRoot,\n configPath,\n resultDir,\n runDir,\n summaryPath,\n reportDir,\n definition,\n projects: preparedProjects,\n } = plan;\n const progress = plan.onProgress;\n const totalDocuments = preparedProjects.reduce(\n (total, prepared) => total + prepared.documents.length,\n 0,\n );\n const totalCases = preparedProjects.reduce(\n (total, prepared) => total + prepared.selectedCaseCount,\n 0,\n );\n const totalErrors = preparedProjects.reduce(\n (total, prepared) => total + prepared.collectionErrors.length,\n 0,\n );\n progress(\n `midscene-test: preflighted ${preparedProjects.length} projects, ${totalDocuments} documents, ${totalCases} cases, ${totalErrors} collection errors`,\n );\n\n const effectiveConcurrency = Math.min(\n definition.test.maxConcurrency,\n preparedProjects.length,\n );\n await writeTestRunPlan(runDir, preparedProjects);\n const journal = createOperationJournal(runDir);\n const rootController = new AbortController();\n setMaxListeners(\n Math.max(10, effectiveConcurrency + 1),\n rootController.signal,\n );\n const handleSignal = (signal: NodeJS.Signals) => {\n rootController.abort(new Error(`Workflow interrupted by ${signal}.`));\n };\n const sigint = () => handleSignal('SIGINT');\n const sigterm = () => handleSignal('SIGTERM');\n process.on('SIGINT', sigint);\n process.on('SIGTERM', sigterm);\n\n let failedCaseCount = 0;\n const bailReached = () =>\n definition.test.bail > 0 && failedCaseCount >= definition.test.bail;\n let hasInfrastructureError = false;\n const infrastructureErrors: unknown[] = [];\n const recordInfrastructureError = (error: unknown) => {\n const errors =\n error instanceof WorkflowExecutionFailure ? error.errors : [error];\n for (const item of errors)\n if (!infrastructureErrors.includes(item)) infrastructureErrors.push(item);\n hasInfrastructureError = true;\n rootController.abort(error);\n };\n const runInfrastructureCallback = <T>(callback: () => T): T => {\n try {\n return callback();\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n };\n const stopObservingOperations = observeResourceOperations(\n rootController.signal,\n (event) => {\n try {\n journal.append(event);\n } catch (error) {\n recordInfrastructureError(\n new WorkflowPublicationError('write-result', journal.path, error),\n );\n getDebug('test-runner:operations', { console: true })(\n `Could not persist operation event: ${String(error)}`,\n );\n }\n },\n );\n type PreparedProject = (typeof preparedProjects)[number];\n const announceProject = (prepared: PreparedProject, projectIndex: number) => {\n const { project } = prepared;\n runInfrastructureCallback(() =>\n progress(\n `[project ${projectIndex + 1}/${preparedProjects.length}] ${project.name}`,\n ),\n );\n };\n const buildProjectResult = (\n prepared: PreparedProject,\n cases: readonly TestProjectCaseRunResult[],\n documents: readonly WorkflowDocumentRunResult[],\n lifecycle?: TestExecutionProjectRunResult['lifecycle'],\n ): TestExecutionProjectRunResult => {\n const { project } = prepared;\n const projectFailed =\n prepared.collectionErrors.length > 0 ||\n latestById(cases, (item) => item.caseId).some(\n (item) => item.status !== 'success',\n ) ||\n latestById(documents, (item) => item.documentId).some(\n (item) => item.status === 'failed',\n ) ||\n lifecycle?.status === 'failed';\n return {\n projectId: project.projectId,\n name: project.name,\n ...(prepared.platform ? { platform: prepared.platform } : {}),\n status: projectFailed ? 'failed' : 'success',\n retry: project.retry,\n fileSelection: prepared.fileSelection,\n tagSelection: project.tags,\n sourceCount: prepared.sources.length,\n selectedCaseCount: prepared.selectedCaseCount,\n filteredCaseCount: prepared.filteredCaseCount,\n ...(lifecycle ? { lifecycle } : {}),\n cases,\n plans: prepared.plans,\n documents,\n collectionErrors: prepared.collectionErrors,\n };\n };\n const buildSkippedProjectResult = (\n prepared: PreparedProject,\n projectIndex: number,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n ): TestExecutionProjectRunResult => {\n announceProject(prepared, projectIndex);\n return buildProjectResult(prepared, notRunSuite(prepared, reason), []);\n };\n const runPreparedProject = async (\n prepared: PreparedProject,\n projectIndex: number,\n ): Promise<TestExecutionProjectRunResult> => {\n const { project } = prepared;\n announceProject(prepared, projectIndex);\n const projectProgress = (message: string) =>\n runInfrastructureCallback(() =>\n progress(\n effectiveConcurrency > 1 ? `[${project.name}]${message}` : message,\n ),\n );\n const cases: TestProjectCaseRunResult[] = [];\n const documents: WorkflowDocumentRunResult[] = [];\n let lifecycle: TestExecutionProjectRunResult['lifecycle'];\n let projectFatal = false;\n\n if (\n prepared.collectionErrors.length > 0 ||\n (plan.preflightScope === 'run' && totalErrors > 0)\n ) {\n cases.push(...notRunSuite(prepared, 'project-preflight-failed'));\n } else if (rootController.signal.aborted) {\n cases.push(...notRunSuite(prepared, 'interrupted'));\n } else if (bailReached()) {\n cases.push(...notRunSuite(prepared, 'bail'));\n } else {\n const runtime = createProjectRuntime({\n project,\n setup: project.setup,\n signal: rootController.signal,\n });\n let hasProjectExecutionError = false;\n try {\n await runtime.start();\n if (!runtime.canRun) {\n cases.push(\n ...notRunSuite(\n prepared,\n rootController.signal.aborted\n ? 'interrupted'\n : 'project-setup-failed',\n ),\n );\n } else {\n const runDocument = async (\n invocation: PreparedDocumentInvocation,\n documentIndex: number,\n ) => {\n const { document } = invocation;\n if (\n rootController.signal.aborted ||\n bailReached() ||\n projectFatal\n ) {\n const reason = rootController.signal.aborted\n ? 'interrupted'\n : projectFatal\n ? 'fatal-error'\n : 'bail';\n cases.push(\n ...document.cases.map((item) =>\n asNotRun(document.documentId, item, project.name, reason),\n ),\n );\n return;\n }\n projectProgress(\n ` [document ${documentIndex + 1}/${prepared.documents.length}] ${document.sourcePath}`,\n );\n await executeDocumentInvocation({\n invocation,\n project,\n projectContext: runtime.context,\n runDir,\n signal: runtime.signal,\n rootSignal: rootController.signal,\n shouldBail: bailReached,\n isProjectFatal: () => projectFatal,\n markProjectFatal: () => {\n projectFatal = true;\n },\n addFailedCases: (count) => {\n failedCaseCount += count;\n },\n onProgress: projectProgress,\n sinks: {\n cases,\n documents,\n },\n });\n };\n let prerequisiteFailed = false;\n const prerequisite = prepared.invocations.find(\n (invocation) =>\n invocation.document.documentId ===\n prepared.prerequisiteDocumentId,\n );\n const prerequisiteCount = prerequisite ? 1 : 0;\n if (prerequisite) {\n await runDocument(prerequisite, 0);\n prerequisiteFailed =\n documents.at(-1)?.status === 'failed' ||\n latestById(cases, (item) => item.caseId).some(\n (item) => item.status !== 'success',\n );\n }\n if (!prerequisiteFailed) {\n await runConcurrentJobs(\n prepared.invocations.filter(\n (invocation) => invocation !== prerequisite,\n ),\n {\n concurrency: prepared.documentConcurrency,\n shouldStop: () =>\n rootController.signal.aborted ||\n bailReached() ||\n projectFatal,\n },\n async (invocation, index) => {\n try {\n await runDocument(invocation, index + prerequisiteCount);\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n },\n );\n }\n const completed = new Set(cases.map((item) => item.caseId));\n const reason = prerequisiteFailed\n ? 'project-setup-failed'\n : rootController.signal.aborted\n ? 'interrupted'\n : projectFatal\n ? 'fatal-error'\n : 'bail';\n cases.push(\n ...notRunSuite(prepared, reason).filter(\n (item) => !completed.has(item.caseId),\n ),\n );\n }\n } catch (error) {\n hasProjectExecutionError = true;\n recordInfrastructureError(error);\n } finally {\n const hasFailure =\n hasProjectExecutionError ||\n latestById(cases, (item) => item.caseId).some(\n (item) => item.status !== 'success',\n ) ||\n latestById(documents, (item) => item.documentId).some(\n (item) => item.status === 'failed',\n ) ||\n projectFatal ||\n rootController.signal.aborted;\n lifecycle = await runtime.finish(hasFailure ? 'failed' : 'success');\n }\n if (hasProjectExecutionError) {\n const completed = new Set(cases.map((item) => item.caseId));\n cases.push(\n ...notRunSuite(prepared, 'interrupted').filter(\n (item) => !completed.has(item.caseId),\n ),\n );\n }\n }\n\n const order = new Map(\n prepared.documents.map((document, index) => [document.documentId, index]),\n );\n const documentOrder = (id: string) =>\n order.get(id) ?? Number.MAX_SAFE_INTEGER;\n cases.sort(\n (a, b) =>\n documentOrder(a.documentId) - documentOrder(b.documentId) ||\n a.caseIndex - b.caseIndex,\n );\n documents.sort(\n (a, b) =>\n documentOrder(a.documentId) - documentOrder(b.documentId) ||\n (a.attemptIndex ?? 0) - (b.attemptIndex ?? 0),\n );\n return buildProjectResult(prepared, cases, documents, lifecycle);\n };\n\n const projectResults: Array<TestExecutionProjectRunResult | undefined> =\n new Array(preparedProjects.length);\n\n try {\n await runConcurrentJobs(\n preparedProjects,\n {\n concurrency: effectiveConcurrency,\n shouldStop: () =>\n hasInfrastructureError ||\n rootController.signal.aborted ||\n bailReached(),\n },\n async (prepared, index) => {\n try {\n projectResults[index] = await runPreparedProject(prepared, index);\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n },\n );\n } catch (error) {\n recordInfrastructureError(error);\n } finally {\n stopObservingOperations();\n process.off('SIGINT', sigint);\n process.off('SIGTERM', sigterm);\n }\n\n const completedProjectResults = preparedProjects.map(\n (prepared, projectIndex) => {\n const result = projectResults[projectIndex];\n if (result) return result;\n const reason = prepared.collectionErrors.length\n ? 'project-preflight-failed'\n : rootController.signal.aborted\n ? 'interrupted'\n : bailReached()\n ? 'bail'\n : undefined;\n if (!reason) {\n throw new Error(\n `Project scheduler did not produce a result for \"${prepared.project.name}\".`,\n );\n }\n return buildSkippedProjectResult(prepared, projectIndex, reason);\n },\n );\n\n const summary = summarize(completedProjectResults);\n const failed =\n hasInfrastructureError ||\n rootController.signal.aborted ||\n summary.failed > 0 ||\n summary.notRun > 0 ||\n summary.collectionErrors > 0 ||\n summary.documentFailures > 0 ||\n summary.projectFailures > 0;\n const endedAt = new Date();\n const result: TestProjectRunResult = {\n schemaVersion: 3,\n operationLog: { path: journal.path, snapshotAt: endedAt.toISOString() },\n runId,\n startedAt: startedAt.toISOString(),\n endedAt: endedAt.toISOString(),\n durationMs: Math.max(0, endedAt.getTime() - startedAt.getTime()),\n status: failed ? 'failed' : 'success',\n exitCode: failed ? 1 : 0,\n resultDir,\n summaryPath,\n reportDir,\n summary,\n projects: completedProjectResults,\n cases: completedProjectResults.flatMap((project) => project.cases),\n documents: completedProjectResults.flatMap((project) => project.documents),\n collectionErrors: completedProjectResults.flatMap(\n (project) => project.collectionErrors,\n ),\n ...(hasInfrastructureError\n ? { errors: infrastructureErrors.map(asExecutionError) }\n : {}),\n };\n let completedResult = result;\n let reportIndex: TestRunReportSourceIndex | undefined;\n const publish = async (\n operation: 'write-result' | 'write-report',\n path: string,\n callback: () => unknown | Promise<unknown>,\n ): Promise<boolean> => {\n try {\n await callback();\n return true;\n } catch (error) {\n recordInfrastructureError(\n error instanceof WorkflowPublicationError ||\n error instanceof WorkflowExecutionFailure\n ? error\n : new WorkflowPublicationError(operation, path, error),\n );\n completedResult = {\n ...completedResult,\n status: 'failed',\n exitCode: 1,\n errors: infrastructureErrors.map(asExecutionError),\n };\n return false;\n }\n };\n const writeSummary = () =>\n publish('write-result', summaryPath, () =>\n writeTestProjectRunResult({\n projectRoot,\n ...(configPath ? { configPath } : {}),\n result: completedResult,\n }),\n );\n const writeReport = () =>\n publish('write-report', reportDir, async () => {\n if (!plan.reportEnabled) return;\n const reportPath = await new TestRunReportAssembler().assembleAsync({\n outputDir: reportDir,\n reportFileName: `midscene-e2e-${runId}`,\n overwrite: false,\n sources: collectTestRunReportSources(completedResult),\n buildRunnerDump: (index) => {\n reportIndex = index;\n const dump = buildTestRunReportDump(completedResult, index);\n const warn = getDebug('test-runner:report-assembler', {\n console: true,\n });\n for (const diagnostic of dump.diagnostics ?? [])\n warn(diagnostic.message);\n return dump;\n },\n });\n completedResult = { ...completedResult, reportPath };\n });\n // Publish each artifact once. The summary includes the report path or its\n // failure. If the summary itself fails, the thrown result remains authoritative;\n // do not rebuild an already-published execution report to backfill that error.\n await writeReport();\n for (const publication of plan.publications)\n await publish(publication.operation, publication.path, async () => {\n await publication.publish(completedResult);\n });\n await publish(\n 'write-result',\n join(dirname(summaryPath), 'result.md'),\n async () => {\n const markdownPath = await writeTestResultMarkdown(\n completedResult,\n reportIndex,\n );\n completedResult = { ...completedResult, markdownPath };\n },\n );\n await writeSummary();\n if (hasInfrastructureError)\n throw new WorkflowExecutionFailure(completedResult, infrastructureErrors);\n return completedResult;\n}\n","import type { TestProjectRunOptions } from './execution-plan';\nimport { prepareTestRun } from './prepare-test-run';\nimport { runPreparedTestProject } from './run-prepared-project';\nimport type { TestProjectRunResult } from './types';\n\nexport type { TestProjectRunOptions } from './execution-plan';\nexport { createTestRunId } from './prepare-test-run';\nexport {\n DEFAULT_TEST_FILE_SELECTION,\n discoverTestConfig,\n discoverTestFiles,\n} from './project-preparation';\n\n/** Native Test entry for cases/steps workflow documents. */\nexport async function runTestProject(\n options: TestProjectRunOptions = {},\n): Promise<TestProjectRunResult> {\n return runPreparedTestProject(await prepareTestRun(options));\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","NodeRegistry","CoreNodeRegistry","projectIdFromIndex","index","defineTestProject","defineProjectSetup","getDefaultExport","loaded","absolutePath","defaultExport","TypeError","isRecord","value","Array","rejectUnknownKeys","allowedKeys","label","allowed","Set","unknown","isAbsolutePattern","pattern","isAbsolute","validatePatterns","field","allowEmptyInclude","validateTestFileSelection","undefined","include","exclude","validateTagList","tag","validateTagSelection","assertJsonValue","path","seen","Number","item","child","deepFreezeJson","validateVariables","validateSetup","validatePositiveInteger","fallback","validateNonNegativeInteger","validateExecutionProjects","defaultSetup","globalNodes","setup","names","projects","candidate","files","localNodes","nodes","node","validateTestOptions","validateOutputPath","validateOutput","validateTestProjectDefinition","resolvedProjects","name","assertSupportedConfig","extension","canRetryWithCjsLoader","error","Error","errorCode","SyntaxError","loadTestProject","configPath","resolve","pathToFileURL","tsImport","dirname","sep","tsxRequire","fallbackError","message","createCaseInvocationId","projectId","sourcePath","caseIndex","invocationIndex","createHash","JSON","createDocumentInvocationId","normalizeSteps","coreNormalizeSteps","parseWorkflowSource","source","stack","sensitiveNodes","sensitiveValues","redactedPaths","sourceOffset","parsed","load","JSON_SCHEMA","event","state","isReportSecretKey","ranges","left","right","offset","redacted","range","text","leading","trailing","sanitizeReportText","interpolationExpression","exactEnvExpression","exactProjectExpression","missingVariable","kind","options","WorkflowParseError","projectVariable","environmentVariable","interpolationValue","String","resolveString","exactEnv","exactProject","_match","environmentName","projectName","resolveWorkflowVariables","isMapping","NativeWorkflowFormatError","actualFormat","allowedSet","createCaseId","createWorkflowDocumentId","collectWorkflowDocument","snapshot","readFileSync","sourceYaml","format","classifyWorkflowDocumentFormat","resolveStepVariables","step","phase","stepIndex","process","normalizeLifecycle","normalized","resolved","lifecycle","ids","cases","tags","steps","caseId","writeJson","mkdir","writeFile","WorkflowPublicationError","writeTestRunPlan","runDir","join","Date","toPosix","caseAttemptResultPath","documentId","result","workflowDocumentResultPath","collectionErrorPath","id","writeWorkflowDocumentResult","_documentRunId","persistedResult","writeCaseAttemptResult","attemptId","writeCollectionError","collectionError","relativeToSummary","summaryPath","target","relative","errorJson","sanitizeReportError","writeTestProjectRunResult","fact","project","outcome","attempt","document","CONFIG_NAMES","CONFIG_PREFIX","ALWAYS_IGNORED_PATTERNS","DEFAULT_TEST_FILE_SELECTION","discoverResolvedTestFiles","projectRoot","selection","root","match","patterns","globSync","file","a","b","relativeA","relativeB","discoverTestFiles","discoverTestConfig","candidates","readdirSync","supported","unsupported","asCollectionError","WorkflowError","matchesTags","filterDocumentCases","filtered","selectProjects","requested","known","prepareProject","defaultTimeoutMs","platform","fileSelection","prerequisiteFile","mainFiles","occurrences","Map","sources","collectionErrors","invocations","plans","filteredCaseCount","collected","plan","buildTestRunReportPlan","documents","invocation","prerequisiteSource","prerequisiteDocument","total","padDatePart","createTestRunId","date","uuid","randomUUID","timestamp","assertDirectory","existsSync","statSync","resolveRunInput","cwd","inputPath","singleFile","cliProjectRoot","prepareTestRun","startedAt","runId","input","resultDir","reportDir","mkdirSync","hasFormatMismatch","duration","ms","seconds","Math","href","from","encodeURIComponent","renderTestResultMarkdown","dump","summary","lines","infrastructure","Boolean","groups","errors","recordSteps","group","failure","testCase","diagnostic","emptyIndex","writeTestResultMarkdown","output","buildTestRunReportDump","stepPosition","info","formatStep","position","formatStepResult","indent","symbol","continuation","caseHasFatalError","isFatalDeviceError","isResourceRecoveryError","documentHasFatalError","executeDocumentInvocation","sinks","documentRetry","attempts","runDocumentAttempts","documentAttemptIndex","execution","runWorkflowDocument","run","collectedCase","WorkflowExecutionFailure","partial","resourceOnly","host","decideRetry","publicationError","owners","cleanupPending","owner","operationPending","cleanupFailed","failed","decision","final","failedCases","createOperationJournal","writeFileSync","appendFileSync","asNotRun","reason","summarize","healthCases","documentAttemptByRunId","latestById","health","calculateTestRunHealth","items","notRunSuite","prepared","runPreparedTestProject","preparedProjects","progress","totalDocuments","totalCases","totalErrors","effectiveConcurrency","journal","rootController","AbortController","setMaxListeners","handleSignal","signal","sigint","sigterm","failedCaseCount","bailReached","hasInfrastructureError","infrastructureErrors","recordInfrastructureError","runInfrastructureCallback","callback","stopObservingOperations","observeResourceOperations","getDebug","announceProject","projectIndex","buildProjectResult","projectFailed","buildSkippedProjectResult","runPreparedProject","projectProgress","projectFatal","runtime","createProjectRuntime","hasProjectExecutionError","runDocument","documentIndex","count","prerequisiteFailed","prerequisite","prerequisiteCount","runConcurrentJobs","completed","hasFailure","order","documentOrder","projectResults","completedProjectResults","endedAt","asExecutionError","completedResult","reportIndex","publish","operation","writeSummary","writeReport","reportPath","TestRunReportAssembler","collectTestRunReportSources","warn","publication","markdownPath","runTestProject"],"mappings":"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"}
1
+ {"version":3,"file":"cli/index.js","sources":["webpack/runtime/define_property_getters","webpack/runtime/has_own_property","webpack/runtime/make_namespace_object","../../../src/result-path-segment.ts","../../../src/cli/executor-runtime-schema.ts","../../../src/cli/test-executor.ts","../../../src/parser/identifiers.ts","../../../src/parser/normalize.ts","../../../src/parser/source.ts","../../../src/parser/variables.ts","../../../src/parser/collect.ts","../../../src/cli/result-store.ts","../../../src/engine/registry.ts","../../../src/cli/test-project.ts","../../../src/cli/project-preparation.ts","../../../src/cli/test-selection.ts","../../../src/cli/prepare-test-run.ts","../../../src/report/result-markdown.ts","../../../src/cli/execution-result.ts","../../../src/cli/executor-reports.ts","../../../src/cli/task-scheduler.ts","../../../src/cli/case-execution.ts","../../../src/cli/document-invocation.ts","../../../src/cli/operation-journal.ts","../../../src/cli/run-prepared-project.ts","../../../src/cli/test-project-runner.ts"],"sourcesContent":["__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/** Whether a value can be used as one bounded result-directory segment. */\nexport const isSafeResultPathSegment = (value: unknown): value is string =>\n typeof value === 'string' && /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(value);\n","import { z } from 'zod/v4';\n\ntype JsonValue =\n | null\n | string\n | number\n | boolean\n | JsonValue[]\n | { [key: string]: JsonValue };\nconst json: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.array(json),\n z.record(z.string(), json),\n ]),\n);\nconst time = z.string().refine((value) => Number.isFinite(Date.parse(value)));\nconst count = z.number().int().nonnegative();\nconst value = z.strictObject({\n value: json,\n truncatedPaths: z.array(z.string()).optional(),\n redactedPaths: z.array(z.string()).optional(),\n});\n\nexport interface ExecutorReportError {\n format?: 'midscene-error';\n name: string;\n message: string;\n code?: string;\n details?: {\n value: JsonValue;\n truncatedPaths?: string[];\n redactedPaths?: string[];\n };\n cause?: ExecutorReportError;\n errors?: ExecutorReportError[];\n truncated?: boolean;\n}\nexport const reportErrorSchema: z.ZodType<ExecutorReportError> = z.lazy(() =>\n z.strictObject({\n format: z.literal('midscene-error').optional(),\n name: z.string(),\n message: z.string(),\n code: z.string().optional(),\n details: value.optional(),\n cause: reportErrorSchema.optional(),\n errors: z.array(reportErrorSchema).optional(),\n truncated: z.boolean().optional(),\n }),\n);\nconst operation = z.strictObject({\n operationId: z.string().min(1),\n scopeId: z.string().optional(),\n stepId: z.string().optional(),\n node: z.string().optional(),\n});\nexport const cleanupSchema = z.strictObject({\n status: z.enum(['not-required', 'completed', 'pending', 'failed']),\n capturedAt: time,\n operationId: z.string().optional(),\n blockingOperations: z.array(operation).optional(),\n error: reportErrorSchema.optional(),\n});\nexport const pendingOperationsSchema = z.array(operation);\nconst collectionStatus = z.enum(['complete', 'partial', 'unknown']);\nexport const metricsSchema = z.strictObject({\n modelCallCount: count,\n modelTimeMs: z.number().finite().nonnegative(),\n promptTokens: count,\n cachedInputTokens: count,\n completionTokens: count,\n totalTokens: count,\n collection: z\n .strictObject({\n status: collectionStatus,\n expectedExecutionCount: count,\n capturedExecutionCount: count,\n reasons: z.array(z.string()),\n fields: z\n .strictObject({\n modelCallCount: collectionStatus,\n modelTimeMs: collectionStatus,\n totalTokens: collectionStatus,\n })\n .optional(),\n })\n .optional(),\n});\nexport const operationsSchema = z.strictObject({\n capturedAt: time,\n events: z.array(\n z.strictObject({\n operationId: z.string().min(1),\n operationKind: z.enum([\n 'node',\n 'resource',\n 'acquisition',\n 'cleanup',\n 'readiness',\n ]),\n kind: z.enum([\n 'started',\n 'cancel-requested',\n 'settled',\n 'runner-returned',\n 'cleanup-deferred',\n ]),\n at: time,\n stepId: z.string().optional(),\n scopeId: z.string().optional(),\n node: z.string().optional(),\n status: z.enum(['success', 'failed', 'not-run']).optional(),\n pending: z.boolean().optional(),\n error: reportErrorSchema.optional(),\n blockingOperations: z.array(operation).optional(),\n }),\n ),\n});\nexport const runtimeResultFields = {\n executionStatus: z.enum(['success', 'failed', 'not-run']).optional(),\n phases: z\n .partialRecord(\n z.enum(['beforeAll', 'beforeEach', 'steps', 'afterEach', 'afterAll']),\n z.strictObject({\n status: z.enum(['success', 'failed', 'not-run', 'not-required']),\n plannedStepCount: count,\n executedStepCount: count,\n }),\n )\n .optional(),\n cleanup: cleanupSchema.optional(),\n pendingOperations: pendingOperationsSchema.optional(),\n retryDecision: z\n .strictObject({\n scope: z.enum(['case', 'document']),\n retryCount: count,\n attemptIndex: count,\n decision: z.enum(['retry', 'stop']),\n reason: z.enum([\n 'passed',\n 'attempt-failed',\n 'budget-exhausted',\n 'cleanup-pending',\n 'cleanup-failed',\n 'operation-pending',\n 'fatal-error',\n 'interrupted',\n 'bail',\n 'infrastructure-error',\n ]),\n })\n .optional(),\n};\nexport type ExecutorRuntimeResult = z.infer<\n z.ZodObject<typeof runtimeResultFields>\n>;\nconst plannedStep = z.strictObject({\n id: z.string(),\n phase: z.enum(['beforeAll', 'beforeEach', 'steps', 'afterEach', 'afterAll']),\n stepIndex: count,\n node: z.string(),\n title: z.string().optional(),\n input: value,\n inputMode: z.enum(['template', 'resolved']),\n timeoutMs: z.number().positive().optional(),\n continueOnError: z.boolean(),\n});\nexport const documentPlanSchema = z.strictObject({\n documentId: z.string(),\n sourcePath: z.string(),\n sourceYaml: value.optional(),\n retry: z.strictObject({ scope: z.enum(['case', 'document']), count }),\n beforeAll: z.array(plannedStep),\n afterAll: z.array(plannedStep),\n cases: z.array(\n z.strictObject({\n caseId: z.string(),\n name: z.string(),\n caseIndex: count,\n selected: z.boolean(),\n tags: z.array(z.string()),\n onFailure: z.enum(['continue', 'stop-document']).optional(),\n beforeEach: z.array(plannedStep),\n steps: z.array(plannedStep),\n afterEach: z.array(plannedStep),\n }),\n ),\n});\n","import { z } from 'zod/v4';\nimport type { Awaitable } from '../engine/types';\nimport { isSafeResultPathSegment } from '../result-path-segment';\nimport {\n type ExecutorReportError,\n type ExecutorRuntimeResult,\n cleanupSchema,\n documentPlanSchema,\n metricsSchema,\n operationsSchema,\n pendingOperationsSchema,\n reportErrorSchema,\n runtimeResultFields,\n} from './executor-runtime-schema';\n\nexport interface TestCaseTask {\n readonly taskId: string;\n readonly projectId: string;\n readonly projectName: string;\n readonly documentId: string;\n readonly sourcePath: string;\n readonly caseId: string;\n readonly caseName: string;\n readonly caseIndex: number;\n readonly tags: readonly string[];\n readonly resources: readonly string[];\n readonly retry: number;\n}\n\nexport type TestExecutorJsonValue =\n | null\n | string\n | number\n | boolean\n | readonly TestExecutorJsonValue[]\n | { readonly [key: string]: TestExecutorJsonValue };\n\nexport interface TestExecutorErrorDto {\n readonly name: string;\n readonly message: string;\n readonly code: string;\n readonly details?: TestExecutorJsonValue;\n readonly format?: 'midscene-error';\n readonly cause?: ExecutorReportError;\n}\n\ninterface TestExecutorStepResultBase {\n readonly phase:\n | 'beforeAll'\n | 'beforeEach'\n | 'steps'\n | 'afterEach'\n | 'afterAll';\n readonly stepIndex: number;\n readonly node: string;\n readonly input: TestExecutorJsonValue;\n readonly meta: {\n readonly timeoutMs?: number;\n readonly continueOnError: boolean;\n };\n readonly continuedAfterError: boolean;\n readonly waitForPreviousOperationMs?: number;\n readonly operations?: z.infer<typeof operationsSchema>;\n readonly output?: {\n readonly summary?: string;\n readonly data?: TestExecutorJsonValue;\n };\n readonly error?: TestExecutorErrorDto;\n readonly report?: {\n readonly traces: readonly {\n readonly type: 'midscene-execution';\n readonly executionId: string;\n readonly metrics?: z.infer<typeof metricsSchema>;\n }[];\n readonly collectionErrors?: readonly TestExecutorErrorDto[];\n };\n}\nexport type TestExecutorStepResultDto = TestExecutorStepResultBase &\n (\n | {\n readonly status: 'success' | 'failed';\n readonly startedAt: string;\n readonly endedAt: string;\n readonly durationMs: number;\n }\n | {\n readonly status: 'not-run';\n readonly notRunReason: string;\n readonly blockedBy?: string;\n }\n );\n\nexport interface TestExecutorCaseAttemptDto extends ExecutorRuntimeResult {\n readonly caseId: string;\n readonly runId: string;\n readonly projectName: string;\n readonly attemptIndex: number;\n readonly name: string;\n readonly sourcePath: string;\n readonly caseIndex: number;\n readonly status: 'success' | 'failed';\n readonly beforeEach: readonly TestExecutorStepResultDto[];\n readonly steps: readonly TestExecutorStepResultDto[];\n readonly afterEach: readonly TestExecutorStepResultDto[];\n readonly executionErrors?: readonly TestExecutorErrorDto[];\n readonly teardownErrors?: readonly TestExecutorErrorDto[];\n /** Opaque references returned by context.materializeReport(). */\n readonly reportRefs?: readonly string[];\n readonly startedAt: string;\n readonly endedAt: string;\n readonly durationMs: number;\n}\n\nexport interface TestExecutorCaseOutcomeDto {\n readonly documentId: string;\n readonly caseId: string;\n readonly projectName: string;\n readonly name: string;\n readonly sourcePath: string;\n readonly caseIndex: number;\n readonly status: 'success' | 'failed' | 'not-run';\n readonly run?: TestExecutorCaseAttemptDto;\n readonly attempts?: readonly TestExecutorCaseAttemptDto[];\n readonly notRunReason?:\n | 'document-start-failed'\n | 'project-preflight-failed'\n | 'project-setup-failed'\n | 'interrupted'\n | 'bail'\n | 'fatal-error'\n | 'cleanup-pending'\n | 'cleanup-failed'\n | 'operation-pending'\n | 'executor-failed';\n}\n\nexport interface TestExecutorDocumentResultDto extends ExecutorRuntimeResult {\n readonly plan?: z.infer<typeof documentPlanSchema>;\n readonly attemptIndex?: number;\n readonly hostErrors?: readonly {\n phase:\n | 'setup'\n | 'execution'\n | 'cleanup'\n | 'report'\n | 'publication'\n | 'observer';\n error: ExecutorReportError;\n }[];\n readonly documentId: string;\n readonly documentRunId: string;\n readonly projectId: string;\n readonly projectName: string;\n readonly sourcePath: string;\n readonly status: 'success' | 'failed';\n readonly startedAt: string;\n readonly endedAt: string;\n readonly durationMs: number;\n readonly beforeAll: readonly TestExecutorStepResultDto[];\n readonly afterAll: readonly TestExecutorStepResultDto[];\n readonly executionErrors?: readonly TestExecutorErrorDto[];\n readonly teardownErrors?: readonly TestExecutorErrorDto[];\n /** Opaque references returned by context.materializeReport(). */\n readonly reportRefs?: readonly string[];\n}\n\nexport interface TestExecutorLifecycleResultDto {\n readonly cleanup?: z.infer<typeof cleanupSchema>;\n readonly pendingOperations?: z.infer<typeof pendingOperationsSchema>;\n readonly projectName: string;\n readonly status: 'success' | 'failed';\n readonly setupError?: TestExecutorErrorDto;\n readonly teardownErrors?: readonly TestExecutorErrorDto[];\n readonly startedAt: string;\n readonly endedAt: string;\n readonly durationMs: number;\n}\n\n/** JSON-safe result crossing the Test Executor boundary. */\nexport interface TestCaseTaskRunResult {\n readonly case: TestExecutorCaseOutcomeDto;\n readonly document?: TestExecutorDocumentResultDto;\n readonly lifecycle?: TestExecutorLifecycleResultDto;\n readonly artifacts?: readonly TestCaseArtifact[];\n readonly metadata?: Readonly<\n Record<string, string | number | boolean | null>\n >;\n}\n\nexport interface TestCaseArtifact {\n readonly name: string;\n /** URL or artifact identifier; never interpreted as a local report path. */\n readonly uri: string;\n readonly mediaType?: string;\n}\n\nexport interface TestExecutorContext {\n readonly signal: AbortSignal;\n readonly runLocal: () => Promise<TestCaseTaskRunResult>;\n readonly onProgress: (message: string) => void;\n /** Directory reserved for files materialized by this task. */\n readonly outputDir: string;\n /** Copy a trusted local report into outputDir and return an opaque reference. */\n readonly materializeReport: (sourcePath: string) => string;\n}\n\nexport type TestExecutorFailureKind =\n | 'provision'\n | 'transport'\n | 'cleanup'\n | 'report'\n | 'unknown';\n\nconst executorErrorKey = Symbol.for('@midscene/test/executor-error');\n\nexport class TestExecutorError extends Error {\n readonly [executorErrorKey] = true;\n readonly kind: TestExecutorFailureKind;\n readonly retryable: boolean;\n\n constructor(\n message: string,\n options: {\n kind?: TestExecutorFailureKind;\n retryable?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message, { cause: options.cause });\n this.name = 'TestExecutorError';\n this.kind = options.kind ?? 'unknown';\n this.retryable = options.retryable ?? false;\n }\n}\n\n/** Config and CLI bundles can contain different copies of this constructor. */\nexport function isTestExecutorError(\n value: unknown,\n): value is TestExecutorError {\n return (\n value instanceof Error &&\n Reflect.get(value, executorErrorKey) === true &&\n ['provision', 'transport', 'cleanup', 'report', 'unknown'].includes(\n Reflect.get(value, 'kind'),\n ) &&\n typeof Reflect.get(value, 'retryable') === 'boolean'\n );\n}\n\n/** Runs one isolated Midscene case locally or through an external service. */\nexport interface TestExecutor {\n readonly name: string;\n readonly execute: (\n task: TestCaseTask,\n context: TestExecutorContext,\n ) => Awaitable<TestCaseTaskRunResult>;\n}\n\nexport const defineTestExecutor = <TExecutor extends TestExecutor>(\n executor: TExecutor,\n): TExecutor => executor;\n\nexport const localTestExecutor: TestExecutor = Object.freeze({\n name: 'local',\n execute: (_task: TestCaseTask, context: TestExecutorContext) =>\n context.runLocal(),\n});\n\nconst jsonValueSchema: z.ZodType<TestExecutorJsonValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ]),\n);\nconst timestampSchema = z\n .string()\n .refine((value) => Number.isFinite(Date.parse(value)), {\n message: 'Expected an ISO-compatible timestamp.',\n });\nconst errorSchema = z.strictObject({\n format: z.literal('midscene-error').optional(),\n cause: reportErrorSchema.optional(),\n name: z.string().min(1),\n message: z.string(),\n code: z.string().min(1),\n details: jsonValueSchema.optional(),\n});\nconst stepBaseSchema = z.strictObject({\n phase: z.enum(['beforeAll', 'beforeEach', 'steps', 'afterEach', 'afterAll']),\n stepIndex: z.number().int().nonnegative(),\n node: z.string().min(1),\n input: jsonValueSchema,\n meta: z.strictObject({\n timeoutMs: z.number().positive().finite().optional(),\n continueOnError: z.boolean(),\n }),\n continuedAfterError: z.boolean(),\n waitForPreviousOperationMs: z.number().nonnegative().finite().optional(),\n operations: operationsSchema.optional(),\n output: z\n .strictObject({\n summary: z.string().optional(),\n data: jsonValueSchema.optional(),\n })\n .optional(),\n error: errorSchema.optional(),\n report: z\n .strictObject({\n traces: z.array(\n z.strictObject({\n type: z.literal('midscene-execution'),\n executionId: z.string().min(1),\n metrics: metricsSchema.optional(),\n }),\n ),\n collectionErrors: z.array(errorSchema).optional(),\n })\n .optional(),\n});\nconst stepSchema = z.discriminatedUnion('status', [\n stepBaseSchema.extend({\n status: z.enum(['success', 'failed']),\n startedAt: timestampSchema,\n endedAt: timestampSchema,\n durationMs: z.number().nonnegative().finite(),\n }),\n stepBaseSchema.extend({\n status: z.literal('not-run'),\n notRunReason: z.string().min(1),\n blockedBy: z.string().optional(),\n }),\n]);\nconst validatedStepSchema = stepSchema.superRefine((step, context) => {\n if (step.status === 'success' && (step.error || step.continuedAfterError)) {\n context.addIssue({\n code: 'custom',\n message: 'Successful steps cannot contain failure evidence.',\n });\n }\n if (step.continuedAfterError && !step.meta.continueOnError) {\n context.addIssue({\n code: 'custom',\n message: 'Continuation requires continueOnError.',\n });\n }\n});\nconst attemptSchema = z.strictObject({\n ...runtimeResultFields,\n caseId: z.string().min(1),\n runId: z.string().min(1),\n projectName: z.string().min(1),\n attemptIndex: z.number().int().nonnegative(),\n name: z.string(),\n sourcePath: z.string().min(1),\n caseIndex: z.number().int().nonnegative(),\n status: z.enum(['success', 'failed']),\n beforeEach: z.array(validatedStepSchema),\n steps: z.array(validatedStepSchema),\n afterEach: z.array(validatedStepSchema),\n executionErrors: z.array(errorSchema).optional(),\n teardownErrors: z.array(errorSchema).optional(),\n reportRefs: z.array(z.string().min(1)).optional(),\n startedAt: timestampSchema,\n endedAt: timestampSchema,\n durationMs: z.number().nonnegative().finite(),\n});\nconst notRunReasonSchema = z.enum([\n 'document-start-failed',\n 'project-preflight-failed',\n 'project-setup-failed',\n 'interrupted',\n 'bail',\n 'fatal-error',\n 'executor-failed',\n 'cleanup-pending',\n 'cleanup-failed',\n 'operation-pending',\n]);\nconst resultSchema = z.strictObject({\n case: z.strictObject({\n documentId: z.string().min(1),\n caseId: z.string().min(1),\n projectName: z.string().min(1),\n name: z.string(),\n sourcePath: z.string().min(1),\n caseIndex: z.number().int().nonnegative(),\n status: z.enum(['success', 'failed', 'not-run']),\n run: attemptSchema.optional(),\n attempts: z.array(attemptSchema).optional(),\n notRunReason: notRunReasonSchema.optional(),\n }),\n document: z\n .strictObject({\n ...runtimeResultFields,\n plan: documentPlanSchema.optional(),\n attemptIndex: z.number().int().nonnegative().optional(),\n hostErrors: z\n .array(\n z.strictObject({\n phase: z.enum([\n 'setup',\n 'execution',\n 'cleanup',\n 'report',\n 'publication',\n 'observer',\n ]),\n error: reportErrorSchema,\n }),\n )\n .optional(),\n documentId: z.string().min(1),\n documentRunId: z.string().min(1),\n projectId: z.string().min(1),\n projectName: z.string().min(1),\n sourcePath: z.string().min(1),\n status: z.enum(['success', 'failed']),\n startedAt: timestampSchema,\n endedAt: timestampSchema,\n durationMs: z.number().nonnegative().finite(),\n beforeAll: z.array(validatedStepSchema),\n afterAll: z.array(validatedStepSchema),\n executionErrors: z.array(errorSchema).optional(),\n teardownErrors: z.array(errorSchema).optional(),\n reportRefs: z.array(z.string().min(1)).optional(),\n })\n .optional(),\n lifecycle: z\n .strictObject({\n cleanup: cleanupSchema.optional(),\n pendingOperations: pendingOperationsSchema.optional(),\n projectName: z.string().min(1),\n status: z.enum(['success', 'failed']),\n setupError: errorSchema.optional(),\n teardownErrors: z.array(errorSchema).optional(),\n startedAt: timestampSchema,\n endedAt: timestampSchema,\n durationMs: z.number().nonnegative().finite(),\n })\n .optional(),\n artifacts: z\n .array(\n z.strictObject({\n name: z.string().min(1),\n uri: z.string().min(1),\n mediaType: z.string().min(1).optional(),\n }),\n )\n .optional(),\n metadata: z\n .record(\n z.string(),\n z.union([z.string(), z.number().finite(), z.boolean(), z.null()]),\n )\n .optional(),\n});\n\nconst attemptMatchesTask = (\n task: TestCaseTask,\n attempt: TestExecutorCaseAttemptDto,\n): boolean =>\n attempt.caseId === task.caseId &&\n attempt.projectName === task.projectName &&\n attempt.name === task.caseName &&\n attempt.sourcePath === task.sourcePath &&\n attempt.caseIndex === task.caseIndex &&\n isSafeResultPathSegment(attempt.runId);\n\nconst hasUnfinishedWork = (result: {\n executionStatus?: string;\n cleanup?: { status: string };\n pendingOperations?: readonly unknown[];\n}): boolean =>\n (result.executionStatus !== undefined &&\n result.executionStatus !== 'success') ||\n (result.cleanup !== undefined &&\n !['completed', 'not-required'].includes(result.cleanup.status)) ||\n (result.pendingOperations?.length ?? 0) > 0;\n\n/** Validate the complete, JSON-safe DTO returned across an Executor boundary. */\nexport function assertTestCaseTaskRunResult(\n task: TestCaseTask,\n value: unknown,\n): asserts value is TestCaseTaskRunResult {\n const parsed = resultSchema.safeParse(value);\n if (!parsed.success) {\n throw new TypeError(\n `Executor returned invalid transport data for ${task.caseId}: ${z.prettifyError(parsed.error)}`,\n );\n }\n const outcome = parsed.data.case;\n if (\n outcome.caseId !== task.caseId ||\n outcome.documentId !== task.documentId ||\n outcome.projectName !== task.projectName ||\n outcome.name !== task.caseName ||\n outcome.sourcePath !== task.sourcePath ||\n outcome.caseIndex !== task.caseIndex\n ) {\n throw new Error(\n `Executor returned a result that does not match task ${task.caseId}.`,\n );\n }\n const attempts = outcome.attempts ?? [];\n for (const attempt of attempts) {\n const steps = [\n ...attempt.beforeEach,\n ...attempt.steps,\n ...attempt.afterEach,\n ];\n if (\n attempt.status === 'success' &&\n (attempt.steps.length === 0 ||\n (attempt.executionErrors?.length ?? 0) > 0 ||\n steps.some((step) => step.status !== 'success') ||\n hasUnfinishedWork(attempt) ||\n (attempt.teardownErrors?.length ?? 0) > 0)\n ) {\n throw new TypeError(\n `Executor returned an inconsistent successful attempt for ${task.caseId}.`,\n );\n }\n }\n if (\n new Set(attempts.map((attempt) => attempt.runId)).size !== attempts.length\n ) {\n throw new TypeError(\n `Executor returned duplicate attempt IDs for ${task.caseId}.`,\n );\n }\n if (attempts.some((attempt) => !attemptMatchesTask(task, attempt))) {\n throw new TypeError(\n `Executor returned invalid attempts for ${task.caseId}.`,\n );\n }\n if (\n attempts.some((attempt, index) => attempt.attemptIndex !== index) ||\n attempts.length > task.retry + 1\n ) {\n throw new TypeError(\n `Executor returned a non-sequential attempt history for ${task.caseId}.`,\n );\n }\n const finalAttempt = attempts.at(-1);\n if (outcome.status === 'not-run') {\n if (outcome.run || attempts.length || !outcome.notRunReason) {\n throw new TypeError(\n `Executor returned an inconsistent not-run result for ${task.caseId}.`,\n );\n }\n } else if (\n outcome.notRunReason !== undefined ||\n !outcome.run ||\n !finalAttempt ||\n finalAttempt.status !== outcome.status ||\n outcome.run.runId !== finalAttempt.runId ||\n JSON.stringify(outcome.run) !== JSON.stringify(finalAttempt) ||\n attempts.slice(0, -1).some((attempt) => attempt.status !== 'failed')\n ) {\n throw new TypeError(\n `Executor returned an inconsistent ${outcome.status} result for ${task.caseId}.`,\n );\n }\n const reportRefs = [\n ...attempts.flatMap((attempt) => attempt.reportRefs ?? []),\n ...(parsed.data.document?.reportRefs ?? []),\n ];\n if (reportRefs.some((reference) => !isSafeResultPathSegment(reference))) {\n throw new TypeError(\n `Executor returned an invalid report reference for ${task.caseId}.`,\n );\n }\n const document = parsed.data.document;\n if (\n document?.status === 'success' &&\n (hasUnfinishedWork(document) ||\n (document.hostErrors?.length ?? 0) > 0 ||\n (document.executionErrors?.length ?? 0) > 0 ||\n [...document.beforeAll, ...document.afterAll].some(\n (step) => step.status !== 'success',\n ) ||\n (document.teardownErrors?.length ?? 0) > 0)\n ) {\n throw new TypeError(\n `Executor returned an inconsistent successful document for ${task.caseId}.`,\n );\n }\n const lifecycle = parsed.data.lifecycle;\n if (\n lifecycle?.status === 'success' &&\n (hasUnfinishedWork(lifecycle) ||\n lifecycle.setupError ||\n (lifecycle.teardownErrors?.length ?? 0) > 0)\n ) {\n throw new TypeError(\n `Executor returned an inconsistent successful lifecycle for ${task.caseId}.`,\n );\n }\n if (\n document &&\n (document.documentId !== task.documentId ||\n document.projectId !== task.projectId ||\n document.projectName !== task.projectName ||\n document.sourcePath !== task.sourcePath ||\n !isSafeResultPathSegment(document.documentRunId))\n ) {\n throw new Error(\n `Executor returned a document that does not match task ${task.caseId}.`,\n );\n }\n if (\n parsed.data.lifecycle &&\n parsed.data.lifecycle.projectName !== task.projectName\n ) {\n throw new Error(\n `Executor returned a lifecycle that does not match task ${task.caseId}.`,\n );\n }\n}\n","import { createHash } from 'node:crypto';\n\n/** Internal invocation identity keeps repeated legacy files distinct. */\nexport const createCaseInvocationId = (\n projectId: string,\n sourcePath: string,\n caseIndex: number,\n invocationIndex = 0,\n): string =>\n createHash('sha256')\n .update(\n JSON.stringify([\n projectId,\n sourcePath,\n caseIndex,\n ...(invocationIndex ? [invocationIndex] : []),\n ]),\n )\n .digest('hex');\n\nexport const createDocumentInvocationId = (\n projectId: string,\n sourcePath: string,\n invocationIndex = 0,\n): string =>\n createHash('sha256')\n .update(\n JSON.stringify([\n projectId,\n sourcePath,\n ...(invocationIndex ? [invocationIndex] : []),\n ]),\n )\n .digest('hex');\n","import {\n type ResolveNodeForNormalization,\n normalizeStep as coreNormalizeStep,\n normalizeSteps as coreNormalizeSteps,\n} from '@midscene/core/internal/test-runner';\nimport type { NormalizedStep } from './types';\nexport type { ResolveNodeForNormalization } from '@midscene/core/internal/test-runner';\n\nexport const normalizeStep: (\n value: unknown,\n index?: number,\n resolveNode?: ResolveNodeForNormalization,\n) => NormalizedStep = coreNormalizeStep;\nexport const normalizeSteps: (\n values: unknown,\n resolveNode?: ResolveNodeForNormalization,\n) => NormalizedStep[] = coreNormalizeSteps;\n","import type { TestRunReportValue } from '@midscene/core';\nimport {\n isReportSecretKey,\n sanitizeReportText,\n} from '@midscene/core/internal/test-runner';\nimport { JSON_SCHEMA, load } from 'js-yaml';\n\ninterface SourceNode {\n start: number;\n end: number;\n value: unknown;\n children: SourceNode[];\n}\n\n/** Keep author formatting while redacting values by parsed YAML keys, including aliases. */\nexport function parseWorkflowSource(source: string): {\n parsed: unknown;\n sourceYaml: TestRunReportValue;\n} {\n const stack: SourceNode[] = [];\n const nodes: SourceNode[] = [];\n const sensitiveNodes = new Set<SourceNode>();\n const sensitiveValues = new Set<unknown>();\n const redactedPaths = new Set<string>();\n // js-yaml removes the BOM before reporting source positions.\n const sourceOffset = source.charCodeAt(0) === 0xfeff ? 1 : 0;\n const parsed = load(source, {\n schema: JSON_SCHEMA,\n listener(event, state) {\n if (event === 'open') {\n stack.push({\n start: state.position + sourceOffset,\n end: 0,\n value: null,\n children: [],\n });\n return;\n }\n const node = stack.pop()!;\n node.end = state.position + sourceOffset;\n node.value = state.result;\n stack.at(-1)?.children.push(node);\n nodes.push(node);\n if (state.kind !== 'mapping') return;\n for (let index = 0; index < node.children.length; index += 2) {\n const key = node.children[index].value;\n const value = node.children[index + 1];\n if (typeof key !== 'string' || !isReportSecretKey(key) || !value)\n continue;\n sensitiveNodes.add(value);\n if (value.value !== null) sensitiveValues.add(value.value);\n redactedPaths.add(`$..[${JSON.stringify(key)}]`);\n }\n },\n });\n // Redact the definition as well when a secret value refers to a YAML anchor.\n const ranges = nodes\n .filter(\n (node) => sensitiveNodes.has(node) || sensitiveValues.has(node.value),\n )\n .sort((left, right) => left.start - right.start || right.end - left.end);\n let offset = 0;\n let redacted = '';\n for (const range of ranges) {\n if (range.start < offset) continue;\n const text = source.slice(range.start, range.end);\n const leading = text.match(/^\\s*/)?.[0] ?? '';\n const trailing = text.slice(leading.length).match(/\\s*$/)?.[0] ?? '';\n redacted += `${source.slice(offset, range.start)}${leading}\"[REDACTED]\"${trailing}`;\n offset = range.end;\n }\n redacted += source.slice(offset);\n const value = sanitizeReportText(redacted, 64 * 1024);\n return {\n parsed,\n sourceYaml: {\n value,\n ...(redactedPaths.size ? { redactedPaths: [...redactedPaths] } : {}),\n ...(value !== redacted ? { truncatedPaths: ['$'] } : {}),\n },\n };\n}\n","import type { JsonValue } from '../cli/test-project';\nimport { WorkflowParseError } from '../errors';\n\nexport interface VariableResolutionLocation {\n projectName: string;\n sourcePath: string;\n phase: 'beforeAll' | 'beforeEach' | 'steps' | 'afterEach' | 'afterAll';\n stepIndex: number;\n caseIndex?: number;\n}\n\nexport interface ResolveWorkflowVariablesOptions {\n variables?: Readonly<Record<string, JsonValue>>;\n env?: Readonly<NodeJS.ProcessEnv>;\n location: VariableResolutionLocation;\n}\n\nconst interpolationExpression =\n /\\$\\{\\{([A-Za-z_][A-Za-z0-9_]*)\\}\\}|\\$\\{([^{}]+)\\}/g;\nconst exactEnvExpression = /^\\$\\{\\{([A-Za-z_][A-Za-z0-9_]*)\\}\\}$/;\nconst exactProjectExpression = /^\\$\\{([^{}]+)\\}$/;\n\nconst missingVariable = (\n kind: 'environment' | 'project',\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): never => {\n throw new WorkflowParseError(\n `Undefined ${kind} variable \"${name}\" in ${options.location.sourcePath}.`,\n { ...options.location, variable: name, variableKind: kind },\n );\n};\n\nconst projectVariable = (\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): JsonValue => {\n if (!Object.hasOwn(options.variables ?? {}, name)) {\n return missingVariable('project', name, options);\n }\n return options.variables![name];\n};\n\nconst environmentVariable = (\n name: string,\n options: ResolveWorkflowVariablesOptions,\n): string => {\n const value = options.env?.[name];\n if (value === undefined) return missingVariable('environment', name, options);\n return value;\n};\n\nconst interpolationValue = (\n name: string,\n value: JsonValue,\n options: ResolveWorkflowVariablesOptions,\n): string => {\n if (typeof value === 'object' && value !== null) {\n throw new WorkflowParseError(\n `Project variable \"${name}\" must be a primitive when embedded in a string.`,\n {\n ...options.location,\n variable: name,\n variableKind: 'project',\n },\n );\n }\n return String(value);\n};\n\nconst resolveString = (\n value: string,\n options: ResolveWorkflowVariablesOptions,\n): JsonValue => {\n const exactEnv = exactEnvExpression.exec(value);\n if (exactEnv) return environmentVariable(exactEnv[1], options);\n const exactProject = exactProjectExpression.exec(value);\n if (exactProject) return projectVariable(exactProject[1], options);\n\n return value.replace(\n interpolationExpression,\n (_match, environmentName: string | undefined, projectName: string) =>\n environmentName\n ? environmentVariable(environmentName, options)\n : interpolationValue(\n projectName,\n projectVariable(projectName, options),\n options,\n ),\n );\n};\n\nexport const resolveWorkflowVariables = (\n value: unknown,\n options: ResolveWorkflowVariablesOptions,\n): unknown => {\n if (typeof value === 'string') return resolveString(value, options);\n if (Array.isArray(value)) {\n return value.map((child) => resolveWorkflowVariables(child, options));\n }\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, child]) => [\n key,\n resolveWorkflowVariables(child, options),\n ]),\n );\n }\n return value;\n};\n","import { readFileSync } from 'node:fs';\nimport { sep } from 'node:path';\nimport { classifyWorkflowDocumentFormat } from '@midscene/core/internal/test-runner';\nimport type { JsonValue } from '../cli/test-project';\nimport { WorkflowParseError } from '../errors';\nimport type { NodeDefinition } from '../node/types';\nimport { isSafeResultPathSegment } from '../result-path-segment';\nimport {\n createCaseInvocationId,\n createDocumentInvocationId,\n} from './identifiers';\nimport { normalizeSteps } from './normalize';\nimport { parseWorkflowSource } from './source';\nimport type {\n CollectedCase,\n CollectedWorkflowDocument,\n WorkflowDocumentSource,\n} from './types';\nimport { resolveWorkflowVariables } from './variables';\n\nexport interface CollectWorkflowDocumentOptions {\n resolveNode(name: string): NodeDefinition<any, any> | undefined;\n variables?: Readonly<Record<string, JsonValue>>;\n env?: Readonly<NodeJS.ProcessEnv>;\n}\n\nconst isMapping = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nexport class NativeWorkflowFormatError extends WorkflowParseError {\n readonly actualFormat: 'legacy' | 'legacy-batch' | 'mixed';\n\n constructor(\n actualFormat: 'legacy' | 'legacy-batch' | 'mixed',\n sourcePath: string,\n ) {\n super(\n actualFormat === 'legacy'\n ? `Legacy tasks/flow YAML is not supported by midscene-test: ${sourcePath}. Run it with \\`midscene ${sourcePath}\\`, or migrate the file to cases/steps.`\n : actualFormat === 'legacy-batch'\n ? `Legacy YAML batch configuration is not a midscene-test workflow document: ${sourcePath}. Run it with \\`midscene --config ${sourcePath}\\`, or migrate it to a native project config.`\n : `A workflow file cannot mix legacy tasks/flow with native cases/steps or lifecycle hooks: ${sourcePath}. Keep the formats in separate files and run each file with its matching command.`,\n { sourcePath, actualFormat, expectedFormat: 'native' },\n );\n this.actualFormat = actualFormat;\n }\n}\n\nconst rejectUnknownKeys = (\n value: Record<string, unknown>,\n allowed: readonly string[],\n label: string,\n) => {\n const allowedSet = new Set(allowed);\n const unknown = Object.keys(value).filter((key) => !allowedSet.has(key));\n if (unknown.length) {\n throw new WorkflowParseError(\n `${label} has unsupported field \"${unknown[0]}\".`,\n { field: unknown[0] },\n );\n }\n};\n\nexport const createCaseId = (\n projectId: string,\n sourcePath: string,\n caseIndex: number,\n): string => createCaseInvocationId(projectId, sourcePath, caseIndex);\n\nexport const createWorkflowDocumentId = (\n projectId: string,\n sourcePath: string,\n): string => createDocumentInvocationId(projectId, sourcePath);\n\nexport function collectWorkflowDocument(\n source: WorkflowDocumentSource,\n options: CollectWorkflowDocumentOptions,\n): CollectedWorkflowDocument {\n let snapshot: ReturnType<typeof parseWorkflowSource>;\n try {\n snapshot = parseWorkflowSource(readFileSync(source.absolutePath, 'utf8'));\n } catch (error) {\n throw new WorkflowParseError(\n `Failed to parse workflow document \"${source.sourcePath}\".`,\n { sourcePath: source.sourcePath },\n error,\n );\n }\n const { parsed, sourceYaml } = snapshot;\n\n if (!isMapping(parsed)) {\n throw new WorkflowParseError('Workflow document must be a mapping.');\n }\n const format = classifyWorkflowDocumentFormat(parsed);\n if (format === 'legacy' || format === 'legacy-batch' || format === 'mixed') {\n throw new NativeWorkflowFormatError(format, source.sourcePath);\n }\n rejectUnknownKeys(\n parsed,\n ['beforeAll', 'beforeEach', 'cases', 'afterEach', 'afterAll'],\n 'Workflow document',\n );\n if (!Array.isArray(parsed.cases) || parsed.cases.length === 0) {\n throw new WorkflowParseError(\n 'Workflow document must contain a non-empty cases array.',\n );\n }\n\n const sourcePath = source.sourcePath.split(sep).join('/');\n const resolveStepVariables = (\n step: ReturnType<typeof normalizeSteps>[number],\n phase: 'beforeAll' | 'beforeEach' | 'steps' | 'afterEach' | 'afterAll',\n stepIndex: number,\n caseIndex?: number,\n ) => ({\n ...step,\n templateInput: step.input,\n input: resolveWorkflowVariables(step.input, {\n variables: options.variables,\n env: options.env ?? process.env,\n location: {\n projectName: source.projectName ?? source.projectId,\n sourcePath,\n phase,\n stepIndex,\n ...(caseIndex === undefined ? {} : { caseIndex }),\n },\n }) as typeof step.input,\n });\n const normalizeLifecycle = (\n phase: 'beforeAll' | 'beforeEach' | 'afterEach' | 'afterAll',\n ) => {\n const value = parsed[phase];\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new WorkflowParseError(\n `Workflow document ${phase} must be an array.`,\n { phase },\n );\n }\n return normalizeSteps(value, options.resolveNode).map(\n (normalized, stepIndex) => {\n const resolved = options.resolveNode(normalized.node);\n if (!resolved) {\n throw new WorkflowParseError(\n `Workflow document ${phase} step ${stepIndex + 1} references unknown node \"${normalized.node}\".`,\n { phase, stepIndex, node: normalized.node },\n );\n }\n return resolveStepVariables(normalized, phase, stepIndex);\n },\n );\n };\n const lifecycle = {\n beforeAll: normalizeLifecycle('beforeAll'),\n beforeEach: normalizeLifecycle('beforeEach'),\n afterEach: normalizeLifecycle('afterEach'),\n afterAll: normalizeLifecycle('afterAll'),\n };\n const ids = new Set<string>();\n const cases: CollectedCase[] = parsed.cases.map((definition, caseIndex) => {\n if (!isMapping(definition)) {\n throw new WorkflowParseError(`Case ${caseIndex + 1} must be a mapping.`, {\n caseIndex,\n });\n }\n rejectUnknownKeys(\n definition,\n ['id', 'name', 'tags', 'resources', 'steps'],\n `Case ${caseIndex + 1}`,\n );\n if (\n definition.id !== undefined &&\n !isSafeResultPathSegment(definition.id)\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} id must start with an ASCII letter or number, contain only letters, numbers, dots, underscores, or hyphens, and be at most 128 characters.`,\n { caseIndex },\n );\n }\n if (\n typeof definition.name !== 'string' ||\n definition.name.trim().length === 0\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} name must be a non-empty string.`,\n { caseIndex },\n );\n }\n if (!Array.isArray(definition.steps) || definition.steps.length === 0) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} steps must be a non-empty array.`,\n { caseIndex },\n );\n }\n const tags = definition.tags ?? [];\n if (\n !Array.isArray(tags) ||\n tags.some((tag) => typeof tag !== 'string' || tag.trim().length === 0)\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} tags must be an array of non-empty strings.`,\n { caseIndex },\n );\n }\n const resources = definition.resources ?? [];\n if (\n !Array.isArray(resources) ||\n resources.some(\n (resource) =>\n typeof resource !== 'string' || resource.trim().length === 0,\n )\n ) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} resources must be an array of non-empty strings.`,\n { caseIndex },\n );\n }\n if (new Set(resources).size !== resources.length) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} resources must not contain duplicates.`,\n { caseIndex },\n );\n }\n\n const steps = normalizeSteps(definition.steps, options.resolveNode).map(\n (normalized, stepIndex) => {\n if (!options.resolveNode(normalized.node)) {\n throw new WorkflowParseError(\n `Case ${caseIndex + 1} step ${stepIndex + 1} references unknown node \"${normalized.node}\".`,\n { caseIndex, stepIndex, node: normalized.node },\n );\n }\n return resolveStepVariables(normalized, 'steps', stepIndex, caseIndex);\n },\n );\n const caseId =\n typeof definition.id === 'string'\n ? definition.id\n : createCaseId(source.projectId, sourcePath, caseIndex);\n if (ids.has(caseId)) {\n throw new WorkflowParseError(`Case id collision: ${caseId}.`, {\n caseId,\n });\n }\n ids.add(caseId);\n\n return {\n caseId,\n projectId: source.projectId,\n sourcePath,\n caseIndex,\n definition: {\n ...(typeof definition.id === 'string' ? { id: definition.id } : {}),\n name: definition.name,\n tags: tags as string[],\n ...(resources.length > 0 ? { resources: resources as string[] } : {}),\n steps,\n },\n };\n });\n\n return {\n documentId: createWorkflowDocumentId(source.projectId, sourcePath),\n projectId: source.projectId,\n sourcePath,\n sourceYaml,\n lifecycle,\n cases,\n } satisfies CollectedWorkflowDocument;\n}\n","import { createHash } from 'node:crypto';\nimport { mkdir, writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, sep } from 'node:path';\nimport {\n WorkflowPublicationError,\n sanitizeReportError,\n} from '@midscene/core/internal/test-runner';\nimport type { CaseRunResult, WorkflowDocumentRunResult } from '../engine/types';\nimport type { PreparedExecutionProject } from './execution-plan';\nimport type { TestProjectCollectionError, TestProjectRunResult } from './types';\n\nconst writeJson = async (path: string, value: unknown) => {\n try {\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, JSON.stringify(value, null, 2));\n } catch (error) {\n throw new WorkflowPublicationError('write-result', path, error);\n }\n};\n\nexport const writeTestRunPlan = (\n runDir: string,\n projects: readonly PreparedExecutionProject[],\n) =>\n writeJson(join(runDir, 'plan.json'), {\n schemaVersion: 1,\n createdAt: new Date().toISOString(),\n projects: projects.map((item) => ({\n projectId: item.project.projectId,\n name: item.project.name,\n documents: item.plans ?? [],\n })),\n });\n\nconst toPosix = (value: string): string => value.split(sep).join('/');\n\nexport const caseAttemptResultPath = (\n projectId: string,\n documentId: string,\n result: CaseRunResult,\n): string =>\n toPosix(\n join(\n projectId,\n 'documents',\n documentId,\n 'cases',\n result.caseId,\n `${result.runId}.json`,\n ),\n );\n\nexport const workflowDocumentResultPath = (\n result: WorkflowDocumentRunResult,\n): string =>\n toPosix(\n join(\n result.projectId,\n 'documents',\n result.documentId,\n result.attemptIndex === undefined\n ? 'document.json'\n : `${result.documentRunId}.json`,\n ),\n );\n\nexport const collectionErrorPath = (\n projectId: string,\n sourcePath: string,\n): string => {\n const id = createHash('sha256')\n .update(JSON.stringify([projectId, sourcePath]))\n .digest('hex');\n return toPosix(join(projectId, 'collection-errors', `${id}.json`));\n};\n\nexport const writeWorkflowDocumentResult = (\n runDir: string,\n result: WorkflowDocumentRunResult,\n) => {\n const { documentRunId: _documentRunId, ...persistedResult } = result;\n return writeJson(\n join(runDir, workflowDocumentResultPath(result)),\n persistedResult,\n );\n};\n\nexport const writeCaseAttemptResult = (\n runDir: string,\n projectId: string,\n documentId: string,\n result: CaseRunResult,\n) => {\n const { runId: attemptId, ...persistedResult } = result;\n return writeJson(\n join(runDir, caseAttemptResultPath(projectId, documentId, result)),\n {\n ...persistedResult,\n attemptId,\n },\n );\n};\n\nexport const writeCollectionError = (\n runDir: string,\n collectionError: TestProjectCollectionError,\n) => {\n return writeJson(\n join(\n runDir,\n collectionErrorPath(\n collectionError.projectId,\n collectionError.sourcePath,\n ),\n ),\n { kind: 'collection-error', ...collectionError },\n );\n};\n\nconst relativeToSummary = (summaryPath: string, target: string): string => {\n const value = relative(dirname(summaryPath), target);\n return toPosix(value || '.');\n};\n\nconst errorJson = sanitizeReportError;\n\nexport interface TestProjectResultFileOptions {\n projectRoot: string;\n configPath?: string;\n result: TestProjectRunResult;\n}\n\nexport const writeTestProjectRunResult = (\n options: TestProjectResultFileOptions,\n) => {\n const { result } = options;\n const fact = (path: string) => toPosix(path);\n\n return writeJson(result.summaryPath, {\n schemaVersion: result.schemaVersion,\n runId: result.runId,\n startedAt: result.startedAt,\n endedAt: result.endedAt,\n durationMs: result.durationMs,\n status: result.status,\n exitCode: result.exitCode,\n ...(result.errors?.length ? { errors: result.errors.map(errorJson) } : {}),\n projectRoot: options.projectRoot,\n ...(options.configPath ? { configPath: options.configPath } : {}),\n factsRoot: '.',\n plan: 'plan.json',\n ...(result.operationLog\n ? {\n operationLog: {\n ...result.operationLog,\n path: relativeToSummary(\n result.summaryPath,\n result.operationLog.path,\n ),\n },\n }\n : {}),\n reportDir: relativeToSummary(result.summaryPath, result.reportDir),\n ...(result.reportPath\n ? { report: relativeToSummary(result.summaryPath, result.reportPath) }\n : {}),\n ...(result.markdownPath\n ? { markdown: relativeToSummary(result.summaryPath, result.markdownPath) }\n : {}),\n summary: result.summary,\n projects: result.projects.map((project) => ({\n projectId: project.projectId,\n name: project.name,\n status: project.status,\n retry: project.retry,\n fileSelection: project.fileSelection,\n tagSelection: project.tagSelection,\n sourceCount: project.sourceCount,\n selectedCaseCount: project.selectedCaseCount,\n filteredCaseCount: project.filteredCaseCount,\n ...(project.lifecycle\n ? {\n lifecycle: {\n status: project.lifecycle.status,\n startedAt: project.lifecycle.startedAt,\n endedAt: project.lifecycle.endedAt,\n durationMs: project.lifecycle.durationMs,\n ...(project.lifecycle.cleanup\n ? { cleanup: project.lifecycle.cleanup }\n : {}),\n ...(project.lifecycle.pendingOperations\n ? { pendingOperations: project.lifecycle.pendingOperations }\n : {}),\n ...(project.lifecycle.setupError\n ? { setupError: errorJson(project.lifecycle.setupError) }\n : {}),\n ...(project.lifecycle.teardownErrors\n ? {\n teardownErrors:\n project.lifecycle.teardownErrors.map(errorJson),\n }\n : {}),\n },\n }\n : {}),\n cases: project.cases.map((outcome) => ({\n ...(outcome.documentRunId\n ? { documentRunId: outcome.documentRunId }\n : {}),\n documentId: outcome.documentId,\n caseId: outcome.caseId,\n sourcePath: outcome.sourcePath,\n caseIndex: outcome.caseIndex,\n name: outcome.name,\n status: outcome.status,\n ...(outcome.notRunReason ? { notRunReason: outcome.notRunReason } : {}),\n ...(outcome.execution\n ? {\n execution: {\n executor: outcome.execution.executor,\n resources: outcome.execution.resources,\n ...(outcome.execution.attempts === undefined\n ? {}\n : { attempts: outcome.execution.attempts }),\n ...(outcome.execution.failure\n ? { failure: outcome.execution.failure }\n : {}),\n ...(outcome.execution.artifacts\n ? { artifacts: outcome.execution.artifacts }\n : {}),\n ...(outcome.execution.metadata\n ? { metadata: outcome.execution.metadata }\n : {}),\n ...(outcome.execution.lifecycle\n ? {\n lifecycle: {\n status: outcome.execution.lifecycle.status,\n startedAt: outcome.execution.lifecycle.startedAt,\n endedAt: outcome.execution.lifecycle.endedAt,\n durationMs: outcome.execution.lifecycle.durationMs,\n ...(outcome.execution.lifecycle.setupError\n ? {\n setupError: errorJson(\n outcome.execution.lifecycle.setupError,\n ),\n }\n : {}),\n ...(outcome.execution.lifecycle.teardownErrors\n ? {\n teardownErrors:\n outcome.execution.lifecycle.teardownErrors.map(\n errorJson,\n ),\n }\n : {}),\n },\n }\n : {}),\n },\n }\n : {}),\n ...(outcome.attempts\n ? {\n attempts: outcome.attempts.map((attempt) => ({\n attemptId: attempt.runId,\n attemptIndex: attempt.attemptIndex,\n status: attempt.status,\n ...(attempt.cleanup ? { cleanup: attempt.cleanup } : {}),\n ...(attempt.pendingOperations\n ? { pendingOperations: attempt.pendingOperations }\n : {}),\n ...(attempt.executionStatus\n ? { executionStatus: attempt.executionStatus }\n : {}),\n ...(attempt.retryDecision\n ? { retryDecision: attempt.retryDecision }\n : {}),\n resultFile: fact(\n caseAttemptResultPath(\n project.projectId,\n outcome.documentId,\n attempt,\n ),\n ),\n ...(attempt.reportPaths?.length\n ? {\n reports: attempt.reportPaths.map((path) =>\n relativeToSummary(result.summaryPath, path),\n ),\n }\n : {}),\n })),\n }\n : {}),\n })),\n documents: project.documents.map((document) => ({\n documentId: document.documentId,\n ...(document.attemptIndex === undefined\n ? {}\n : {\n attemptIndex: document.attemptIndex,\n documentRunId: document.documentRunId,\n }),\n sourcePath: document.sourcePath,\n status: document.status,\n ...(document.cleanup ? { cleanup: document.cleanup } : {}),\n ...(document.pendingOperations\n ? { pendingOperations: document.pendingOperations }\n : {}),\n ...(document.executionStatus\n ? { executionStatus: document.executionStatus }\n : {}),\n ...(document.retryDecision\n ? { retryDecision: document.retryDecision }\n : {}),\n resultFile: fact(workflowDocumentResultPath(document)),\n ...(document.reportPaths?.length\n ? {\n reports: document.reportPaths.map((path) =>\n relativeToSummary(result.summaryPath, path),\n ),\n }\n : {}),\n })),\n collectionErrors: project.collectionErrors.map((error) => ({\n sourcePath: error.sourcePath,\n errorFile: fact(collectionErrorPath(error.projectId, error.sourcePath)),\n })),\n })),\n });\n};\n","import { NodeRegistry as CoreNodeRegistry } from '@midscene/core/internal/test-runner';\nimport type { NodeDefinition } from '../node/types';\n\nexport type NodeRegistry = Omit<\n CoreNodeRegistry,\n 'get' | 'require' | 'register' | 'definitions'\n> & {\n get(name: string): NodeDefinition<any, any> | undefined;\n require(name: string): NodeDefinition<any, any>;\n register<TInput, TData>(node: NodeDefinition<TInput, TData>): NodeRegistry;\n definitions(): readonly NodeDefinition<any, any, any>[];\n};\nexport const NodeRegistry: {\n new (nodes?: readonly NodeDefinition<any, any>[]): NodeRegistry;\n} = CoreNodeRegistry;\n","import { dirname, isAbsolute, resolve, sep } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport { require as tsxRequire } from 'tsx/cjs/api';\nimport { NodeRegistry } from '../engine/registry';\nimport type { NodeDefinition } from '../node/types';\nimport type { TestExecutor } from './test-executor';\n\nimport type {\n JsonValue,\n ProjectSetupDefinition,\n ResolvedExecutionProject,\n TestFileSelection,\n TestTagSelection,\n} from '@midscene/core/internal/test-runner';\nexport type {\n JsonPrimitive,\n JsonValue,\n ProjectSetupContext,\n ProjectSetupDefinition,\n ProjectTeardown,\n ProjectTeardownContext,\n ResolvedExecutionProject,\n TestFileSelection,\n TestTagSelection,\n} from '@midscene/core/internal/test-runner';\nimport type { ExecutionProjectDefinition as CoreExecutionProjectDefinition } from '@midscene/core/internal/test-runner';\n\nexport type ExecutionProjectDefinition<TContext = unknown> = Omit<\n CoreExecutionProjectDefinition<TContext>,\n 'nodes'\n> & {\n nodes?: readonly NodeDefinition<any, any, TContext>[];\n};\n\nexport interface TestOptions {\n maxConcurrency?: number;\n bail?: number;\n testTimeout?: number;\n executionUnit?: 'project' | 'case';\n executorRetry?: number;\n}\n\nexport interface ResolvedTestOptions {\n maxConcurrency: number;\n bail: number;\n testTimeout: number;\n executionUnit: 'project' | 'case';\n executorRetry: number;\n}\n\nexport interface TestOutputDefinition {\n reportDir?: string;\n}\n\nexport interface ResolvedTestOutputDefinition {\n reportDir: string;\n}\n\nconst projectIdFromIndex = (index: number): string => `project-${index}`;\n\nexport interface TestProjectDefinition<TContext = undefined> {\n setup?: ProjectSetupDefinition<TContext>;\n projects?: readonly ExecutionProjectDefinition<TContext>[];\n test?: TestOptions;\n output?: TestOutputDefinition;\n nodes?: readonly NodeDefinition<any, any, TContext>[];\n executor?: TestExecutor;\n}\n\nexport interface LoadedExecutionProject<TProjectContext = unknown>\n extends ResolvedExecutionProject<TProjectContext> {\n /** Effective Nodes: globals plus project-local overrides. */\n readonly nodes: NodeRegistry;\n}\n\nexport interface LoadedTestProject<TContext = undefined> {\n projects: readonly LoadedExecutionProject<TContext>[];\n hasExplicitProjects: boolean;\n test: ResolvedTestOptions;\n output: ResolvedTestOutputDefinition;\n nodes: NodeRegistry;\n executor?: TestExecutor;\n resolveNode(name: string): NodeDefinition<any, any, TContext> | undefined;\n}\n\nexport const defineTestProject = <TContext = undefined>(\n definition: TestProjectDefinition<TContext>,\n): TestProjectDefinition<TContext> => definition;\n\nexport const defineProjectSetup = <TProjectContext>(\n definition: ProjectSetupDefinition<TProjectContext>,\n): ProjectSetupDefinition<TProjectContext> => definition;\n\nconst getDefaultExport = (loaded: unknown, absolutePath: string): unknown => {\n if (typeof loaded === 'object' && loaded !== null && 'default' in loaded) {\n const defaultExport = (loaded as { default: unknown }).default;\n if (\n typeof defaultExport === 'object' &&\n defaultExport !== null &&\n '__esModule' in defaultExport\n ) {\n if ('default' in defaultExport) {\n return (defaultExport as { default: unknown }).default;\n }\n throw new TypeError(\n `Midscene config \"${absolutePath}\" must have a default export.`,\n );\n }\n return defaultExport;\n }\n throw new TypeError(\n `Midscene config \"${absolutePath}\" must have a default export.`,\n );\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst rejectUnknownKeys = (\n value: Record<string, unknown>,\n allowedKeys: readonly string[],\n label: string,\n): void => {\n const allowed = new Set(allowedKeys);\n const unknown = Object.keys(value).find((key) => !allowed.has(key));\n if (unknown) {\n throw new TypeError(\n `Midscene config ${label}.${unknown} is not supported.`,\n );\n }\n};\n\nconst isAbsolutePattern = (pattern: string): boolean =>\n isAbsolute(pattern) ||\n /^[A-Za-z]:[\\\\/]/.test(pattern) ||\n pattern.startsWith('\\\\\\\\');\n\nconst validatePatterns = (\n value: unknown,\n field: 'include' | 'exclude',\n label = 'files',\n allowEmptyInclude = false,\n): readonly string[] => {\n if (!Array.isArray(value)) {\n throw new TypeError(`Midscene config ${label}.${field} must be an array.`);\n }\n if (field === 'include' && value.length === 0 && !allowEmptyInclude) {\n throw new TypeError(\n `Midscene config ${label}.include must be a non-empty array.`,\n );\n }\n\n return value.map((pattern, index) => {\n if (typeof pattern !== 'string' || pattern.trim().length === 0) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be a non-empty string.`,\n );\n }\n if (isAbsolutePattern(pattern)) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be relative to the project root.`,\n );\n }\n if (pattern.split(/[\\\\/]/).includes('..')) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must not contain a \"..\" path segment.`,\n );\n }\n if (pattern.includes('\\\\')) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must use POSIX path separators (/).`,\n );\n }\n if (pattern.startsWith('!')) {\n if (field === 'include') {\n throw new TypeError(\n `Midscene config ${label}.include[${index}] must not be a negated pattern. Use files.exclude instead.`,\n );\n }\n throw new TypeError(\n `Midscene config ${label}.exclude[${index}] must not be a negated pattern.`,\n );\n }\n return pattern;\n });\n};\n\nexport const validateTestFileSelection = (\n value: unknown,\n label = 'files',\n): TestFileSelection | undefined => {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(value, ['include', 'exclude'], label);\n const include = validatePatterns(value.include, 'include', label);\n const exclude =\n value.exclude === undefined\n ? undefined\n : validatePatterns(value.exclude, 'exclude', label);\n return Object.freeze({\n include: Object.freeze(include),\n ...(exclude ? { exclude: Object.freeze(exclude) } : {}),\n });\n};\n\nconst validateTagList = (\n value: unknown,\n field: 'include' | 'exclude',\n label: string,\n): readonly string[] => {\n if (value === undefined) return [];\n if (!Array.isArray(value)) {\n throw new TypeError(`Midscene config ${label}.${field} must be an array.`);\n }\n return value.map((tag, index) => {\n if (typeof tag !== 'string' || tag.trim().length === 0) {\n throw new TypeError(\n `Midscene config ${label}.${field}[${index}] must be a non-empty string.`,\n );\n }\n return tag;\n });\n};\n\nconst validateTagSelection = (\n value: unknown,\n label: string,\n): Readonly<Required<TestTagSelection>> => {\n if (value === undefined) return Object.freeze({ include: [], exclude: [] });\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n return Object.freeze({\n include: Object.freeze(validateTagList(value.include, 'include', label)),\n exclude: Object.freeze(validateTagList(value.exclude, 'exclude', label)),\n });\n};\n\nfunction assertJsonValue(\n value: unknown,\n path: string,\n seen: Set<unknown>,\n): asserts value is JsonValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return;\n }\n if (typeof value === 'number') {\n if (Number.isFinite(value)) return;\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (typeof value !== 'object' || value === undefined) {\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (\n !Array.isArray(value) &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n Object.getPrototypeOf(value) !== null\n ) {\n throw new TypeError(`Midscene config ${path} must be JSON-compatible.`);\n }\n if (seen.has(value)) {\n throw new TypeError(`Midscene config ${path} must not contain cycles.`);\n }\n seen.add(value);\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n assertJsonValue(item, `${path}[${index}]`, seen),\n );\n } else {\n for (const [key, child] of Object.entries(value)) {\n assertJsonValue(child, `${path}.${key}`, seen);\n }\n }\n seen.delete(value);\n}\n\nconst deepFreezeJson = <T extends JsonValue>(value: T): T => {\n if (typeof value === 'object' && value !== null) {\n for (const child of Object.values(value)) deepFreezeJson(child);\n Object.freeze(value);\n }\n return value;\n};\n\nconst validateVariables = (\n value: unknown,\n label: string,\n): Readonly<Record<string, JsonValue>> => {\n if (value === undefined) return Object.freeze({});\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n assertJsonValue(value, label, new Set());\n return deepFreezeJson(value as Record<string, JsonValue>);\n};\n\nconst validateSetup = <TSetup>(\n value: unknown,\n label: string,\n): TSetup | undefined => {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(value, ['name', 'setup'], label);\n if (typeof value.name !== 'string' || value.name.trim().length === 0) {\n throw new TypeError(`Midscene config ${label}.name must be non-empty.`);\n }\n if (typeof value.setup !== 'function') {\n throw new TypeError(`Midscene config ${label}.setup must be a function.`);\n }\n return value as unknown as TSetup;\n};\n\nconst validatePositiveInteger = (\n value: unknown,\n fallback: number,\n label: string,\n): number => {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || (value as number) <= 0) {\n throw new TypeError(`Midscene config ${label} must be a positive integer.`);\n }\n return value as number;\n};\n\nconst validateNonNegativeInteger = (\n value: unknown,\n fallback: number,\n label: string,\n): number => {\n if (value === undefined) return fallback;\n if (!Number.isInteger(value) || (value as number) < 0) {\n throw new TypeError(\n `Midscene config ${label} must be a non-negative integer.`,\n );\n }\n return value as number;\n};\n\nconst validateExecutionProjects = <TProjectContext>(\n value: unknown,\n defaultSetup: unknown,\n globalNodes: NodeRegistry,\n): {\n projects: readonly LoadedExecutionProject<TProjectContext>[];\n hasExplicitProjects: boolean;\n} => {\n if (value === undefined) {\n const setup = validateSetup<ProjectSetupDefinition<TProjectContext>>(\n defaultSetup,\n 'setup',\n );\n return {\n hasExplicitProjects: false,\n projects: Object.freeze([\n Object.freeze({\n projectId: projectIdFromIndex(0),\n name: 'default',\n ...(setup ? { setup } : {}),\n tags: Object.freeze({ include: [], exclude: [] }),\n retry: 0,\n variables: Object.freeze({}),\n nodes: new NodeRegistry(globalNodes.definitions()),\n }),\n ]),\n };\n }\n if (defaultSetup !== undefined) {\n throw new TypeError(\n 'Midscene config setup cannot be used together with projects. Move setup to projects[].setup.',\n );\n }\n if (!Array.isArray(value) || value.length === 0) {\n throw new TypeError(\n 'Midscene config projects must be a non-empty array when declared.',\n );\n }\n const names = new Set<string>();\n const projects = value.map((candidate, index) => {\n const label = `projects[${index}]`;\n if (!isRecord(candidate)) {\n throw new TypeError(`Midscene config ${label} must be an object.`);\n }\n rejectUnknownKeys(\n candidate,\n ['name', 'setup', 'nodes', 'files', 'tags', 'retry', 'variables'],\n label,\n );\n if (\n typeof candidate.name !== 'string' ||\n candidate.name.trim().length === 0\n ) {\n throw new TypeError(`Midscene config ${label}.name must be non-empty.`);\n }\n if (names.has(candidate.name)) {\n throw new TypeError(\n `Midscene config project name \"${candidate.name}\" must be unique.`,\n );\n }\n names.add(candidate.name);\n const files = validateTestFileSelection(candidate.files, `${label}.files`);\n if (candidate.nodes !== undefined && !Array.isArray(candidate.nodes)) {\n throw new TypeError(`Midscene config ${label}.nodes must be an array.`);\n }\n const localNodes = new NodeRegistry(\n candidate.nodes as NodeDefinition[] | undefined,\n );\n const nodes = new NodeRegistry([\n ...globalNodes.definitions().filter((node) => !localNodes.has(node.name)),\n ...localNodes.definitions(),\n ]);\n return Object.freeze({\n projectId: projectIdFromIndex(index),\n name: candidate.name,\n nodes,\n ...(files ? { files } : {}),\n tags: validateTagSelection(candidate.tags, `${label}.tags`),\n retry: validateNonNegativeInteger(candidate.retry, 0, `${label}.retry`),\n variables: validateVariables(candidate.variables, `${label}.variables`),\n ...(candidate.setup === undefined\n ? {}\n : {\n setup: validateSetup<ProjectSetupDefinition<TProjectContext>>(\n candidate.setup,\n `${label}.setup`,\n )!,\n }),\n });\n });\n return { projects: Object.freeze(projects), hasExplicitProjects: true };\n};\n\nconst validateTestOptions = (value: unknown): ResolvedTestOptions => {\n if (value !== undefined && !isRecord(value)) {\n throw new TypeError('Midscene config test must be an object.');\n }\n const candidate = (value ?? {}) as Record<string, unknown>;\n const executionUnit = candidate.executionUnit ?? 'project';\n if (executionUnit !== 'project' && executionUnit !== 'case') {\n throw new TypeError(\n 'Midscene config test.executionUnit must be \"project\" or \"case\".',\n );\n }\n return Object.freeze({\n maxConcurrency: validatePositiveInteger(\n candidate.maxConcurrency,\n 1,\n 'test.maxConcurrency',\n ),\n bail: validateNonNegativeInteger(candidate.bail, 0, 'test.bail'),\n testTimeout: validatePositiveInteger(\n candidate.testTimeout,\n 120_000,\n 'test.testTimeout',\n ),\n executionUnit,\n executorRetry: validateNonNegativeInteger(\n candidate.executorRetry,\n 0,\n 'test.executorRetry',\n ),\n });\n};\n\nconst validateTestExecutor = (value: unknown): TestExecutor | undefined => {\n if (value === undefined) return undefined;\n if (!isRecord(value)) {\n throw new TypeError('Midscene config executor must be an object.');\n }\n rejectUnknownKeys(value, ['name', 'execute'], 'executor');\n if (typeof value.name !== 'string' || value.name.trim().length === 0) {\n throw new TypeError('Midscene config executor.name must be non-empty.');\n }\n if (typeof value.execute !== 'function') {\n throw new TypeError('Midscene config executor.execute must be a function.');\n }\n return Object.freeze(value as unknown as TestExecutor);\n};\n\nconst validateOutputPath = (\n value: unknown,\n fallback: string,\n label: string,\n): string => {\n if (value === undefined) return fallback;\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new TypeError(`Midscene config ${label} must be non-empty.`);\n }\n return value;\n};\n\nconst validateOutput = (value: unknown): ResolvedTestOutputDefinition => {\n if (value !== undefined && !isRecord(value)) {\n throw new TypeError('Midscene config output must be an object.');\n }\n const candidate = (value ?? {}) as Record<string, unknown>;\n rejectUnknownKeys(candidate, ['reportDir'], 'output');\n return Object.freeze({\n reportDir: validateOutputPath(\n candidate.reportDir,\n './midscene_run/report',\n 'output.reportDir',\n ),\n });\n};\n\nconst validateTestProjectDefinition = <TContext>(\n definition: unknown,\n): LoadedTestProject<TContext> => {\n if (!isRecord(definition)) {\n throw new TypeError('Midscene config must default export an object.');\n }\n if (definition.nodes !== undefined && !Array.isArray(definition.nodes)) {\n throw new TypeError('Midscene config nodes must be an array.');\n }\n if ('setupWorkflow' in definition) {\n throw new TypeError(\n 'Midscene config setupWorkflow is no longer supported. Use setup or projects[].setup instead.',\n );\n }\n if ('setupDocument' in definition) {\n throw new TypeError(\n 'Midscene config setupDocument is not supported. Use setup or projects[].setup for resources, and beforeAll/afterAll for document lifecycle steps.',\n );\n }\n if ('root' in definition) {\n throw new TypeError(\n 'Midscene config root is not supported. Pass the Test Project directory to midscene-test instead.',\n );\n }\n if ('files' in definition) {\n throw new TypeError(\n 'Midscene config files is not supported at the root. Move it to projects[].files.',\n );\n }\n if ('testRunner' in definition) {\n throw new TypeError(\n 'Midscene config testRunner is not supported. Rename it to test.',\n );\n }\n rejectUnknownKeys(\n definition,\n ['setup', 'projects', 'test', 'output', 'nodes', 'executor'],\n 'root',\n );\n const nodes = new NodeRegistry(\n definition.nodes as NodeDefinition[] | undefined,\n );\n const resolvedProjects = validateExecutionProjects<TContext>(\n definition.projects,\n definition.setup,\n nodes,\n );\n const test = validateTestOptions(definition.test);\n const executor = validateTestExecutor(definition.executor);\n if (executor && test.executionUnit !== 'case') {\n throw new TypeError(\n 'Midscene config executor requires test.executionUnit to be \"case\".',\n );\n }\n return {\n ...resolvedProjects,\n test,\n output: validateOutput(definition.output),\n nodes,\n ...(executor ? { executor } : {}),\n resolveNode: (name) =>\n nodes.get(name) as NodeDefinition<any, any, TContext> | undefined,\n };\n};\n\nconst assertSupportedConfig = (absolutePath: string): '.ts' | '.mjs' => {\n if (!absolutePath.endsWith('.ts') && !absolutePath.endsWith('.mjs')) {\n const extension = absolutePath.match(/(\\.[^./\\\\]+)$/)?.[1] ?? '(none)';\n throw new TypeError(\n `Unsupported Midscene config extension: ${extension}. Supported extensions: .ts, .mjs.`,\n );\n }\n return absolutePath.endsWith('.mjs') ? '.mjs' : '.ts';\n};\n\nconst canRetryWithCjsLoader = (error: unknown): error is Error => {\n if (!(error instanceof Error)) return false;\n const errorCode = (error as Error & { code?: string }).code;\n return (\n (error instanceof SyntaxError &&\n /^Unexpected (?:identifier|reserved word|token)/.test(error.message)) ||\n errorCode === 'ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX' ||\n (errorCode === 'ERR_UNKNOWN_FILE_EXTENSION' &&\n /^Unknown file extension\\b/.test(error.message))\n );\n};\n\nexport async function loadTestProject<TContext = undefined>(\n configPath?: string,\n): Promise<LoadedTestProject<TContext>> {\n if (!configPath) {\n return validateTestProjectDefinition<TContext>({\n nodes: [],\n });\n }\n\n const absolutePath = resolve(configPath);\n const extension = assertSupportedConfig(absolutePath);\n let loaded: unknown;\n try {\n if (extension === '.mjs') {\n loaded = await import(pathToFileURL(absolutePath).href);\n } else {\n // Select tsx's ESM entry even when this loader is built as CommonJS.\n // Its CommonJS entry can resolve the async loader relative to the wrong directory.\n const { tsImport } = await import('tsx/esm/api');\n loaded = await tsImport(pathToFileURL(absolutePath).href, {\n parentURL: pathToFileURL(`${dirname(absolutePath)}${sep}`).href,\n tsconfig: false,\n });\n }\n } catch (error) {\n try {\n if (extension === '.mjs' || !canRetryWithCjsLoader(error)) throw error;\n loaded = tsxRequire(absolutePath, pathToFileURL(absolutePath));\n } catch (fallbackError) {\n const message =\n fallbackError instanceof Error ? `: ${fallbackError.message}` : '';\n throw new Error(\n `Failed to load Midscene config \"${absolutePath}\"${message}`,\n { cause: fallbackError },\n );\n }\n }\n\n return validateTestProjectDefinition<TContext>(\n getDefaultExport(loaded, absolutePath),\n );\n}\n","import { existsSync, readdirSync, statSync } from 'node:fs';\nimport { isAbsolute, join, relative, resolve, sep } from 'node:path';\nimport type { CollectedWorkflowDocument } from '@midscene/core/internal/test-runner';\nimport { buildTestRunReportPlan } from '@midscene/core/internal/test-runner';\nimport { globSync } from 'tinyglobby';\nimport { WorkflowError, WorkflowParseError } from '../errors';\nimport { collectWorkflowDocument } from '../parser/collect';\nimport type {\n PreparedDocumentInvocation,\n PreparedExecutionProject,\n ProjectPreparationOptions,\n} from './execution-plan';\nimport { writeCollectionError } from './result-store';\nimport type { LoadedExecutionProject, TestFileSelection } from './test-project';\nimport { validateTestFileSelection } from './test-project';\nimport type { TestProjectCollectionError } from './types';\n\nexport const CONFIG_NAMES = [\n 'midscene.config.ts',\n 'midscene.config.mjs',\n] as const;\nconst CONFIG_PREFIX = 'midscene.config.';\nconst ALWAYS_IGNORED_PATTERNS = [\n '.git/**',\n '.midscene/**',\n 'midscene_run/**',\n 'node_modules/**',\n '**/.git/**',\n '**/.midscene/**',\n '**/midscene_run/**',\n '**/node_modules/**',\n];\n\nexport const DEFAULT_TEST_FILE_SELECTION: TestFileSelection = {\n include: ['**/*.{yaml,yml}'],\n};\n\nconst toPosix = (value: string): string => value.split(sep).join('/');\n\nexport const discoverSelectedTestFiles = (\n projectRoot: string,\n paths: readonly string[],\n): string[] => {\n const root = resolve(projectRoot);\n const files = new Set<string>();\n for (const requestedPath of paths) {\n if (\n typeof requestedPath !== 'string' ||\n requestedPath.trim().length === 0\n ) {\n throw new TypeError('Test selection paths must be non-empty strings.');\n }\n const absolutePath = resolve(root, requestedPath);\n const relativePath = relative(root, absolutePath);\n if (\n relativePath === '..' ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n ) {\n throw new Error(\n `Test selection path is outside the project: ${requestedPath}`,\n );\n }\n if (!existsSync(absolutePath)) {\n throw new Error(`Test selection path does not exist: ${requestedPath}`);\n }\n if (statSync(absolutePath).isDirectory()) {\n for (const file of discoverTestFiles(absolutePath)) files.add(file);\n } else if (/\\.ya?ml$/i.test(absolutePath)) {\n files.add(absolutePath);\n } else {\n throw new Error(`Test selection file must be YAML: ${requestedPath}`);\n }\n }\n return [...files].sort((a, b) => {\n const relativeA = toPosix(relative(root, a));\n const relativeB = toPosix(relative(root, b));\n return relativeA < relativeB ? -1 : relativeA > relativeB ? 1 : 0;\n });\n};\n\nconst discoverResolvedTestFiles = (\n projectRoot: string,\n selection: TestFileSelection,\n): string[] => {\n const root = resolve(projectRoot);\n const match = (patterns: readonly string[]) =>\n globSync(patterns, {\n absolute: true,\n caseSensitiveMatch: false,\n cwd: root,\n dot: true,\n expandDirectories: false,\n followSymbolicLinks: false,\n ignore: [...ALWAYS_IGNORED_PATTERNS, ...(selection.exclude ?? [])],\n onlyFiles: true,\n }).filter((file) => /\\.ya?ml$/i.test(file));\n const files = match(selection.include);\n\n return [...new Set(files.map((file) => resolve(file)))].sort((a, b) => {\n const relativeA = toPosix(relative(root, a));\n const relativeB = toPosix(relative(root, b));\n return relativeA < relativeB ? -1 : relativeA > relativeB ? 1 : 0;\n });\n};\n\nexport const discoverTestFiles = (\n projectRoot: string,\n selection: TestFileSelection = DEFAULT_TEST_FILE_SELECTION,\n): string[] => {\n const normalized = validateTestFileSelection(selection);\n if (!normalized) throw new TypeError('Test file selection is required.');\n return discoverResolvedTestFiles(projectRoot, normalized);\n};\n\nexport const discoverTestConfig = (projectRoot: string): string | undefined => {\n const root = resolve(projectRoot);\n const candidates = readdirSync(root)\n .filter((name) => name.startsWith(CONFIG_PREFIX))\n .sort();\n const supported = candidates.filter((name) =>\n CONFIG_NAMES.includes(name as (typeof CONFIG_NAMES)[number]),\n );\n const unsupported = candidates.filter(\n (name) => !CONFIG_NAMES.includes(name as (typeof CONFIG_NAMES)[number]),\n );\n if (unsupported.length > 0) {\n throw new Error(\n [\n `Unsupported or conflicting Midscene configs found in ${root}:`,\n ...candidates.map((name) => `- ${name}`),\n `Only ${CONFIG_NAMES.join(' and ')} are supported.`,\n ].join('\\n'),\n );\n }\n if (supported.length > 1) {\n throw new Error(\n [\n `Multiple Midscene configs found in ${root}:`,\n ...supported.map((name) => `- ${name}`),\n 'Pass --config <path> to select one explicitly.',\n ].join('\\n'),\n );\n }\n return supported[0] ? join(root, supported[0]) : undefined;\n};\n\nconst asCollectionError = (\n projectId: string,\n projectName: string,\n sourcePath: string,\n error: unknown,\n): TestProjectCollectionError => ({\n projectId,\n projectName,\n sourcePath,\n error:\n error instanceof WorkflowError\n ? error\n : new WorkflowParseError(\n `Failed to collect workflow document \"${sourcePath}\": ${\n error instanceof Error ? error.message : String(error)\n }`,\n { projectName, sourcePath },\n error,\n ),\n});\n\nexport const matchesTags = (\n tags: readonly string[],\n selection: LoadedExecutionProject['tags'],\n): boolean => {\n if (selection.exclude.some((tag) => tags.includes(tag))) return false;\n return (\n selection.include.length === 0 ||\n selection.include.some((tag) => tags.includes(tag))\n );\n};\n\nconst filterDocumentCases = (\n document: CollectedWorkflowDocument,\n project: LoadedExecutionProject,\n selection: ProjectPreparationOptions['selection'],\n): { document?: CollectedWorkflowDocument; filtered: number } => {\n const cases = document.cases.filter((item) => {\n const tags = item.definition.tags ?? [];\n return (\n matchesTags(tags, project.tags) &&\n matchesTags(tags, {\n include: selection?.tags?.include ?? [],\n exclude: selection?.tags?.exclude ?? [],\n }) &&\n (!selection?.caseIds?.length || selection.caseIds.includes(item.caseId))\n );\n });\n const filtered = document.cases.length - cases.length;\n return cases.length === 0\n ? { filtered }\n : { document: { ...document, cases }, filtered };\n};\n\nexport const selectProjects = <TProjectContext>(\n projects: readonly LoadedExecutionProject<TProjectContext>[],\n names: readonly string[] | undefined,\n): readonly LoadedExecutionProject<TProjectContext>[] => {\n if (!names || names.length === 0) return projects;\n const requested = new Set(names);\n if (requested.size !== names.length) {\n throw new Error('Each --project name may only be specified once.');\n }\n const known = new Set(projects.map((project) => project.name));\n const unknown = names.find((name) => !known.has(name));\n if (unknown) throw new Error(`Unknown Midscene project: ${unknown}`);\n return projects.filter((project) => requested.has(project.name));\n};\n\n/** Prepare and validate every document before any Project resource is acquired. */\nexport async function prepareProject(\n project: LoadedExecutionProject,\n projectRoot: string,\n runDir: string,\n defaultTimeoutMs: number,\n options: ProjectPreparationOptions = {},\n): Promise<PreparedExecutionProject> {\n const platform = options.platform?.trim();\n const fileSelection = project.files ?? DEFAULT_TEST_FILE_SELECTION;\n const prerequisiteFile = options.prerequisiteFile\n ? resolve(options.prerequisiteFile)\n : undefined;\n const projectFiles =\n options.files ?? discoverResolvedTestFiles(projectRoot, fileSelection);\n const selectedFiles = options.selection?.paths?.length\n ? new Set(discoverSelectedTestFiles(projectRoot, options.selection.paths))\n : undefined;\n const mainFiles = selectedFiles\n ? projectFiles.filter((file) => selectedFiles.has(file))\n : projectFiles;\n const files = [\n ...(prerequisiteFile ? [prerequisiteFile] : []),\n ...mainFiles.filter((file) => file !== prerequisiteFile),\n ];\n const occurrences = new Map<string, number>();\n const sources = files.map((absolutePath) => {\n const invocationIndex = occurrences.get(absolutePath) ?? 0;\n occurrences.set(absolutePath, invocationIndex + 1);\n return {\n projectId: project.projectId,\n projectName: project.name,\n sourcePath: toPosix(relative(projectRoot, absolutePath)),\n absolutePath,\n invocationIndex,\n };\n });\n const collectionErrors: TestProjectCollectionError[] = [];\n const invocations: PreparedDocumentInvocation[] = [];\n const plans: import('@midscene/core').TestRunReportDocumentPlan[] = [];\n let filteredCaseCount = 0;\n const availableCaseIds = new Set<string>();\n\n if (sources.length === 0) {\n const error = asCollectionError(\n project.projectId,\n project.name,\n '<project>',\n new WorkflowParseError(\n `No workflow YAML files found for project \"${project.name}\" in ${projectRoot}.`,\n { projectName: project.name, projectRoot },\n ),\n );\n collectionErrors.push(error);\n await writeCollectionError(runDir, error);\n }\n\n for (const source of sources) {\n try {\n const collected = await options.collectDocument?.(source, project);\n if (collected) {\n filteredCaseCount += collected.filteredCaseCount;\n if (collected.invocation) {\n const plan = buildTestRunReportPlan(collected.invocation.document, {\n defaultTimeoutMs: collected.invocation.defaultTimeoutMs,\n retry: collected.invocation.retry,\n });\n invocations.push({ ...collected.invocation, plan });\n plans.push(plan);\n }\n continue;\n }\n const document = collectWorkflowDocument(source, {\n resolveNode: project.nodes.get.bind(project.nodes),\n variables: project.variables,\n env: process.env,\n });\n const duplicate = document.cases.find((item) =>\n availableCaseIds.has(item.caseId),\n );\n if (duplicate)\n throw new WorkflowParseError(\n `Case id collision in project \"${project.name}\": ${duplicate.caseId}.`,\n { caseId: duplicate.caseId, projectName: project.name },\n );\n for (const item of document.cases) availableCaseIds.add(item.caseId);\n const filtered =\n source.absolutePath === prerequisiteFile\n ? { document, filtered: 0 }\n : filterDocumentCases(document, project, options.selection);\n const plan = buildTestRunReportPlan(document, {\n selectedCaseIds:\n filtered.document?.cases.map((item) => item.caseId) ?? [],\n defaultTimeoutMs,\n retry: { scope: 'case', count: project.retry },\n });\n plans.push(plan);\n filteredCaseCount += filtered.filtered;\n if (filtered.document)\n invocations.push({\n plan,\n document: filtered.document,\n retry: { scope: 'case', count: project.retry },\n defaultTimeoutMs,\n reportEnabled: true,\n bindings: { resolveNode: project.nodes.require.bind(project.nodes) },\n });\n } catch (error) {\n const collectionError = asCollectionError(\n project.projectId,\n project.name,\n source.sourcePath,\n error,\n );\n collectionErrors.push(collectionError);\n await writeCollectionError(runDir, collectionError);\n }\n }\n\n const documents = invocations.map((invocation) => invocation.document);\n const prerequisiteSource = sources.find(\n (source) => source.absolutePath === prerequisiteFile,\n );\n const prerequisiteDocument = documents.find(\n (document) => document.sourcePath === prerequisiteSource?.sourcePath,\n );\n return {\n project,\n ...(platform ? { platform } : {}),\n documentConcurrency: options.documentConcurrency ?? 1,\n ...(prerequisiteDocument\n ? { prerequisiteDocumentId: prerequisiteDocument.documentId }\n : {}),\n fileSelection,\n sources,\n documents,\n invocations,\n plans,\n collectionErrors,\n selectedCaseCount: documents.reduce(\n (total, document) => total + document.cases.length,\n 0,\n ),\n filteredCaseCount,\n availableCaseIds: [...availableCaseIds],\n };\n}\n","import type { TestProjectRunOptions } from './execution-plan';\n\nconst validateUniqueStrings = (\n values: readonly string[] | undefined,\n label: string,\n): readonly string[] | undefined => {\n if (values === undefined) return undefined;\n if (\n !Array.isArray(values) ||\n values.some(\n (value) => typeof value !== 'string' || value.trim().length === 0,\n )\n ) {\n throw new TypeError(`${label} must be an array of non-empty strings.`);\n }\n if (new Set(values).size !== values.length) {\n throw new TypeError(`${label} must not contain duplicates.`);\n }\n return values;\n};\n\nexport const validateRunSelection = (\n options: TestProjectRunOptions,\n): Pick<TestProjectRunOptions, 'paths' | 'caseIds' | 'tags'> => {\n const paths = validateUniqueStrings(options.paths, 'Test selection paths');\n const caseIds = validateUniqueStrings(\n options.caseIds,\n 'Test selection caseIds',\n );\n const include = validateUniqueStrings(\n options.tags?.include,\n 'Test selection tags.include',\n );\n const exclude = validateUniqueStrings(\n options.tags?.exclude,\n 'Test selection tags.exclude',\n );\n return {\n ...(paths ? { paths } : {}),\n ...(caseIds ? { caseIds } : {}),\n ...(include || exclude\n ? {\n tags: {\n ...(include ? { include } : {}),\n ...(exclude ? { exclude } : {}),\n },\n }\n : {}),\n };\n};\n","import { randomUUID } from 'node:crypto';\nimport { existsSync, mkdirSync, statSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { NativeWorkflowFormatError } from '../parser/collect';\nimport type {\n PreparedExecutionProject,\n PreparedTestRunPlan,\n TestProjectRunOptions,\n TestRunInput,\n} from './execution-plan';\nimport {\n discoverTestConfig,\n prepareProject,\n selectProjects,\n} from './project-preparation';\nimport { loadTestProject } from './test-project';\nimport { validateRunSelection } from './test-selection';\n\nconst padDatePart = (value: number): string => String(value).padStart(2, '0');\n\nexport const createTestRunId = (\n date = new Date(),\n uuid = randomUUID(),\n): string => {\n const timestamp = [\n date.getFullYear(),\n padDatePart(date.getMonth() + 1),\n padDatePart(date.getDate()),\n padDatePart(date.getHours()),\n padDatePart(date.getMinutes()),\n padDatePart(date.getSeconds()),\n ].join('');\n return `${timestamp}-${uuid.slice(0, 8)}`;\n};\n\nconst assertDirectory = (path: string, label: string): void => {\n if (!existsSync(path) || !statSync(path).isDirectory()) {\n throw new Error(`${label} does not exist or is not a directory: ${path}`);\n }\n};\n\nconst resolveRunInput = (options: TestProjectRunOptions): TestRunInput => {\n const cwd = resolve(options.cwd ?? process.cwd());\n assertDirectory(cwd, 'Test working directory');\n const inputPath = options.projectRoot\n ? resolve(cwd, options.projectRoot)\n : undefined;\n const singleFile =\n inputPath && existsSync(inputPath) && statSync(inputPath).isFile()\n ? inputPath\n : undefined;\n if (singleFile && !/\\.ya?ml$/i.test(singleFile))\n throw new Error(\n `Test input must be a YAML file or project directory: ${singleFile}`,\n );\n const cliProjectRoot = singleFile ? dirname(singleFile) : inputPath;\n if (cliProjectRoot) assertDirectory(cliProjectRoot, 'Test project directory');\n const projectRoot = cliProjectRoot ?? cwd;\n return {\n cwd,\n projectRoot,\n configSearchRoot: projectRoot,\n ...(singleFile ? { singleFile } : {}),\n };\n};\n\n/** Composition boundary only: execution receives no raw input syntax or host options. */\nexport async function prepareTestRun(\n options: TestProjectRunOptions,\n): Promise<PreparedTestRunPlan> {\n const startedAt = new Date();\n const runId = createTestRunId(startedAt);\n const input = resolveRunInput(options);\n const selection = validateRunSelection(options);\n const configPath = options.configPath\n ? resolve(input.configSearchRoot, options.configPath)\n : discoverTestConfig(input.configSearchRoot);\n if (options.configPath && /\\.ya?ml$/i.test(configPath!)) {\n throw new Error(\n `midscene-test --config only accepts a native TypeScript or JavaScript project config: ${configPath}. Run legacy batch YAML with \\`midscene --config ${options.configPath}\\`.`,\n );\n }\n if (options.configPath && !existsSync(configPath!))\n throw new Error(`Midscene config does not exist: ${configPath}`);\n const definition = await loadTestProject<unknown>(configPath);\n const resultDir = options.resultDir\n ? resolve(input.cwd, options.resultDir)\n : join(input.projectRoot, '.midscene', 'test-results');\n const runDir = join(resultDir, runId);\n const summaryPath = join(runDir, 'summary.json');\n const reportDir = resolve(input.projectRoot, definition.output.reportDir);\n mkdirSync(resultDir, { recursive: true });\n mkdirSync(runDir);\n const projects: PreparedExecutionProject[] = [];\n for (const project of selectProjects(\n definition.projects,\n options.projectNames,\n ))\n projects.push(\n await prepareProject(\n project,\n input.projectRoot,\n runDir,\n definition.test.testTimeout,\n {\n selection,\n ...(input.singleFile ? { files: [input.singleFile] } : {}),\n },\n ),\n );\n if (selection.caseIds?.length) {\n const availableCaseIds = new Set(\n projects.flatMap((project) => project.availableCaseIds ?? []),\n );\n const unknown = selection.caseIds.find((id) => !availableCaseIds.has(id));\n if (unknown) throw new Error(`Unknown Midscene case id: ${unknown}`);\n }\n if (\n (selection.paths?.length ||\n selection.caseIds?.length ||\n selection.tags?.include?.length ||\n selection.tags?.exclude?.length) &&\n projects.every(\n (project) =>\n project.selectedCaseCount === 0 &&\n project.collectionErrors.length === 0,\n )\n ) {\n throw new Error('No Midscene cases matched the requested selection.');\n }\n const hasFormatMismatch = projects.some((project) =>\n project.collectionErrors.some(\n ({ error }) => error instanceof NativeWorkflowFormatError,\n ),\n );\n return {\n startedAt,\n runId,\n projectRoot: input.projectRoot,\n ...(configPath ? { configPath } : {}),\n resultDir,\n runDir,\n summaryPath,\n reportDir,\n definition,\n projects,\n // A wrong-format file invalidates the complete command invocation. Other\n // native collection failures retain the existing per-Project isolation.\n preflightScope: hasFormatMismatch ? 'run' : 'project',\n reportEnabled: true,\n publications: [],\n onProgress: options.onProgress ?? (() => {}),\n };\n}\n","import { writeFile } from 'node:fs/promises';\nimport { dirname, join, relative, sep } from 'node:path';\nimport type {\n TestRunReportDump,\n TestRunReportSourceIndex,\n TestRunReportStep,\n} from '@midscene/core';\nimport type { TestProjectRunResult } from '../cli/types';\nimport { buildTestRunReportDump } from './test-run-report';\n\nconst text = (value: string): string =>\n value\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll('|', '&#124;')\n .replaceAll('[', '&#91;')\n .replaceAll(']', '&#93;')\n .replaceAll('*', '&#42;')\n .replaceAll('_', '&#95;')\n .replaceAll('`', '&#96;')\n .replaceAll('\\\\', '&#92;')\n .replace(/[\\r\\n]+/g, ' ');\n\nconst duration = (ms: number): string => {\n const seconds = Math.round(ms / 1000);\n return seconds < 60\n ? `${seconds}s`\n : `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n};\nconst href = (from: string, target: string): string =>\n relative(dirname(from), target).split(sep).map(encodeURIComponent).join('/');\n\nexport interface TestResultMarkdownOptions {\n /** Relative or hosted URL of the HTML report. */\n reportHref?: string;\n}\n\n/** Render the same sanitized execution facts used by the HTML report. */\nexport function renderTestResultMarkdown(\n dump: TestRunReportDump,\n options: TestResultMarkdownOptions = {},\n): string {\n const { summary } = dump;\n const outcome =\n dump.status === 'success'\n ? `✅ **${summary.passed}/${summary.total} passed**`\n : `❌ **${summary.failed} failed** · ${summary.passed} passed · ${summary.notRun} not run`;\n const lines = [\n '## Midscene Test',\n '',\n `${outcome} · ${duration(dump.durationMs)}`,\n '',\n ];\n if (summary.filtered) lines.push(`**Filtered:** ${summary.filtered}`, '');\n const infrastructure = [\n summary.collectionErrors\n ? `${summary.collectionErrors} collection errors`\n : '',\n summary.documentFailures\n ? `${summary.documentFailures} document failures`\n : '',\n summary.projectFailures\n ? `${summary.projectFailures} project failures`\n : '',\n ].filter(Boolean);\n if (infrastructure.length)\n lines.push(`**Infrastructure:** ${infrastructure.join(' · ')}`, '');\n const groups: { name: string; rows: string[] }[] = [];\n const errors: string[] = [];\n const recordSteps = (label: string, steps: readonly TestRunReportStep[]) => {\n for (const step of steps) {\n if (step.status === 'failed')\n errors.push(\n `${label} / ${step.node}: ${step.error?.message ?? 'Step failed'}`,\n );\n }\n };\n for (const project of dump.projects) {\n if (project.lifecycle?.setupError)\n errors.push(`${project.name}: ${project.lifecycle.setupError.message}`);\n for (const error of project.lifecycle?.teardownErrors ?? [])\n errors.push(`${project.name}: ${error.message}`);\n for (const error of project.collectionErrors)\n errors.push(\n `${project.name} / ${error.sourcePath}: ${error.error.message}`,\n );\n for (const document of project.documents) {\n const name = document.sourcePath\n .replace(/\\\\/g, '/')\n .replace(/\\.(?:yaml|yml)$/, '');\n const group = {\n name: dump.projects.length > 1 ? `${project.name} / ${name}` : name,\n rows: [] as string[],\n };\n groups.push(group);\n recordSteps(`${project.name} / ${document.sourcePath}`, [\n ...document.beforeAll,\n ...document.afterAll,\n ]);\n for (const error of document.teardownErrors ?? [])\n errors.push(`${document.sourcePath}: ${error.message}`);\n for (const failure of document.hostErrors ?? [])\n errors.push(\n `${document.sourcePath} / ${failure.phase}: ${failure.error.message}`,\n );\n for (const testCase of document.cases) {\n group.rows.push(\n ` - ${testCase.status === 'success' ? '✅' : testCase.status === 'not-run' ? '⏭️' : '❌'} ${text(testCase.name)}`,\n );\n }\n }\n }\n for (const diagnostic of dump.diagnostics ?? []) {\n if (diagnostic.level === 'error') errors.push(diagnostic.message);\n }\n if (errors.length)\n lines.push(\n '### Execution errors',\n '',\n ...errors.map((error) => `- ${text(error)}`),\n '',\n );\n for (const group of groups) {\n if (group.rows.length) lines.push(`- ${text(group.name)}`, ...group.rows);\n }\n if (!groups.some((group) => group.rows.length))\n lines.push('No cases were reported.');\n if (options.reportHref)\n lines.push(\n '',\n `[Open the Midscene Test report ↗](<${options.reportHref}>)`,\n );\n return `${lines.join('\\n')}\\n`;\n}\n\nconst emptyIndex = (): TestRunReportSourceIndex => ({\n sources: [],\n metrics: {\n modelCallCount: 0,\n modelTimeMs: 0,\n promptTokens: 0,\n cachedInputTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n },\n});\n\n/** Write a per-run Markdown artifact even when HTML publication fails or is disabled. */\nexport async function writeTestResultMarkdown(\n result: TestProjectRunResult,\n index: TestRunReportSourceIndex = emptyIndex(),\n): Promise<string> {\n const output = join(dirname(result.summaryPath), 'result.md');\n const dump = buildTestRunReportDump(result, index);\n await writeFile(\n output,\n renderTestResultMarkdown(dump, {\n ...(result.reportPath\n ? { reportHref: href(output, result.reportPath) }\n : {}),\n }),\n );\n return output;\n}\n","import type { TestRunReportDocumentPlan } from '@midscene/core';\nimport type {\n StepExecutionInfo,\n StepRunResult,\n WorkflowDocumentRunResult,\n} from '@midscene/core/internal/test-runner';\nimport type {\n CollectedCase,\n WorkflowDocumentSource,\n} from '@midscene/core/internal/test-runner';\nimport type { LoadedExecutionProject, TestFileSelection } from './test-project';\nimport type {\n TestExecutionProjectRunResult,\n TestProjectCaseRunResult,\n TestProjectCollectionError,\n} from './types';\n\nexport interface ProjectResultInput {\n readonly project: LoadedExecutionProject;\n readonly platform?: string;\n readonly fileSelection: TestFileSelection;\n readonly sources: readonly WorkflowDocumentSource[];\n readonly collectionErrors: readonly TestProjectCollectionError[];\n readonly selectedCaseCount: number;\n readonly filteredCaseCount: number;\n readonly plans?: readonly TestRunReportDocumentPlan[];\n}\n\nexport const asNotRun = (\n documentId: string,\n collectedCase: CollectedCase,\n projectName: string,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n): TestProjectCaseRunResult => ({\n documentId,\n caseId: collectedCase.caseId,\n projectName,\n name: collectedCase.definition.name,\n sourcePath: collectedCase.sourcePath,\n caseIndex: collectedCase.caseIndex,\n status: 'not-run',\n notRunReason: reason,\n});\n\nexport const formatStep = (info: StepExecutionInfo): string => {\n const position = info.scope === 'case' ? info.case : info.document;\n const phase = position.phase === 'steps' ? 'step' : position.phase;\n return `${phase} ${position.stepIndex + 1}/${info.stepCount}: ${info.node}`;\n};\n\nexport const formatStepResult = (\n info: StepExecutionInfo,\n result: StepRunResult,\n indent = '',\n): string => {\n if (result.status === 'not-run')\n return `${indent}– ${formatStep(info)} (not run: ${result.notRunReason})`;\n const symbol = result.status === 'success' ? '✓' : '✗';\n const error = result.error ? ` — ${result.error.message}` : '';\n const continuation = result.continuedAfterError ? '; continuing' : '';\n return `${indent}${symbol} ${formatStep(info)} (${result.durationMs} ms)${error}${continuation}`;\n};\n\nexport const latestById = <T>(\n items: readonly T[],\n id: (item: T) => string,\n): T[] => [...new Map(items.map((item) => [id(item), item])).values()];\n\nexport const buildProjectResult = (\n prepared: ProjectResultInput,\n cases: readonly TestProjectCaseRunResult[],\n documents: readonly WorkflowDocumentRunResult[],\n lifecycle?: TestExecutionProjectRunResult['lifecycle'],\n): TestExecutionProjectRunResult => {\n const { project } = prepared;\n const projectFailed =\n prepared.collectionErrors.length > 0 ||\n latestById(cases, (item) => item.caseId).some(\n (item) =>\n item.status !== 'success' ||\n item.execution?.lifecycle?.status === 'failed',\n ) ||\n latestById(documents, (item) => item.documentId).some(\n (item) => item.status === 'failed',\n ) ||\n lifecycle?.status === 'failed';\n return {\n projectId: project.projectId,\n name: project.name,\n ...(prepared.platform ? { platform: prepared.platform } : {}),\n status: projectFailed ? 'failed' : 'success',\n retry: project.retry,\n fileSelection: prepared.fileSelection,\n tagSelection: project.tags,\n sourceCount: prepared.sources.length,\n selectedCaseCount: prepared.selectedCaseCount,\n filteredCaseCount: prepared.filteredCaseCount,\n ...(lifecycle ? { lifecycle } : {}),\n cases,\n plans: prepared.plans,\n documents,\n collectionErrors: prepared.collectionErrors,\n };\n};\n","import { randomUUID } from 'node:crypto';\nimport { cpSync, existsSync, mkdirSync, realpathSync, statSync } from 'node:fs';\nimport { basename, dirname, join } from 'node:path';\nimport type { WorkflowReportSource } from '@midscene/core/internal/test-runner';\nimport { TestExecutorError } from './test-executor';\n\n/** Owns the local artifacts behind opaque, task-scoped transport references. */\nexport function createExecutorReports(outputDir: string) {\n const paths = new Map<string, string>();\n const sources = new Map<string, WorkflowReportSource>();\n return {\n // Native Agent scopes own immutable snapshots, even when no HTML was emitted.\n // Register only trusted local sources; the transport still carries opaque IDs.\n materializeSource(source: WorkflowReportSource): string {\n if (!source.dumpPath) {\n const reference = this.materialize(source.sourcePath);\n sources.set(reference, {\n sourcePath: this.resolve(reference),\n collection: source.collection,\n });\n return reference;\n }\n const dump = realpathSync(source.dumpPath);\n const reference = randomUUID();\n const destination = join(outputDir, 'reports', reference);\n mkdirSync(destination, { recursive: true });\n const dumpPath = join(destination, 'snapshot.json');\n cpSync(dump, dumpPath);\n const screenshots = join(dirname(dump), 'screenshots');\n if (existsSync(screenshots))\n cpSync(screenshots, join(destination, 'screenshots'), {\n recursive: true,\n dereference: true,\n });\n const sourcePath = join(destination, 'index.html');\n sources.set(reference, {\n sourcePath,\n dumpPath,\n collection: source.collection,\n });\n paths.set(reference, sourcePath);\n return reference;\n },\n resolveSource(reference: string): WorkflowReportSource | undefined {\n return sources.get(reference);\n },\n materialize(sourcePath: string): string {\n const source = realpathSync(sourcePath);\n const entry = statSync(source).isDirectory()\n ? join(source, 'index.html')\n : source;\n if (!statSync(entry).isFile()) {\n throw new TestExecutorError(\n `Executor report must have a regular HTML entry: ${sourcePath}`,\n { kind: 'report' },\n );\n }\n const reference = randomUUID();\n const destination = join(outputDir, 'reports', reference);\n mkdirSync(destination, { recursive: true });\n // Directory reports need their sibling screenshots as well as index.html.\n const isDirectoryReport = basename(entry) === 'index.html';\n const reportPath = join(\n destination,\n isDirectoryReport ? 'index.html' : 'report.html',\n );\n cpSync(\n isDirectoryReport ? dirname(entry) : entry,\n isDirectoryReport ? destination : reportPath,\n {\n recursive: isDirectoryReport,\n dereference: true,\n },\n );\n if (!isDirectoryReport) {\n const screenshots = join(dirname(entry), 'screenshots');\n if (existsSync(screenshots))\n cpSync(screenshots, join(destination, 'screenshots'), {\n recursive: true,\n dereference: true,\n });\n }\n paths.set(reference, reportPath);\n return reference;\n },\n resolve(reference: string): string {\n const reportPath = paths.get(reference);\n if (!reportPath) {\n throw new TestExecutorError(\n `Executor returned unknown report reference ${reference}.`,\n { kind: 'report' },\n );\n }\n return reportPath;\n },\n };\n}\n","import type { Awaitable } from '../engine/types';\n\nexport interface ResourceTask {\n readonly resources: readonly string[];\n}\n\nexport interface TaskSchedulerOptions<TTask extends ResourceTask, TResult> {\n readonly tasks: readonly TTask[];\n readonly maxConcurrency: number;\n readonly run: (task: TTask, index: number) => Awaitable<TResult>;\n readonly signal?: AbortSignal;\n readonly shouldStop?: () => boolean;\n}\n\n/** Run tasks concurrently while preventing overlapping resource keys. */\nexport async function runTaskPool<TTask extends ResourceTask, TResult>(\n options: TaskSchedulerOptions<TTask, TResult>,\n): Promise<readonly (TResult | undefined)[]> {\n if (\n !Number.isInteger(options.maxConcurrency) ||\n options.maxConcurrency <= 0\n ) {\n throw new TypeError(\n 'Task scheduler maxConcurrency must be a positive integer.',\n );\n }\n\n const pending = options.tasks.map((_, index) => index);\n const results: Array<TResult | undefined> = new Array(options.tasks.length);\n const activeResources = new Set<string>();\n let active = 0;\n let firstError: unknown;\n let hasError = false;\n\n return await new Promise((resolve, reject) => {\n let settled = false;\n const stopRequested = () =>\n hasError ||\n options.signal?.aborted === true ||\n options.shouldStop?.() === true;\n const finish = () => {\n if (settled) return;\n settled = true;\n options.signal?.removeEventListener('abort', pump);\n if (hasError) reject(firstError);\n else resolve(results);\n };\n const release = (resources: readonly string[]) => {\n for (const resource of resources) activeResources.delete(resource);\n };\n const claimRunnable = (): number | undefined => {\n const pendingIndex = pending.findIndex((taskIndex) =>\n options.tasks[taskIndex].resources.every(\n (resource) => !activeResources.has(resource),\n ),\n );\n if (pendingIndex < 0) return undefined;\n const [taskIndex] = pending.splice(pendingIndex, 1);\n return taskIndex;\n };\n function pump(): void {\n if (settled) return;\n while (active < options.maxConcurrency && !stopRequested()) {\n const taskIndex = claimRunnable();\n if (taskIndex === undefined) break;\n const task = options.tasks[taskIndex];\n for (const resource of task.resources) activeResources.add(resource);\n active += 1;\n Promise.resolve()\n .then(() => options.run(task, taskIndex))\n .then((result) => {\n results[taskIndex] = result;\n })\n .catch((error: unknown) => {\n if (!hasError) {\n hasError = true;\n firstError = error;\n }\n })\n .finally(() => {\n release(task.resources);\n active -= 1;\n pump();\n });\n }\n\n if (active === 0 && (pending.length === 0 || stopRequested())) finish();\n }\n\n options.signal?.addEventListener('abort', pump, { once: true });\n pump();\n });\n}\n","import { mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport {\n WorkflowExecutionFailure,\n runWorkflowDocument,\n sanitizeReportError,\n} from '@midscene/core/internal/test-runner';\nimport type { WorkflowReportSource } from '@midscene/core/internal/test-runner';\nimport type {\n CaseRunOutcome,\n CaseRunResult,\n ProjectRuntimeResult,\n StepRunResult,\n WorkflowDocumentRunResult,\n} from '@midscene/core/internal/test-runner';\nimport type {\n CollectedCase,\n CollectedWorkflowDocument,\n WorkflowDocumentSource,\n} from '@midscene/core/internal/test-runner';\nimport { createProjectRuntime } from '../engine/project-runtime';\nimport { WorkflowError, isFatalDeviceError } from '../errors';\nimport {\n asNotRun,\n buildProjectResult,\n formatStep,\n formatStepResult,\n} from './execution-result';\nimport { createExecutorReports } from './executor-reports';\nimport {\n writeCaseAttemptResult,\n writeWorkflowDocumentResult,\n} from './result-store';\nimport { runTaskPool } from './task-scheduler';\nimport {\n type TestCaseTask,\n type TestCaseTaskRunResult,\n type TestExecutor,\n type TestExecutorCaseAttemptDto,\n type TestExecutorDocumentResultDto,\n type TestExecutorError,\n type TestExecutorErrorDto,\n type TestExecutorLifecycleResultDto,\n type TestExecutorStepResultDto,\n assertTestCaseTaskRunResult,\n isTestExecutorError,\n localTestExecutor,\n} from './test-executor';\nimport type {\n LoadedExecutionProject,\n ResolvedTestOptions,\n TestFileSelection,\n} from './test-project';\nimport type {\n TestExecutionProjectRunResult,\n TestProjectCaseRunResult,\n TestProjectCollectionError,\n} from './types';\n\nexport interface PreparedCaseExecutionProject<TProjectContext = unknown> {\n project: LoadedExecutionProject<TProjectContext>;\n fileSelection: TestFileSelection;\n sources: readonly WorkflowDocumentSource[];\n documents: readonly CollectedWorkflowDocument[];\n collectionErrors: readonly TestProjectCollectionError[];\n selectedCaseCount: number;\n filteredCaseCount: number;\n availableCaseIds?: readonly string[];\n}\n\ninterface PreparedCaseTask<TProjectContext = unknown> {\n readonly task: TestCaseTask;\n readonly projectIndex: number;\n readonly prepared: PreparedCaseExecutionProject<TProjectContext>;\n readonly document: CollectedWorkflowDocument;\n readonly collectedCase: CollectedCase;\n}\n\ntype CompletedCaseTaskResult = {\n readonly case: TestProjectCaseRunResult;\n readonly document?: WorkflowDocumentRunResult;\n};\n\nexport interface RunCaseExecutionOptions<TProjectContext = unknown> {\n readonly projects: readonly PreparedCaseExecutionProject<TProjectContext>[];\n readonly test: ResolvedTestOptions;\n readonly executor?: TestExecutor;\n readonly runDir: string;\n readonly signal: AbortSignal;\n readonly progress: (message: string) => void;\n readonly onInfrastructureError: (error: unknown) => void;\n}\n\nconst isolatedDocumentId = (\n document: CollectedWorkflowDocument,\n collectedCase: CollectedCase,\n): string => `${document.documentId}-case-${collectedCase.caseIndex}`;\n\nconst prepareCaseTasks = <TProjectContext>(\n projects: readonly PreparedCaseExecutionProject<TProjectContext>[],\n): readonly PreparedCaseTask<TProjectContext>[] =>\n projects.flatMap((prepared, projectIndex) =>\n prepared.documents.flatMap((document) =>\n document.cases.map((collectedCase) => {\n const documentId = isolatedDocumentId(document, collectedCase);\n return {\n projectIndex,\n prepared,\n document,\n collectedCase,\n task: Object.freeze({\n taskId: `${prepared.project.projectId}:${collectedCase.caseId}`,\n projectId: prepared.project.projectId,\n projectName: prepared.project.name,\n documentId,\n sourcePath: collectedCase.sourcePath,\n caseId: collectedCase.caseId,\n caseName: collectedCase.definition.name,\n caseIndex: collectedCase.caseIndex,\n tags: Object.freeze([...(collectedCase.definition.tags ?? [])]),\n resources: Object.freeze([\n ...(collectedCase.definition.resources ?? []),\n ]),\n retry: prepared.project.retry,\n }),\n };\n }),\n ),\n );\n\nconst reviveError = (error: TestExecutorErrorDto): WorkflowError => {\n const revived = new WorkflowError(error.message, {\n code: error.code,\n details: error.details,\n cause: error.cause,\n });\n revived.name = error.name;\n return revived;\n};\n\nconst reviveStep = (step: TestExecutorStepResultDto): StepRunResult => {\n const { error, output, report, ...base } = step;\n return {\n ...base,\n input: step.input,\n meta: { ...step.meta },\n ...(output ? { output: { ...output } } : {}),\n ...(error ? { error: reviveError(error) } : {}),\n ...(report\n ? {\n report: {\n traces: report.traces.map((trace) => ({ ...trace })),\n ...(report.collectionErrors\n ? { collectionErrors: report.collectionErrors.map(reviveError) }\n : {}),\n },\n }\n : {}),\n };\n};\n\nconst reviveAttempt = (attempt: TestExecutorCaseAttemptDto): CaseRunResult => {\n const {\n executionErrors,\n teardownErrors,\n reportRefs,\n beforeEach,\n steps,\n afterEach,\n ...base\n } = attempt;\n return {\n ...base,\n beforeEach: beforeEach.map(reviveStep),\n steps: steps.map(reviveStep),\n afterEach: afterEach.map(reviveStep),\n ...(executionErrors\n ? { executionErrors: executionErrors.map(reviveError) }\n : {}),\n ...(teardownErrors\n ? { teardownErrors: teardownErrors.map(reviveError) }\n : {}),\n };\n};\n\nconst reviveDocument = (\n document: TestExecutorDocumentResultDto,\n): WorkflowDocumentRunResult => {\n const {\n executionErrors,\n teardownErrors,\n reportRefs,\n beforeAll,\n afterAll,\n hostErrors,\n ...base\n } = document;\n return {\n ...base,\n ...(hostErrors\n ? { hostErrors: hostErrors.map((error) => ({ ...error })) }\n : {}),\n beforeAll: beforeAll.map(reviveStep),\n afterAll: afterAll.map(reviveStep),\n ...(executionErrors\n ? { executionErrors: executionErrors.map(reviveError) }\n : {}),\n ...(teardownErrors\n ? { teardownErrors: teardownErrors.map(reviveError) }\n : {}),\n };\n};\n\nconst reviveLifecycle = (\n lifecycle: TestExecutorLifecycleResultDto,\n): ProjectRuntimeResult => {\n const { setupError, teardownErrors, ...base } = lifecycle;\n return {\n ...base,\n ...(setupError ? { setupError: reviveError(setupError) } : {}),\n ...(teardownErrors\n ? { teardownErrors: teardownErrors.map(reviveError) }\n : {}),\n };\n};\n\nconst toTransportResult = (\n result: {\n case: CaseRunOutcome & { documentId: string };\n document?: WorkflowDocumentRunResult;\n lifecycle?: ProjectRuntimeResult;\n },\n materializeReport: (sourcePath: string) => string,\n materializeSource: (source: WorkflowReportSource) => string,\n): TestCaseTaskRunResult => {\n const transportReports = (\n scope: Pick<CaseRunResult, 'reportPaths' | 'reportSources'>,\n ) => [\n ...(scope.reportSources ?? []).map(materializeSource),\n ...(scope.reportPaths ?? [])\n .filter(\n (path) =>\n !scope.reportSources?.some((source) => source.sourcePath === path),\n )\n .map(materializeReport),\n ];\n // Scope-level reportRefs already own these snapshots. Never send worker paths\n // through individual Step records, but retain metrics and collection failures.\n const mapStep = (step: StepRunResult) => {\n if (!step.report) return step;\n const { sources: _sources, ...report } = step.report;\n return { ...step, report };\n };\n const mapAttempt = (attempt: CaseRunResult) => {\n const { reportPaths, reportSources, reportScopeId, ...transportAttempt } =\n attempt;\n const reportRefs = transportReports(attempt);\n return {\n ...transportAttempt,\n beforeEach: attempt.beforeEach.map(mapStep),\n steps: attempt.steps.map(mapStep),\n afterEach: attempt.afterEach.map(mapStep),\n ...(reportRefs.length ? { reportRefs } : {}),\n };\n };\n const attempts = result.case.attempts?.map(mapAttempt);\n const run = attempts?.at(-1);\n const { run: _run, attempts: _attempts, ...transportCase } = result.case;\n const document = result.document\n ? (() => {\n const {\n reportPaths,\n reportSources,\n reportScopeId,\n ...transportDocument\n } = result.document;\n const reportRefs = transportReports(result.document);\n return {\n ...transportDocument,\n ...(result.document.hostErrors\n ? {\n hostErrors: result.document.hostErrors.map(\n ({ phase, error }) => ({\n phase,\n error: sanitizeReportError(error),\n }),\n ),\n }\n : {}),\n beforeAll: result.document.beforeAll.map(mapStep),\n afterAll: result.document.afterAll.map(mapStep),\n ...(reportRefs.length ? { reportRefs } : {}),\n };\n })()\n : undefined;\n return JSON.parse(\n JSON.stringify({\n case: {\n ...transportCase,\n ...(run ? { run } : {}),\n ...(attempts ? { attempts } : {}),\n },\n ...(document ? { document } : {}),\n ...(result.lifecycle ? { lifecycle: result.lifecycle } : {}),\n }),\n ) as TestCaseTaskRunResult;\n};\n\nconst fromTransportResult = (\n result: TestCaseTaskRunResult,\n resolveReportReference: (reference: string) => string,\n resolveSource: (reference: string) => WorkflowReportSource | undefined,\n): {\n case: TestProjectCaseRunResult;\n document?: WorkflowDocumentRunResult;\n lifecycle?: ProjectRuntimeResult;\n} => {\n const resolveReports = (refs: readonly string[] | undefined) => {\n const reportPaths: string[] = [];\n const reportSources: WorkflowReportSource[] = [];\n for (const ref of refs ?? []) {\n const path = resolveReportReference(ref);\n const source = resolveSource(ref);\n if (source) reportSources.push(source);\n else reportPaths.push(path);\n }\n return {\n ...(reportPaths.length ? { reportPaths } : {}),\n ...(reportSources.length ? { reportSources } : {}),\n };\n };\n const attempts = result.case.attempts?.map((attempt) => ({\n ...reviveAttempt(attempt),\n ...resolveReports(attempt.reportRefs),\n }));\n const run = attempts?.at(-1);\n const { run: _run, attempts: _attempts, ...caseBase } = result.case;\n return {\n case: {\n ...caseBase,\n ...(run ? { run } : {}),\n ...(attempts ? { attempts } : {}),\n },\n ...(result.document\n ? {\n document: {\n ...reviveDocument(result.document),\n ...resolveReports(result.document.reportRefs),\n },\n }\n : {}),\n ...(result.lifecycle\n ? { lifecycle: reviveLifecycle(result.lifecycle) }\n : {}),\n };\n};\n\nconst runLocalCase = async <TProjectContext>(\n preparedTask: PreparedCaseTask<TProjectContext>,\n options: RunCaseExecutionOptions<TProjectContext>,\n taskProgress: (message: string) => void,\n materializeReport: (sourcePath: string) => string,\n materializeSource: (source: WorkflowReportSource) => string,\n): Promise<TestCaseTaskRunResult> => {\n const { prepared, document, collectedCase, task } = preparedTask;\n const { project } = prepared;\n const isolatedDocument: CollectedWorkflowDocument = {\n ...document,\n documentId: task.documentId,\n cases: [collectedCase],\n };\n const runtime = createProjectRuntime({\n project,\n setup: project.setup,\n signal: options.signal,\n });\n let lifecycle: ProjectRuntimeResult;\n let execution: Awaited<ReturnType<typeof runWorkflowDocument>> | undefined;\n let executionError: unknown;\n\n try {\n await runtime.start();\n if (runtime.canRun) {\n execution = await runWorkflowDocument(isolatedDocument, {\n resolveNode: project.nodes.require.bind(project.nodes),\n project,\n projectContext: runtime.context,\n retry: project.retry,\n signal: runtime.signal,\n defaultTimeoutMs: options.test.testTimeout,\n shouldStop: () => options.signal.aborted,\n stopReason: () => 'interrupted',\n isFatalError: (run) =>\n [...run.beforeEach, ...run.steps, ...run.afterEach].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) || (run.teardownErrors ?? []).some(isFatalDeviceError),\n onStepStart: (info) => taskProgress(`→ ${formatStep(info)}`),\n onStepResult: (info, result) =>\n taskProgress(formatStepResult(info, result)),\n onCaseResult: (attempt) =>\n taskProgress(\n `${attempt.status === 'success' ? '✓' : '✗'} attempt ${attempt.attemptIndex + 1}/${project.retry + 1}: ${attempt.name} (${attempt.durationMs} ms)`,\n ),\n });\n }\n } catch (error) {\n executionError = error;\n if (error instanceof WorkflowExecutionFailure) execution = error.result;\n } finally {\n const failed =\n executionError !== undefined ||\n !runtime.canRun ||\n execution?.cases[0]?.status !== 'success' ||\n execution?.document.status === 'failed';\n lifecycle = await runtime.finish(failed ? 'failed' : 'success');\n }\n\n if (executionError) {\n if (!execution) throw executionError;\n options.onInfrastructureError(executionError);\n }\n if (!execution) {\n return toTransportResult(\n {\n case: asNotRun(\n task.documentId,\n collectedCase,\n project.name,\n options.signal.aborted ? 'interrupted' : 'project-setup-failed',\n ),\n lifecycle,\n },\n materializeReport,\n materializeSource,\n );\n }\n const outcome = execution.cases[0];\n if (!outcome) {\n throw new Error(`Executor did not produce case result for ${task.caseId}.`);\n }\n return toTransportResult(\n {\n case: { ...outcome, documentId: task.documentId },\n document: execution.document,\n lifecycle,\n },\n materializeReport,\n materializeSource,\n );\n};\n\nconst runCaseTask = async <TProjectContext>(\n preparedTask: PreparedCaseTask<TProjectContext>,\n taskIndex: number,\n taskCount: number,\n options: RunCaseExecutionOptions<TProjectContext>,\n onCompleted: (result: CompletedCaseTaskResult) => void,\n): Promise<CompletedCaseTaskResult> => {\n const { prepared, task } = preparedTask;\n const taskProgress = (message: string) =>\n options.progress(\n `[case ${taskIndex + 1}/${taskCount}] ${task.projectName} / ${task.sourcePath} / ${task.caseName}: ${message}`,\n );\n taskProgress('started');\n\n const outputDir = join(\n options.runDir,\n task.projectId,\n 'executor-output',\n task.documentId,\n task.caseId,\n );\n mkdirSync(outputDir, { recursive: true });\n const {\n materialize: materializeReport,\n materializeSource,\n resolve: resolveReportReference,\n resolveSource,\n } = createExecutorReports(outputDir);\n\n if (prepared.collectionErrors.length > 0) {\n return {\n case: asNotRun(\n task.documentId,\n preparedTask.collectedCase,\n task.projectName,\n 'project-preflight-failed',\n ),\n };\n }\n const executor = options.executor ?? localTestExecutor;\n let result: TestCaseTaskRunResult | undefined;\n let executorFailure: TestExecutorError | undefined;\n let executorAttempts = 0;\n for (\n let attemptIndex = 0;\n attemptIndex <= options.test.executorRetry;\n attemptIndex += 1\n ) {\n executorAttempts = attemptIndex + 1;\n try {\n result = await executor.execute(task, {\n signal: options.signal,\n onProgress: taskProgress,\n outputDir,\n materializeReport,\n runLocal: () =>\n runLocalCase(\n preparedTask,\n options,\n taskProgress,\n materializeReport,\n materializeSource,\n ),\n });\n executorFailure = undefined;\n break;\n } catch (error) {\n if (!isTestExecutorError(error)) throw error;\n executorFailure = error;\n if (\n !error.retryable ||\n attemptIndex >= options.test.executorRetry ||\n options.signal.aborted\n ) {\n break;\n }\n taskProgress(\n `executor retry ${attemptIndex + 1}/${options.test.executorRetry}: ${error.message}`,\n );\n }\n }\n if (!result) {\n if (!executorFailure) {\n throw new Error(`Executor did not return a result for ${task.caseId}.`);\n }\n taskProgress(`executor-failed: ${executorFailure.message}`);\n return {\n case: {\n ...asNotRun(\n task.documentId,\n preparedTask.collectedCase,\n task.projectName,\n 'executor-failed',\n ),\n execution: {\n executor: executor.name,\n resources: task.resources,\n attempts: executorAttempts,\n failure: {\n kind: executorFailure.kind,\n message: executorFailure.message,\n retryable: executorFailure.retryable,\n },\n },\n },\n };\n }\n assertTestCaseTaskRunResult(task, result);\n const internalResult = fromTransportResult(\n result,\n resolveReportReference,\n resolveSource,\n );\n const completed = {\n ...internalResult,\n case: {\n ...internalResult.case,\n execution: {\n executor: executor.name,\n resources: task.resources,\n attempts: executorAttempts,\n ...(internalResult.lifecycle\n ? { lifecycle: internalResult.lifecycle }\n : {}),\n ...(result.artifacts ? { artifacts: result.artifacts } : {}),\n ...(result.metadata ? { metadata: result.metadata } : {}),\n },\n },\n };\n onCompleted(completed);\n for (const attempt of internalResult.case.attempts ?? []) {\n await writeCaseAttemptResult(\n options.runDir,\n task.projectId,\n task.documentId,\n attempt,\n );\n }\n if (internalResult.document)\n await writeWorkflowDocumentResult(options.runDir, internalResult.document);\n taskProgress(internalResult.case.status);\n return completed;\n};\n\nexport const runCaseExecution = async <TProjectContext>(\n options: RunCaseExecutionOptions<TProjectContext>,\n): Promise<readonly TestExecutionProjectRunResult[]> => {\n const tasks = prepareCaseTasks(options.projects);\n let failedCaseCount = 0;\n const bailReached = () =>\n options.test.bail > 0 && failedCaseCount >= options.test.bail;\n const results: Array<CompletedCaseTaskResult | undefined> = new Array(\n tasks.length,\n );\n if (tasks.length > 0) {\n try {\n await runTaskPool({\n tasks: tasks.map((preparedTask) => preparedTask.task),\n maxConcurrency: Math.min(options.test.maxConcurrency, tasks.length),\n signal: options.signal,\n shouldStop: bailReached,\n run: async (_task, taskIndex) => {\n try {\n const result = await runCaseTask(\n tasks[taskIndex],\n taskIndex,\n tasks.length,\n options,\n (completed) => {\n results[taskIndex] = completed;\n },\n );\n results[taskIndex] = result;\n if (result.case.status === 'failed') failedCaseCount += 1;\n return result;\n } catch (error) {\n options.onInfrastructureError(error);\n throw error;\n }\n },\n });\n } catch (error) {\n options.onInfrastructureError(error);\n }\n }\n\n return options.projects.map((prepared, projectIndex) => {\n const projectTasks = tasks\n .map((task, taskIndex) => ({ task, result: results[taskIndex] }))\n .filter(({ task }) => task.projectIndex === projectIndex);\n const reason = prepared.collectionErrors.length\n ? 'project-preflight-failed'\n : options.signal.aborted\n ? 'interrupted'\n : bailReached()\n ? 'bail'\n : undefined;\n const cases = projectTasks.map(({ task, result }) => {\n if (result) return result.case;\n if (!reason) {\n throw new Error(\n `Case scheduler did not produce a result for \"${task.task.caseId}\".`,\n );\n }\n return asNotRun(\n task.task.documentId,\n task.collectedCase,\n prepared.project.name,\n reason,\n );\n });\n const documents = projectTasks.flatMap(({ result }) =>\n result?.document ? [result.document] : [],\n );\n return buildProjectResult(prepared, cases, documents);\n });\n};\n","import {\n WorkflowExecutionFailure,\n decideRetry,\n isResourceRecoveryError,\n runDocumentAttempts,\n runWorkflowDocument,\n} from '@midscene/core/internal/test-runner';\nimport type {\n CaseRunOutcome,\n WorkflowDocumentExecutionResult,\n WorkflowDocumentRunResult,\n} from '@midscene/core/internal/test-runner';\nimport { isFatalDeviceError } from '../errors';\nimport type { PreparedDocumentInvocation } from './execution-plan';\nimport { formatStep, formatStepResult } from './execution-result';\nimport {\n writeCaseAttemptResult,\n writeWorkflowDocumentResult,\n} from './result-store';\nimport type { LoadedExecutionProject } from './test-project';\nimport type { TestProjectCaseRunResult } from './types';\n\ninterface DocumentInvocationSinks {\n cases: TestProjectCaseRunResult[];\n documents: WorkflowDocumentRunResult[];\n}\n\ninterface ExecuteDocumentInvocationOptions {\n invocation: PreparedDocumentInvocation;\n project: LoadedExecutionProject<unknown>;\n projectContext: unknown;\n runDir: string;\n signal: AbortSignal;\n rootSignal: AbortSignal;\n shouldBail(): boolean;\n isProjectFatal(): boolean;\n markProjectFatal(): void;\n addFailedCases(count: number): void;\n onProgress(message: string): void;\n onDocumentResult?(result: WorkflowDocumentRunResult): Promise<void>;\n sinks: DocumentInvocationSinks;\n}\n\nconst caseHasFatalError = (outcome: CaseRunOutcome): boolean =>\n (outcome.attempts ?? []).some(\n (attempt) =>\n [...attempt.beforeEach, ...attempt.steps, ...attempt.afterEach].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) ||\n (attempt.teardownErrors ?? []).some(isFatalDeviceError) ||\n !!attempt.executionErrors?.some(isResourceRecoveryError),\n );\n\nconst documentHasFatalError = (result: WorkflowDocumentRunResult): boolean =>\n [...result.beforeAll, ...result.afterAll].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) ||\n (result.teardownErrors ?? []).some(isFatalDeviceError) ||\n !!result.executionErrors?.some(isResourceRecoveryError);\n\n/** Execute prepared document policies through the shared retry boundary. */\nexport async function executeDocumentInvocation(\n options: ExecuteDocumentInvocationOptions,\n): Promise<void> {\n const { invocation, project, sinks } = options;\n const { document } = invocation;\n const documentRetry = invocation.retry.scope === 'document';\n const attempts: WorkflowDocumentExecutionResult[] = [];\n\n await runDocumentAttempts(\n {\n retry: documentRetry ? invocation.retry.count : 0,\n signal: options.signal,\n shouldStop: () => options.shouldBail() || options.isProjectFatal(),\n },\n async (documentAttemptIndex) => {\n if (documentRetry)\n options.onProgress(\n ` file attempt ${documentAttemptIndex + 1}/${invocation.retry.count + 1}: ${document.sourcePath}`,\n );\n const execution = await runWorkflowDocument(document, {\n plan: invocation.plan,\n documentAttemptIndex: documentRetry ? documentAttemptIndex : undefined,\n ...invocation.bindings,\n project,\n projectContext: options.projectContext,\n retry: documentRetry ? 0 : invocation.retry.count,\n signal: options.signal,\n defaultTimeoutMs: invocation.defaultTimeoutMs,\n shouldStop: () =>\n options.rootSignal.aborted ||\n options.shouldBail() ||\n options.isProjectFatal(),\n stopReason: () =>\n options.rootSignal.aborted\n ? 'interrupted'\n : options.isProjectFatal()\n ? 'fatal-error'\n : 'bail',\n isFatalError: (run) =>\n [...run.beforeEach, ...run.steps, ...run.afterEach].some(\n (step) => step.error && isFatalDeviceError(step.error),\n ) || (run.teardownErrors ?? []).some(isFatalDeviceError),\n onCaseStart: (collectedCase) => {\n options.onProgress(\n ` [case ${collectedCase.caseIndex + 1}/${document.cases.length}] ${collectedCase.definition.name}`,\n );\n },\n onStepStart: (info) => {\n const indent = info.scope === 'case' ? ' ' : ' ';\n options.onProgress(`${indent}→ ${formatStep(info)}`);\n },\n onStepResult: async (info, result) => {\n await invocation.bindings.onStepResult?.(info, result);\n options.onProgress(\n formatStepResult(\n info,\n result,\n info.scope === 'case' ? ' ' : ' ',\n ),\n );\n },\n onCaseResult: async (attempt) => {\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n options.onProgress(\n ` ${attempt.status === 'success' ? '✓' : '✗'} attempt ${attempt.attemptIndex + 1}/${documentRetry ? 1 : invocation.retry.count + 1}: ${attempt.name} (${attempt.durationMs} ms)`,\n );\n },\n onCaseOutcome: (outcome) => {\n if (caseHasFatalError(outcome)) options.markProjectFatal();\n if (!documentRetry && outcome.status === 'failed')\n options.addFailedCases(1);\n },\n onDocumentResult: options.onDocumentResult,\n }).catch(async (error: unknown) => {\n if (error instanceof WorkflowExecutionFailure) {\n const partial = error.result as WorkflowDocumentExecutionResult;\n const resourceOnly =\n error.errors.length > 0 &&\n error.errors.every(\n (failure) =>\n isResourceRecoveryError(failure) ||\n partial.document.hostErrors?.some(\n (host) =>\n host.phase === 'cleanup' &&\n (host.error === failure ||\n (host.error instanceof Error &&\n host.error.cause === failure)),\n ),\n );\n // Recovery and disposal failures stop this Project, not independent\n // Projects. Publication and other infrastructure failures still throw.\n if (resourceOnly) {\n if (error.errors.some(isResourceRecoveryError))\n options.markProjectFatal();\n return partial;\n }\n if (documentRetry)\n partial.document.retryDecision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: 'failed',\n infrastructureError: true,\n });\n attempts.push(partial);\n sinks.documents.push(partial.document);\n sinks.cases.push(\n ...partial.cases.map((outcome) => ({\n ...outcome,\n documentId: document.documentId,\n documentRunId: partial.document.documentRunId,\n })),\n );\n try {\n for (const outcome of partial.cases)\n for (const attempt of outcome.attempts ?? [])\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n await writeWorkflowDocumentResult(options.runDir, partial.document);\n } catch (publicationError) {\n throw new WorkflowExecutionFailure(partial, [\n ...error.errors,\n publicationError,\n ]);\n }\n }\n throw error;\n });\n\n if (documentHasFatalError(execution.document)) options.markProjectFatal();\n const owners = [\n execution.document,\n ...execution.cases.flatMap((outcome) => outcome.attempts ?? []),\n ];\n const cleanupPending = owners.some(\n (owner) => owner.cleanup?.status === 'pending',\n );\n const operationPending = owners.some(\n (owner) => !!owner.pendingOperations?.length,\n );\n const cleanupFailed = owners.some(\n (owner) =>\n owner.cleanup?.status === 'failed' ||\n !!owner.teardownErrors?.length ||\n ('hostErrors' in owner &&\n owner.hostErrors?.some(({ phase }) => phase === 'cleanup')),\n );\n // Files share the Project context; stop reusing it without cancelling\n // independent Projects. Publication and execution errors still throw.\n if (cleanupPending || cleanupFailed || operationPending)\n options.markProjectFatal();\n const failed =\n execution.document.status === 'failed' ||\n execution.cases.some((item) => item.status !== 'success');\n const decision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: failed ? 'failed' : 'success',\n cleanupPending,\n cleanupFailed,\n operationPending,\n fatalError: options.isProjectFatal(),\n interrupted: options.signal.aborted || options.rootSignal.aborted,\n shouldStop: options.shouldBail(),\n });\n if (documentRetry) execution.document.retryDecision = decision;\n attempts.push(execution);\n sinks.cases.push(\n ...execution.cases.map((outcome) => ({\n ...outcome,\n documentId: document.documentId,\n documentRunId: execution.document.documentRunId,\n })),\n );\n sinks.documents.push(execution.document);\n // Per-attempt callbacks publish incremental facts; seal the final retry\n // decision after callback-driven interruption/bail has been observed.\n try {\n for (const outcome of execution.cases)\n for (const attempt of outcome.attempts ?? [])\n await writeCaseAttemptResult(\n options.runDir,\n project.projectId,\n document.documentId,\n attempt,\n );\n await writeWorkflowDocumentResult(options.runDir, execution.document);\n } catch (error) {\n execution.document.status = 'failed';\n execution.document.hostErrors = [\n ...(execution.document.hostErrors ?? []),\n { phase: 'publication', error },\n ];\n if (documentRetry)\n execution.document.retryDecision = decideRetry({\n scope: 'document',\n retryCount: invocation.retry.count,\n attemptIndex: documentAttemptIndex,\n status: 'failed',\n infrastructureError: true,\n });\n throw new WorkflowExecutionFailure(execution, [error]);\n }\n return decision.decision === 'retry' ? 'failed' : undefined;\n },\n );\n\n const final = attempts.at(-1);\n if (!final) return;\n const failedCases = final.cases.filter(\n (item) => item.status === 'failed',\n ).length;\n if (documentRetry && failedCases) options.addFailedCases(failedCases);\n else if (final.document.status === 'failed' && failedCases === 0)\n options.addFailedCases(Math.max(1, failedCases));\n}\n","import { appendFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport type { TestRunReportOperationEvent } from '@midscene/core';\n\n/** Registered operations keep this sink after the report has been sealed.\n * Each small, bounded event is written before returning to the operation. No\n * open file descriptor or mutable report object is retained by the journal.\n */\nexport function createOperationJournal(runDir: string) {\n const path = join(runDir, 'operations.jsonl');\n writeFileSync(path, '', { flag: 'wx' });\n return {\n path,\n append(event: Readonly<TestRunReportOperationEvent>) {\n appendFileSync(path, `${JSON.stringify(event)}\\n`);\n },\n };\n}\n","import { setMaxListeners } from 'node:events';\nimport { dirname, join } from 'node:path';\nimport type { TestRunReportSourceIndex } from '@midscene/core';\nimport {\n WorkflowExecutionFailure,\n WorkflowPublicationError,\n asExecutionError,\n observeResourceOperations,\n runConcurrentJobs,\n} from '@midscene/core/internal/test-runner';\nimport type { WorkflowDocumentRunResult } from '@midscene/core/internal/test-runner';\nimport {\n TestRunReportAssembler,\n calculateTestRunHealth,\n} from '@midscene/core/report';\nimport { getDebug } from '@midscene/shared/logger';\nimport { createProjectRuntime } from '../engine/project-runtime';\nimport { writeTestResultMarkdown } from '../report/result-markdown';\nimport {\n buildTestRunReportDump,\n collectTestRunReportSources,\n} from '../report/test-run-report';\nimport { runCaseExecution } from './case-execution';\nimport { executeDocumentInvocation } from './document-invocation';\nimport type {\n PreparedDocumentInvocation,\n PreparedExecutionProject,\n PreparedTestRunPlan,\n} from './execution-plan';\nimport { asNotRun, buildProjectResult, latestById } from './execution-result';\nimport { createOperationJournal } from './operation-journal';\nimport { writeTestProjectRunResult, writeTestRunPlan } from './result-store';\nimport type {\n TestExecutionProjectRunResult,\n TestProjectCaseRunResult,\n TestProjectRunResult,\n TestProjectRunSummary,\n} from './types';\n\nconst summarize = (\n projects: readonly TestExecutionProjectRunResult[],\n): TestProjectRunSummary => {\n const healthCases = projects.flatMap((project) => {\n const documentAttemptByRunId = new Map(\n project.documents.map((document) => [\n document.documentRunId,\n document.attemptIndex ?? 0,\n ]),\n );\n return latestById(project.cases, (item) => item.caseId).map((item) => {\n return {\n status: item.status,\n ...(item.run ? { run: item.run } : {}),\n ...(item.attempts ? { attempts: item.attempts } : {}),\n retryCount: item.documentRunId\n ? (documentAttemptByRunId.get(item.documentRunId) ?? 0)\n : 0,\n };\n });\n });\n const documents = projects.flatMap((project) =>\n latestById(project.documents, (item) => item.documentId),\n );\n const health = calculateTestRunHealth(healthCases);\n return {\n total: health.total,\n passed: health.passed,\n failed: health.failed,\n notRun: health.notRun,\n passedAfterRetry: health.passedAfterRetry,\n finalPassRate: health.finalPassRate,\n firstPassRate: health.firstPassRate,\n filtered: projects.reduce(\n (total, project) => total + project.filteredCaseCount,\n 0,\n ),\n collectionErrors: projects.reduce(\n (total, project) => total + project.collectionErrors.length,\n 0,\n ),\n documentFailures: documents.filter(\n (document) => document.status === 'failed',\n ).length,\n projectFailures: projects.filter((project) => project.status === 'failed')\n .length,\n };\n};\n\nconst notRunSuite = (\n prepared: PreparedExecutionProject,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n): TestProjectCaseRunResult[] =>\n prepared.documents.flatMap((document) =>\n document.cases.map((item) =>\n asNotRun(document.documentId, item, prepared.project.name, reason),\n ),\n );\n\n/** The executor sees prepared policies and bindings, never source-language rules. */\nexport async function runPreparedTestProject(\n plan: PreparedTestRunPlan,\n): Promise<TestProjectRunResult> {\n const {\n startedAt,\n runId,\n projectRoot,\n configPath,\n resultDir,\n runDir,\n summaryPath,\n reportDir,\n definition,\n projects: preparedProjects,\n } = plan;\n const progress = plan.onProgress;\n const totalDocuments = preparedProjects.reduce(\n (total, prepared) => total + prepared.documents.length,\n 0,\n );\n const totalCases = preparedProjects.reduce(\n (total, prepared) => total + prepared.selectedCaseCount,\n 0,\n );\n const totalErrors = preparedProjects.reduce(\n (total, prepared) => total + prepared.collectionErrors.length,\n 0,\n );\n progress(\n `midscene-test: preflighted ${preparedProjects.length} projects, ${totalDocuments} documents, ${totalCases} cases, ${totalErrors} collection errors`,\n );\n\n const effectiveConcurrency = Math.min(\n definition.test.maxConcurrency,\n preparedProjects.length,\n );\n await writeTestRunPlan(runDir, preparedProjects);\n const journal = createOperationJournal(runDir);\n const rootController = new AbortController();\n setMaxListeners(\n Math.max(\n 10,\n (definition.test.executionUnit === 'case'\n ? Math.min(definition.test.maxConcurrency, totalCases)\n : effectiveConcurrency) + 1,\n ),\n rootController.signal,\n );\n const handleSignal = (signal: NodeJS.Signals) => {\n rootController.abort(new Error(`Workflow interrupted by ${signal}.`));\n };\n const sigint = () => handleSignal('SIGINT');\n const sigterm = () => handleSignal('SIGTERM');\n process.on('SIGINT', sigint);\n process.on('SIGTERM', sigterm);\n\n let failedCaseCount = 0;\n const bailReached = () =>\n definition.test.bail > 0 && failedCaseCount >= definition.test.bail;\n let hasInfrastructureError = false;\n const infrastructureErrors: unknown[] = [];\n const recordInfrastructureError = (error: unknown) => {\n const errors =\n error instanceof WorkflowExecutionFailure ? error.errors : [error];\n for (const item of errors)\n if (!infrastructureErrors.includes(item)) infrastructureErrors.push(item);\n hasInfrastructureError = true;\n rootController.abort(error);\n };\n const runInfrastructureCallback = <T>(callback: () => T): T => {\n try {\n return callback();\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n };\n const stopObservingOperations = observeResourceOperations(\n rootController.signal,\n (event) => {\n try {\n journal.append(event);\n } catch (error) {\n recordInfrastructureError(\n new WorkflowPublicationError('write-result', journal.path, error),\n );\n getDebug('test-runner:operations', { console: true })(\n `Could not persist operation event: ${String(error)}`,\n );\n }\n },\n );\n type PreparedProject = (typeof preparedProjects)[number];\n const announceProject = (prepared: PreparedProject, projectIndex: number) => {\n const { project } = prepared;\n runInfrastructureCallback(() =>\n progress(\n `[project ${projectIndex + 1}/${preparedProjects.length}] ${project.name}`,\n ),\n );\n };\n const buildSkippedProjectResult = (\n prepared: PreparedProject,\n projectIndex: number,\n reason: NonNullable<TestProjectCaseRunResult['notRunReason']>,\n ): TestExecutionProjectRunResult => {\n announceProject(prepared, projectIndex);\n return buildProjectResult(prepared, notRunSuite(prepared, reason), []);\n };\n const runPreparedProject = async (\n prepared: PreparedProject,\n projectIndex: number,\n ): Promise<TestExecutionProjectRunResult> => {\n const { project } = prepared;\n announceProject(prepared, projectIndex);\n const projectProgress = (message: string) =>\n runInfrastructureCallback(() =>\n progress(\n effectiveConcurrency > 1 ? `[${project.name}]${message}` : message,\n ),\n );\n const cases: TestProjectCaseRunResult[] = [];\n const documents: WorkflowDocumentRunResult[] = [];\n let lifecycle: TestExecutionProjectRunResult['lifecycle'];\n let projectFatal = false;\n\n if (\n prepared.collectionErrors.length > 0 ||\n (plan.preflightScope === 'run' && totalErrors > 0)\n ) {\n cases.push(...notRunSuite(prepared, 'project-preflight-failed'));\n } else if (rootController.signal.aborted) {\n cases.push(...notRunSuite(prepared, 'interrupted'));\n } else if (bailReached()) {\n cases.push(...notRunSuite(prepared, 'bail'));\n } else {\n const runtime = createProjectRuntime({\n project,\n setup: project.setup,\n signal: rootController.signal,\n });\n let hasProjectExecutionError = false;\n try {\n await runtime.start();\n if (!runtime.canRun) {\n cases.push(\n ...notRunSuite(\n prepared,\n rootController.signal.aborted\n ? 'interrupted'\n : 'project-setup-failed',\n ),\n );\n } else {\n const runDocument = async (\n invocation: PreparedDocumentInvocation,\n documentIndex: number,\n ) => {\n const { document } = invocation;\n if (\n rootController.signal.aborted ||\n bailReached() ||\n projectFatal\n ) {\n const reason = rootController.signal.aborted\n ? 'interrupted'\n : projectFatal\n ? 'fatal-error'\n : 'bail';\n cases.push(\n ...document.cases.map((item) =>\n asNotRun(document.documentId, item, project.name, reason),\n ),\n );\n return;\n }\n projectProgress(\n ` [document ${documentIndex + 1}/${prepared.documents.length}] ${document.sourcePath}`,\n );\n await executeDocumentInvocation({\n invocation,\n project,\n projectContext: runtime.context,\n runDir,\n signal: runtime.signal,\n rootSignal: rootController.signal,\n shouldBail: bailReached,\n isProjectFatal: () => projectFatal,\n markProjectFatal: () => {\n projectFatal = true;\n },\n addFailedCases: (count) => {\n failedCaseCount += count;\n },\n onProgress: projectProgress,\n sinks: {\n cases,\n documents,\n },\n });\n };\n let prerequisiteFailed = false;\n const prerequisite = prepared.invocations.find(\n (invocation) =>\n invocation.document.documentId ===\n prepared.prerequisiteDocumentId,\n );\n const prerequisiteCount = prerequisite ? 1 : 0;\n if (prerequisite) {\n await runDocument(prerequisite, 0);\n prerequisiteFailed =\n documents.at(-1)?.status === 'failed' ||\n latestById(cases, (item) => item.caseId).some(\n (item) => item.status !== 'success',\n );\n }\n if (!prerequisiteFailed) {\n await runConcurrentJobs(\n prepared.invocations.filter(\n (invocation) => invocation !== prerequisite,\n ),\n {\n concurrency: prepared.documentConcurrency,\n shouldStop: () =>\n rootController.signal.aborted ||\n bailReached() ||\n projectFatal,\n },\n async (invocation, index) => {\n try {\n await runDocument(invocation, index + prerequisiteCount);\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n },\n );\n }\n const completed = new Set(cases.map((item) => item.caseId));\n const reason = prerequisiteFailed\n ? 'project-setup-failed'\n : rootController.signal.aborted\n ? 'interrupted'\n : projectFatal\n ? 'fatal-error'\n : 'bail';\n cases.push(\n ...notRunSuite(prepared, reason).filter(\n (item) => !completed.has(item.caseId),\n ),\n );\n }\n } catch (error) {\n hasProjectExecutionError = true;\n recordInfrastructureError(error);\n } finally {\n const hasFailure =\n hasProjectExecutionError ||\n latestById(cases, (item) => item.caseId).some(\n (item) => item.status !== 'success',\n ) ||\n latestById(documents, (item) => item.documentId).some(\n (item) => item.status === 'failed',\n ) ||\n projectFatal ||\n rootController.signal.aborted;\n lifecycle = await runtime.finish(hasFailure ? 'failed' : 'success');\n }\n if (hasProjectExecutionError) {\n const completed = new Set(cases.map((item) => item.caseId));\n cases.push(\n ...notRunSuite(prepared, 'interrupted').filter(\n (item) => !completed.has(item.caseId),\n ),\n );\n }\n }\n\n const order = new Map(\n prepared.documents.map((document, index) => [document.documentId, index]),\n );\n const documentOrder = (id: string) =>\n order.get(id) ?? Number.MAX_SAFE_INTEGER;\n cases.sort(\n (a, b) =>\n documentOrder(a.documentId) - documentOrder(b.documentId) ||\n a.caseIndex - b.caseIndex,\n );\n documents.sort(\n (a, b) =>\n documentOrder(a.documentId) - documentOrder(b.documentId) ||\n (a.attemptIndex ?? 0) - (b.attemptIndex ?? 0),\n );\n return buildProjectResult(prepared, cases, documents, lifecycle);\n };\n\n const projectResults: Array<TestExecutionProjectRunResult | undefined> =\n new Array(preparedProjects.length);\n\n try {\n if (\n definition.test.executionUnit === 'case' &&\n !(plan.preflightScope === 'run' && totalErrors > 0)\n ) {\n const results = await runCaseExecution({\n projects: preparedProjects,\n test: definition.test,\n executor: definition.executor,\n runDir,\n signal: rootController.signal,\n progress,\n onInfrastructureError: recordInfrastructureError,\n });\n results.forEach((result, index) => {\n projectResults[index] = result;\n });\n } else\n await runConcurrentJobs(\n preparedProjects,\n {\n concurrency: effectiveConcurrency,\n shouldStop: () =>\n hasInfrastructureError ||\n rootController.signal.aborted ||\n bailReached(),\n },\n async (prepared, index) => {\n try {\n projectResults[index] = await runPreparedProject(prepared, index);\n } catch (error) {\n recordInfrastructureError(error);\n throw error;\n }\n },\n );\n } catch (error) {\n recordInfrastructureError(error);\n } finally {\n stopObservingOperations();\n process.off('SIGINT', sigint);\n process.off('SIGTERM', sigterm);\n }\n\n const completedProjectResults = preparedProjects.map(\n (prepared, projectIndex) => {\n const result = projectResults[projectIndex];\n if (result) return result;\n const reason = prepared.collectionErrors.length\n ? 'project-preflight-failed'\n : rootController.signal.aborted\n ? 'interrupted'\n : bailReached()\n ? 'bail'\n : undefined;\n if (!reason) {\n throw new Error(\n `Project scheduler did not produce a result for \"${prepared.project.name}\".`,\n );\n }\n return buildSkippedProjectResult(prepared, projectIndex, reason);\n },\n );\n\n const summary = summarize(completedProjectResults);\n const failed =\n hasInfrastructureError ||\n rootController.signal.aborted ||\n summary.failed > 0 ||\n summary.notRun > 0 ||\n summary.collectionErrors > 0 ||\n summary.documentFailures > 0 ||\n summary.projectFailures > 0;\n const endedAt = new Date();\n const result: TestProjectRunResult = {\n schemaVersion: 3,\n operationLog: { path: journal.path, snapshotAt: endedAt.toISOString() },\n runId,\n startedAt: startedAt.toISOString(),\n endedAt: endedAt.toISOString(),\n durationMs: Math.max(0, endedAt.getTime() - startedAt.getTime()),\n status: failed ? 'failed' : 'success',\n exitCode: failed ? 1 : 0,\n resultDir,\n summaryPath,\n reportDir,\n summary,\n projects: completedProjectResults,\n cases: completedProjectResults.flatMap((project) => project.cases),\n documents: completedProjectResults.flatMap((project) => project.documents),\n collectionErrors: completedProjectResults.flatMap(\n (project) => project.collectionErrors,\n ),\n ...(hasInfrastructureError\n ? { errors: infrastructureErrors.map(asExecutionError) }\n : {}),\n };\n let completedResult = result;\n let reportIndex: TestRunReportSourceIndex | undefined;\n const publish = async (\n operation: 'write-result' | 'write-report',\n path: string,\n callback: () => unknown | Promise<unknown>,\n ): Promise<boolean> => {\n try {\n await callback();\n return true;\n } catch (error) {\n recordInfrastructureError(\n error instanceof WorkflowPublicationError ||\n error instanceof WorkflowExecutionFailure\n ? error\n : new WorkflowPublicationError(operation, path, error),\n );\n completedResult = {\n ...completedResult,\n status: 'failed',\n exitCode: 1,\n errors: infrastructureErrors.map(asExecutionError),\n };\n return false;\n }\n };\n const writeSummary = () =>\n publish('write-result', summaryPath, () =>\n writeTestProjectRunResult({\n projectRoot,\n ...(configPath ? { configPath } : {}),\n result: completedResult,\n }),\n );\n const writeReport = () =>\n publish('write-report', reportDir, async () => {\n if (!plan.reportEnabled) return;\n const reportPath = await new TestRunReportAssembler().assembleAsync({\n outputDir: reportDir,\n reportFileName: `midscene-e2e-${runId}`,\n overwrite: false,\n sources: collectTestRunReportSources(completedResult),\n buildRunnerDump: (index) => {\n reportIndex = index;\n const dump = buildTestRunReportDump(completedResult, index);\n const warn = getDebug('test-runner:report-assembler', {\n console: true,\n });\n for (const diagnostic of dump.diagnostics ?? [])\n warn(diagnostic.message);\n return dump;\n },\n });\n completedResult = { ...completedResult, reportPath };\n });\n // Publish each artifact once. The summary includes the report path or its\n // failure. If the summary itself fails, the thrown result remains authoritative;\n // do not rebuild an already-published execution report to backfill that error.\n await writeReport();\n for (const publication of plan.publications)\n await publish(publication.operation, publication.path, async () => {\n await publication.publish(completedResult);\n });\n await publish(\n 'write-result',\n join(dirname(summaryPath), 'result.md'),\n async () => {\n const markdownPath = await writeTestResultMarkdown(\n completedResult,\n reportIndex,\n );\n completedResult = { ...completedResult, markdownPath };\n },\n );\n await writeSummary();\n if (hasInfrastructureError)\n throw new WorkflowExecutionFailure(completedResult, infrastructureErrors);\n return completedResult;\n}\n","import type { TestProjectRunOptions } from './execution-plan';\nimport { prepareTestRun } from './prepare-test-run';\nimport { runPreparedTestProject } from './run-prepared-project';\nimport type { TestProjectRunResult } from './types';\n\nexport type { TestProjectRunOptions } from './execution-plan';\nexport { discoverSelectedTestFiles } from './project-preparation';\nexport { createTestRunId } from './prepare-test-run';\nexport {\n DEFAULT_TEST_FILE_SELECTION,\n discoverTestConfig,\n discoverTestFiles,\n} from './project-preparation';\n\n/** Native Test entry for cases/steps workflow documents. */\nexport async function runTestProject(\n options: TestProjectRunOptions = {},\n): Promise<TestProjectRunResult> {\n return runPreparedTestProject(await prepareTestRun(options));\n}\n"],"names":["__webpack_require__","definition","key","Object","obj","prop","Symbol","isSafeResultPathSegment","value","json","z","time","Number","Date","count","reportErrorSchema","operation","cleanupSchema","pendingOperationsSchema","collectionStatus","metricsSchema","operationsSchema","runtimeResultFields","plannedStep","documentPlanSchema","executorErrorKey","_executorErrorKey","TestExecutorError","Error","message","options","isTestExecutorError","Reflect","defineTestExecutor","executor","localTestExecutor","_task","context","jsonValueSchema","timestampSchema","errorSchema","stepBaseSchema","stepSchema","validatedStepSchema","step","attemptSchema","notRunReasonSchema","resultSchema","attemptMatchesTask","task","attempt","hasUnfinishedWork","result","undefined","assertTestCaseTaskRunResult","parsed","TypeError","outcome","attempts","steps","Set","index","finalAttempt","JSON","reportRefs","reference","document","lifecycle","createCaseInvocationId","projectId","sourcePath","caseIndex","invocationIndex","createHash","createDocumentInvocationId","normalizeSteps","coreNormalizeSteps","parseWorkflowSource","source","stack","nodes","sensitiveNodes","sensitiveValues","redactedPaths","sourceOffset","load","JSON_SCHEMA","event","state","node","isReportSecretKey","ranges","left","right","offset","redacted","range","text","leading","trailing","sanitizeReportText","interpolationExpression","exactEnvExpression","exactProjectExpression","missingVariable","kind","name","WorkflowParseError","projectVariable","environmentVariable","interpolationValue","String","resolveString","exactEnv","exactProject","_match","environmentName","projectName","resolveWorkflowVariables","Array","child","isMapping","NativeWorkflowFormatError","actualFormat","rejectUnknownKeys","allowed","label","allowedSet","unknown","createCaseId","createWorkflowDocumentId","collectWorkflowDocument","snapshot","readFileSync","error","sourceYaml","format","classifyWorkflowDocumentFormat","sep","resolveStepVariables","phase","stepIndex","process","normalizeLifecycle","normalized","resolved","ids","cases","tags","tag","resources","resource","caseId","writeJson","path","mkdir","dirname","writeFile","WorkflowPublicationError","writeTestRunPlan","runDir","projects","join","item","toPosix","caseAttemptResultPath","documentId","workflowDocumentResultPath","collectionErrorPath","id","writeWorkflowDocumentResult","_documentRunId","persistedResult","writeCaseAttemptResult","attemptId","writeCollectionError","collectionError","relativeToSummary","summaryPath","target","relative","errorJson","sanitizeReportError","writeTestProjectRunResult","fact","project","NodeRegistry","CoreNodeRegistry","projectIdFromIndex","defineTestProject","defineProjectSetup","getDefaultExport","loaded","absolutePath","defaultExport","isRecord","allowedKeys","isAbsolutePattern","pattern","isAbsolute","validatePatterns","field","allowEmptyInclude","validateTestFileSelection","include","exclude","validateTagList","validateTagSelection","assertJsonValue","seen","deepFreezeJson","validateVariables","validateSetup","validatePositiveInteger","fallback","validateNonNegativeInteger","validateExecutionProjects","defaultSetup","globalNodes","setup","names","candidate","files","localNodes","validateTestOptions","executionUnit","validateTestExecutor","validateOutputPath","validateOutput","validateTestProjectDefinition","resolvedProjects","test","assertSupportedConfig","extension","canRetryWithCjsLoader","errorCode","SyntaxError","loadTestProject","configPath","resolve","pathToFileURL","tsImport","tsxRequire","fallbackError","CONFIG_NAMES","CONFIG_PREFIX","ALWAYS_IGNORED_PATTERNS","DEFAULT_TEST_FILE_SELECTION","discoverSelectedTestFiles","projectRoot","paths","root","requestedPath","relativePath","existsSync","statSync","file","discoverTestFiles","a","b","relativeA","relativeB","discoverResolvedTestFiles","selection","match","patterns","globSync","discoverTestConfig","candidates","readdirSync","supported","unsupported","asCollectionError","WorkflowError","matchesTags","filterDocumentCases","filtered","selectProjects","requested","known","prepareProject","defaultTimeoutMs","platform","fileSelection","prerequisiteFile","projectFiles","selectedFiles","mainFiles","occurrences","Map","sources","collectionErrors","invocations","plans","filteredCaseCount","availableCaseIds","collected","plan","buildTestRunReportPlan","duplicate","documents","invocation","prerequisiteSource","prerequisiteDocument","total","validateUniqueStrings","values","validateRunSelection","caseIds","padDatePart","createTestRunId","date","uuid","randomUUID","timestamp","assertDirectory","resolveRunInput","cwd","inputPath","singleFile","cliProjectRoot","prepareTestRun","startedAt","runId","input","resultDir","reportDir","mkdirSync","hasFormatMismatch","duration","ms","seconds","Math","href","from","encodeURIComponent","renderTestResultMarkdown","dump","summary","lines","infrastructure","Boolean","groups","errors","recordSteps","group","failure","testCase","diagnostic","emptyIndex","writeTestResultMarkdown","output","buildTestRunReportDump","asNotRun","collectedCase","reason","formatStep","info","position","formatStepResult","indent","symbol","continuation","latestById","items","buildProjectResult","prepared","projectFailed","createExecutorReports","outputDir","realpathSync","destination","dumpPath","cpSync","screenshots","entry","isDirectoryReport","basename","reportPath","runTaskPool","pending","_","results","activeResources","active","firstError","hasError","Promise","reject","settled","stopRequested","finish","pump","release","claimRunnable","pendingIndex","taskIndex","isolatedDocumentId","prepareCaseTasks","projectIndex","reviveError","revived","reviveStep","report","base","trace","reviveAttempt","executionErrors","teardownErrors","beforeEach","afterEach","reviveDocument","beforeAll","afterAll","hostErrors","reviveLifecycle","setupError","toTransportResult","materializeReport","materializeSource","transportReports","scope","mapStep","_sources","mapAttempt","reportPaths","reportSources","reportScopeId","transportAttempt","run","_run","_attempts","transportCase","transportDocument","fromTransportResult","resolveReportReference","resolveSource","resolveReports","refs","ref","caseBase","runLocalCase","preparedTask","taskProgress","isolatedDocument","runtime","createProjectRuntime","execution","executionError","runWorkflowDocument","isFatalDeviceError","WorkflowExecutionFailure","failed","runCaseTask","taskCount","onCompleted","executorFailure","executorAttempts","attemptIndex","internalResult","completed","runCaseExecution","tasks","failedCaseCount","bailReached","projectTasks","caseHasFatalError","isResourceRecoveryError","documentHasFatalError","executeDocumentInvocation","sinks","documentRetry","runDocumentAttempts","documentAttemptIndex","partial","resourceOnly","host","decideRetry","publicationError","owners","cleanupPending","owner","operationPending","cleanupFailed","decision","final","failedCases","createOperationJournal","writeFileSync","appendFileSync","summarize","healthCases","documentAttemptByRunId","health","calculateTestRunHealth","notRunSuite","runPreparedTestProject","preparedProjects","progress","totalDocuments","totalCases","totalErrors","effectiveConcurrency","journal","rootController","AbortController","setMaxListeners","handleSignal","signal","sigint","sigterm","hasInfrastructureError","infrastructureErrors","recordInfrastructureError","runInfrastructureCallback","callback","stopObservingOperations","observeResourceOperations","getDebug","announceProject","buildSkippedProjectResult","runPreparedProject","projectProgress","projectFatal","hasProjectExecutionError","runDocument","documentIndex","prerequisiteFailed","prerequisite","prerequisiteCount","runConcurrentJobs","hasFailure","order","documentOrder","projectResults","completedProjectResults","endedAt","asExecutionError","completedResult","reportIndex","publish","writeSummary","writeReport","TestRunReportAssembler","collectTestRunReportSources","warn","publication","markdownPath","runTestProject"],"mappings":";;;IAAAA,oBAAoB,CAAC,GAAG,CAAC,UAASC;QACjC,IAAI,IAAIC,OAAOD,WACR,IAAGD,oBAAoB,CAAC,CAACC,YAAYC,QAAQ,CAACF,oBAAoB,CAAC,CAAC,UAASE,MACzEC,OAAO,cAAc,CAAC,UAASD,KAAK;YAAE,YAAY;YAAM,KAAKD,UAAU,CAACC,IAAI;QAAC;IAGzF;;;ICNAF,oBAAoB,CAAC,GAAG,CAACI,KAAKC,OAAUF,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACC,KAAKC;;;ICClFL,oBAAoB,CAAC,GAAG,CAAC;QACxB,IAAG,AAAkB,eAAlB,OAAOM,UAA0BA,OAAO,WAAW,EACrDH,OAAO,cAAc,CAAC,UAASG,OAAO,WAAW,EAAE;YAAE,OAAO;QAAS;QAEtEH,OAAO,cAAc,CAAC,UAAS,cAAc;YAAE,OAAO;QAAK;IAC5D;;;;;;;;;;;;;;;;;;;;;;ACLO,MAAMI,0BAA0B,CAACC,QACtC,AAAiB,YAAjB,OAAOA,SAAsB,qCAAqC,IAAI,CAACA;ACOzE,MAAMC,OAA6BC,mBAAAA,CAAAA,CAAAA,IAAM,CAAC,IACxCA,mBAAAA,CAAAA,CAAAA,KAAO,CAAC;QACNA,mBAAAA,CAAAA,CAAAA,OAAM;QACNA,mBAAAA,CAAAA,CAAAA,MAAQ;QACRA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,MAAM;QACjBA,mBAAAA,CAAAA,CAAAA,OAAS;QACTA,mBAAAA,CAAAA,CAAAA,KAAO,CAACD;QACRC,mBAAAA,CAAAA,CAAAA,MAAQ,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,IAAID;KACtB;AAEH,MAAME,OAAOD,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,MAAM,CAAC,CAACF,QAAUI,OAAO,QAAQ,CAACC,KAAK,KAAK,CAACL;AACrE,MAAMM,gCAAQJ,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW;AAC1C,MAAMF,gCAAQE,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC3B,OAAOD;IACP,gBAAgBC,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,IAAI,QAAQ;IAC5C,eAAeA,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,IAAI,QAAQ;AAC7C;AAgBO,MAAMK,oBAAoDL,mBAAAA,CAAAA,CAAAA,IAAM,CAAC,IACtEA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACb,QAAQA,mBAAAA,CAAAA,CAAAA,OAAS,CAAC,kBAAkB,QAAQ;QAC5C,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ;QACd,SAASA,mBAAAA,CAAAA,CAAAA,MAAQ;QACjB,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;QACzB,SAASF,8BAAM,QAAQ;QACvB,OAAOO,kBAAkB,QAAQ;QACjC,QAAQL,mBAAAA,CAAAA,CAAAA,KAAO,CAACK,mBAAmB,QAAQ;QAC3C,WAAWL,mBAAAA,CAAAA,CAAAA,OAAS,GAAG,QAAQ;IACjC;AAEF,MAAMM,oCAAYN,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC/B,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IAC5B,SAASA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;IAC5B,QAAQA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;IAC3B,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;AAC3B;AACO,MAAMO,gBAAgBP,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC1C,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAgB;QAAa;QAAW;KAAS;IACjE,YAAYC;IACZ,aAAaD,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;IAChC,oBAAoBA,mBAAAA,CAAAA,CAAAA,KAAO,CAACM,mCAAW,QAAQ;IAC/C,OAAOD,kBAAkB,QAAQ;AACnC;AACO,MAAMG,0BAA0BR,mBAAAA,CAAAA,CAAAA,KAAO,CAACM;AAC/C,MAAMG,mBAAmBT,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;IAAC;IAAY;IAAW;CAAU;AAC3D,MAAMU,gBAAgBV,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC1C,gBAAgBI;IAChB,aAAaJ,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,MAAM,GAAG,WAAW;IAC5C,cAAcI;IACd,mBAAmBA;IACnB,kBAAkBA;IAClB,aAAaA;IACb,YAAYJ,mBAAAA,CAAAA,CAAAA,YACG,CAAC;QACZ,QAAQS;QACR,wBAAwBL;QACxB,wBAAwBA;QACxB,SAASJ,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ;QACzB,QAAQA,mBAAAA,CAAAA,CAAAA,YACO,CAAC;YACZ,gBAAgBS;YAChB,aAAaA;YACb,aAAaA;QACf,GACC,QAAQ;IACb,GACC,QAAQ;AACb;AACO,MAAME,mBAAmBX,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC7C,YAAYC;IACZ,QAAQD,mBAAAA,CAAAA,CAAAA,KAAO,CACbA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACb,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC5B,eAAeA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YACpB;YACA;YACA;YACA;YACA;SACD;QACD,MAAMA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YACX;YACA;YACA;YACA;YACA;SACD;QACD,IAAIC;QACJ,QAAQD,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;QAC3B,SAASA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;QAC5B,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;QACzB,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;YAAU;SAAU,EAAE,QAAQ;QACzD,SAASA,mBAAAA,CAAAA,CAAAA,OAAS,GAAG,QAAQ;QAC7B,OAAOK,kBAAkB,QAAQ;QACjC,oBAAoBL,mBAAAA,CAAAA,CAAAA,KAAO,CAACM,mCAAW,QAAQ;IACjD;AAEJ;AACO,MAAMM,sBAAsB;IACjC,iBAAiBZ,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAW;QAAU;KAAU,EAAE,QAAQ;IAClE,QAAQA,mBAAAA,CAAAA,CAAAA,aACQ,CACZA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAa;QAAc;QAAS;QAAa;KAAW,GACpEA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACb,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;YAAU;YAAW;SAAe;QAC/D,kBAAkBI;QAClB,mBAAmBA;IACrB,IAED,QAAQ;IACX,SAASG,cAAc,QAAQ;IAC/B,mBAAmBC,wBAAwB,QAAQ;IACnD,eAAeR,mBAAAA,CAAAA,CAAAA,YACA,CAAC;QACZ,OAAOA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAQ;SAAW;QAClC,YAAYI;QACZ,cAAcA;QACd,UAAUJ,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAS;SAAO;QAClC,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YACb;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;IACH,GACC,QAAQ;AACb;AAIA,MAAMa,cAAcb,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IACjC,IAAIA,mBAAAA,CAAAA,CAAAA,MAAQ;IACZ,OAAOA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAa;QAAc;QAAS;QAAa;KAAW;IAC3E,WAAWI;IACX,MAAMJ,mBAAAA,CAAAA,CAAAA,MAAQ;IACd,OAAOA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;IAC1B,OAAOF;IACP,WAAWE,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAY;KAAW;IAC1C,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ,GAAG,QAAQ;IACzC,iBAAiBA,mBAAAA,CAAAA,CAAAA,OAAS;AAC5B;AACO,MAAMc,qBAAqBd,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAC/C,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ;IACpB,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ;IACpB,YAAYF,8BAAM,QAAQ;IAC1B,OAAOE,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QAAE,OAAOA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAQ;SAAW;QAAGI,OAAKA;IAAC;IACnE,WAAWJ,mBAAAA,CAAAA,CAAAA,KAAO,CAACa;IACnB,UAAUb,mBAAAA,CAAAA,CAAAA,KAAO,CAACa;IAClB,OAAOb,mBAAAA,CAAAA,CAAAA,KAAO,CACZA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACb,QAAQA,mBAAAA,CAAAA,CAAAA,MAAQ;QAChB,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ;QACd,WAAWI;QACX,UAAUJ,mBAAAA,CAAAA,CAAAA,OAAS;QACnB,MAAMA,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ;QACtB,WAAWA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAY;SAAgB,EAAE,QAAQ;QACzD,YAAYA,mBAAAA,CAAAA,CAAAA,KAAO,CAACa;QACpB,OAAOb,mBAAAA,CAAAA,CAAAA,KAAO,CAACa;QACf,WAAWb,mBAAAA,CAAAA,CAAAA,KAAO,CAACa;IACrB;AAEJ;;;;;;;;;;;ACuBA,MAAME,mBAAmBnB,OAAO,GAAG,CAAC;IAGxBoB,oBAAAA;AADL,MAAMC,0BAA0BC;IAKrC,YACEC,OAAe,EACfC,UAII,CAAC,CAAC,CACN;QACA,KAAK,CAACD,SAAS;YAAE,OAAOC,QAAQ,KAAK;QAAC,IAZxC,uBAAUJ,mBAAoB,OAC9B,uBAAS,QAAT,SACA,uBAAS,aAAT;QAWE,IAAI,CAAC,IAAI,GAAG;QACZ,IAAI,CAAC,IAAI,GAAGI,QAAQ,IAAI,IAAI;QAC5B,IAAI,CAAC,SAAS,GAAGA,QAAQ,SAAS,IAAI;IACxC;AACF;AAGO,SAASC,oBACdvB,KAAc;IAEd,OACEA,iBAAiBoB,SACjBI,AAAyC,SAAzCA,QAAQ,GAAG,CAACxB,OAAOiB,qBACnB;QAAC;QAAa;QAAa;QAAW;QAAU;KAAU,CAAC,QAAQ,CACjEO,QAAQ,GAAG,CAACxB,OAAO,YAErB,AAA2C,aAA3C,OAAOwB,QAAQ,GAAG,CAACxB,OAAO;AAE9B;AAWO,MAAMyB,qBAAqB,CAChCC,WACcA;AAET,MAAMC,oBAAkChC,OAAO,MAAM,CAAC;IAC3D,MAAM;IACN,SAAS,CAACiC,OAAqBC,UAC7BA,QAAQ,QAAQ;AACpB;AAEA,MAAMC,kBAAoD5B,mBAAAA,CAAAA,CAAAA,IAAM,CAAC,IAC/DA,mBAAAA,CAAAA,CAAAA,KAAO,CAAC;QACNA,mBAAAA,CAAAA,CAAAA,OAAM;QACNA,mBAAAA,CAAAA,CAAAA,MAAQ;QACRA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,MAAM;QACjBA,mBAAAA,CAAAA,CAAAA,OAAS;QACTA,mBAAAA,CAAAA,CAAAA,KAAO,CAAC4B;QACR5B,mBAAAA,CAAAA,CAAAA,MAAQ,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,IAAI4B;KACtB;AAEH,MAAMC,kBAAkB7B,mBAAAA,CAAAA,CAAAA,MACf,GACN,MAAM,CAAC,CAACF,QAAUI,OAAO,QAAQ,CAACC,KAAK,KAAK,CAACL,SAAS;IACrD,SAAS;AACX;AACF,MAAMgC,cAAc9B,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IACjC,QAAQA,mBAAAA,CAAAA,CAAAA,OAAS,CAAC,kBAAkB,QAAQ;IAC5C,OAAOK,kBAAkB,QAAQ;IACjC,MAAML,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IACrB,SAASA,mBAAAA,CAAAA,CAAAA,MAAQ;IACjB,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IACrB,SAAS4B,gBAAgB,QAAQ;AACnC;AACA,MAAMG,iBAAiB/B,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IACpC,OAAOA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAa;QAAc;QAAS;QAAa;KAAW;IAC3E,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW;IACvC,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IACrB,OAAO4B;IACP,MAAM5B,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACnB,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ;QAClD,iBAAiBA,mBAAAA,CAAAA,CAAAA,OAAS;IAC5B;IACA,qBAAqBA,mBAAAA,CAAAA,CAAAA,OAAS;IAC9B,4BAA4BA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ;IACtE,YAAYW,iBAAiB,QAAQ;IACrC,QAAQX,mBAAAA,CAAAA,CAAAA,YACO,CAAC;QACZ,SAASA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;QAC5B,MAAM4B,gBAAgB,QAAQ;IAChC,GACC,QAAQ;IACX,OAAOE,YAAY,QAAQ;IAC3B,QAAQ9B,mBAAAA,CAAAA,CAAAA,YACO,CAAC;QACZ,QAAQA,mBAAAA,CAAAA,CAAAA,KAAO,CACbA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;YACb,MAAMA,mBAAAA,CAAAA,CAAAA,OAAS,CAAC;YAChB,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;YAC5B,SAASU,cAAc,QAAQ;QACjC;QAEF,kBAAkBV,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;IACjD,GACC,QAAQ;AACb;AACA,MAAME,aAAahC,mBAAAA,CAAAA,CAAAA,kBAAoB,CAAC,UAAU;IAChD+B,eAAe,MAAM,CAAC;QACpB,QAAQ/B,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;SAAS;QACpC,WAAW6B;QACX,SAASA;QACT,YAAY7B,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,WAAW,GAAG,MAAM;IAC7C;IACA+B,eAAe,MAAM,CAAC;QACpB,QAAQ/B,mBAAAA,CAAAA,CAAAA,OAAS,CAAC;QAClB,cAAcA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC7B,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,QAAQ;IAChC;CACD;AACD,MAAMiC,sBAAsBD,WAAW,WAAW,CAAC,CAACE,MAAMP;IACxD,IAAIO,AAAgB,cAAhBA,KAAK,MAAM,IAAmBA,CAAAA,KAAK,KAAK,IAAIA,KAAK,mBAAkB,GACrEP,QAAQ,QAAQ,CAAC;QACf,MAAM;QACN,SAAS;IACX;IAEF,IAAIO,KAAK,mBAAmB,IAAI,CAACA,KAAK,IAAI,CAAC,eAAe,EACxDP,QAAQ,QAAQ,CAAC;QACf,MAAM;QACN,SAAS;IACX;AAEJ;AACA,MAAMQ,gBAAgBnC,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IACnC,GAAGY,mBAAmB;IACtB,QAAQZ,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IACvB,OAAOA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IACtB,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IAC5B,cAAcA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW;IAC1C,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ;IACd,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;IAC3B,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW;IACvC,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;QAAC;QAAW;KAAS;IACpC,YAAYA,mBAAAA,CAAAA,CAAAA,KAAO,CAACiC;IACpB,OAAOjC,mBAAAA,CAAAA,CAAAA,KAAO,CAACiC;IACf,WAAWjC,mBAAAA,CAAAA,CAAAA,KAAO,CAACiC;IACnB,iBAAiBjC,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;IAC9C,gBAAgB9B,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;IAC7C,YAAY9B,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC,IAAI,QAAQ;IAC/C,WAAW6B;IACX,SAASA;IACT,YAAY7B,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,WAAW,GAAG,MAAM;AAC7C;AACA,MAAMoC,qBAAqBpC,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;IAChC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AACD,MAAMqC,eAAerC,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;IAClC,MAAMA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACnB,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC3B,QAAQA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QACvB,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC5B,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ;QACd,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC3B,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW;QACvC,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;YAAU;SAAU;QAC/C,KAAKmC,cAAc,QAAQ;QAC3B,UAAUnC,mBAAAA,CAAAA,CAAAA,KAAO,CAACmC,eAAe,QAAQ;QACzC,cAAcC,mBAAmB,QAAQ;IAC3C;IACA,UAAUpC,mBAAAA,CAAAA,CAAAA,YACK,CAAC;QACZ,GAAGY,mBAAmB;QACtB,MAAME,mBAAmB,QAAQ;QACjC,cAAcd,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,GAAG,WAAW,GAAG,QAAQ;QACrD,YAAYA,mBAAAA,CAAAA,CAAAA,KACJ,CACJA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;YACb,OAAOA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;gBACZ;gBACA;gBACA;gBACA;gBACA;gBACA;aACD;YACD,OAAOK;QACT,IAED,QAAQ;QACX,YAAYL,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC3B,eAAeA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC9B,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC1B,aAAaA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC5B,YAAYA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC3B,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;SAAS;QACpC,WAAW6B;QACX,SAASA;QACT,YAAY7B,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,WAAW,GAAG,MAAM;QAC3C,WAAWA,mBAAAA,CAAAA,CAAAA,KAAO,CAACiC;QACnB,UAAUjC,mBAAAA,CAAAA,CAAAA,KAAO,CAACiC;QAClB,iBAAiBjC,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;QAC9C,gBAAgB9B,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;QAC7C,YAAY9B,mBAAAA,CAAAA,CAAAA,KAAO,CAACA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC,IAAI,QAAQ;IACjD,GACC,QAAQ;IACX,WAAWA,mBAAAA,CAAAA,CAAAA,YACI,CAAC;QACZ,SAASO,cAAc,QAAQ;QAC/B,mBAAmBC,wBAAwB,QAAQ;QACnD,aAAaR,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QAC5B,QAAQA,mBAAAA,CAAAA,CAAAA,OAAM,CAAC;YAAC;YAAW;SAAS;QACpC,YAAY8B,YAAY,QAAQ;QAChC,gBAAgB9B,mBAAAA,CAAAA,CAAAA,KAAO,CAAC8B,aAAa,QAAQ;QAC7C,WAAWD;QACX,SAASA;QACT,YAAY7B,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,WAAW,GAAG,MAAM;IAC7C,GACC,QAAQ;IACX,WAAWA,mBAAAA,CAAAA,CAAAA,KACH,CACJA,mBAAAA,CAAAA,CAAAA,YAAc,CAAC;QACb,MAAMA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QACrB,KAAKA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC;QACpB,WAAWA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,GAAG,CAAC,GAAG,QAAQ;IACvC,IAED,QAAQ;IACX,UAAUA,mBAAAA,CAAAA,CAAAA,MACD,CACLA,mBAAAA,CAAAA,CAAAA,MAAQ,IACRA,mBAAAA,CAAAA,CAAAA,KAAO,CAAC;QAACA,mBAAAA,CAAAA,CAAAA,MAAQ;QAAIA,mBAAAA,CAAAA,CAAAA,MAAQ,GAAG,MAAM;QAAIA,mBAAAA,CAAAA,CAAAA,OAAS;QAAIA,mBAAAA,CAAAA,CAAAA,OAAM;KAAG,GAEjE,QAAQ;AACb;AAEA,MAAMsC,qBAAqB,CACzBC,MACAC,UAEAA,QAAQ,MAAM,KAAKD,KAAK,MAAM,IAC9BC,QAAQ,WAAW,KAAKD,KAAK,WAAW,IACxCC,QAAQ,IAAI,KAAKD,KAAK,QAAQ,IAC9BC,QAAQ,UAAU,KAAKD,KAAK,UAAU,IACtCC,QAAQ,SAAS,KAAKD,KAAK,SAAS,IACpC1C,wBAAwB2C,QAAQ,KAAK;AAEvC,MAAMC,oBAAoB,CAACC,SAKxBA,AAA2BC,WAA3BD,OAAO,eAAe,IACrBA,AAA2B,cAA3BA,OAAO,eAAe,IACvBA,AAAmBC,WAAnBD,OAAO,OAAO,IACb,CAAC;QAAC;QAAa;KAAe,CAAC,QAAQ,CAACA,OAAO,OAAO,CAAC,MAAM,KAC9DA,AAAAA,CAAAA,OAAO,iBAAiB,EAAE,UAAU,KAAK;AAGrC,SAASE,4BACdL,IAAkB,EAClBzC,KAAc;IAEd,MAAM+C,SAASR,aAAa,SAAS,CAACvC;IACtC,IAAI,CAAC+C,OAAO,OAAO,EACjB,MAAM,IAAIC,UACR,CAAC,6CAA6C,EAAEP,KAAK,MAAM,CAAC,EAAE,EAAEvC,mBAAAA,CAAAA,CAAAA,aAAe,CAAC6C,OAAO,KAAK,GAAG;IAGnG,MAAME,UAAUF,OAAO,IAAI,CAAC,IAAI;IAChC,IACEE,QAAQ,MAAM,KAAKR,KAAK,MAAM,IAC9BQ,QAAQ,UAAU,KAAKR,KAAK,UAAU,IACtCQ,QAAQ,WAAW,KAAKR,KAAK,WAAW,IACxCQ,QAAQ,IAAI,KAAKR,KAAK,QAAQ,IAC9BQ,QAAQ,UAAU,KAAKR,KAAK,UAAU,IACtCQ,QAAQ,SAAS,KAAKR,KAAK,SAAS,EAEpC,MAAM,IAAIrB,MACR,CAAC,oDAAoD,EAAEqB,KAAK,MAAM,CAAC,CAAC,CAAC;IAGzE,MAAMS,WAAWD,QAAQ,QAAQ,IAAI,EAAE;IACvC,KAAK,MAAMP,WAAWQ,SAAU;QAC9B,MAAMC,QAAQ;eACTT,QAAQ,UAAU;eAClBA,QAAQ,KAAK;eACbA,QAAQ,SAAS;SACrB;QACD,IACEA,AAAmB,cAAnBA,QAAQ,MAAM,IACbA,CAAAA,AAAyB,MAAzBA,QAAQ,KAAK,CAAC,MAAM,IAClBA,AAAAA,CAAAA,QAAQ,eAAe,EAAE,UAAU,KAAK,KACzCS,MAAM,IAAI,CAAC,CAACf,OAASA,AAAgB,cAAhBA,KAAK,MAAM,KAChCO,kBAAkBD,YACjBA,AAAAA,CAAAA,QAAQ,cAAc,EAAE,UAAU,KAAK,IAE1C,MAAM,IAAIM,UACR,CAAC,yDAAyD,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAGhF;IACA,IACE,IAAIW,IAAIF,SAAS,GAAG,CAAC,CAACR,UAAYA,QAAQ,KAAK,GAAG,IAAI,KAAKQ,SAAS,MAAM,EAE1E,MAAM,IAAIF,UACR,CAAC,4CAA4C,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAGjE,IAAIS,SAAS,IAAI,CAAC,CAACR,UAAY,CAACF,mBAAmBC,MAAMC,WACvD,MAAM,IAAIM,UACR,CAAC,uCAAuC,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAG5D,IACES,SAAS,IAAI,CAAC,CAACR,SAASW,QAAUX,QAAQ,YAAY,KAAKW,UAC3DH,SAAS,MAAM,GAAGT,KAAK,KAAK,GAAG,GAE/B,MAAM,IAAIO,UACR,CAAC,uDAAuD,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAG5E,MAAMa,eAAeJ,SAAS,EAAE,CAAC;IACjC,IAAID,AAAmB,cAAnBA,QAAQ,MAAM,EAChB;QAAA,IAAIA,QAAQ,GAAG,IAAIC,SAAS,MAAM,IAAI,CAACD,QAAQ,YAAY,EACzD,MAAM,IAAID,UACR,CAAC,qDAAqD,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAE1E,OACK,IACLQ,AAAyBJ,WAAzBI,QAAQ,YAAY,IACpB,CAACA,QAAQ,GAAG,IACZ,CAACK,gBACDA,aAAa,MAAM,KAAKL,QAAQ,MAAM,IACtCA,QAAQ,GAAG,CAAC,KAAK,KAAKK,aAAa,KAAK,IACxCC,KAAK,SAAS,CAACN,QAAQ,GAAG,MAAMM,KAAK,SAAS,CAACD,iBAC/CJ,SAAS,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAACR,UAAYA,AAAmB,aAAnBA,QAAQ,MAAM,GAEtD,MAAM,IAAIM,UACR,CAAC,kCAAkC,EAAEC,QAAQ,MAAM,CAAC,YAAY,EAAER,KAAK,MAAM,CAAC,CAAC,CAAC;IAGpF,MAAMe,aAAa;WACdN,SAAS,OAAO,CAAC,CAACR,UAAYA,QAAQ,UAAU,IAAI,EAAE;WACrDK,OAAO,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE;KAC3C;IACD,IAAIS,WAAW,IAAI,CAAC,CAACC,YAAc,CAAC1D,wBAAwB0D,aAC1D,MAAM,IAAIT,UACR,CAAC,kDAAkD,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAGvE,MAAMiB,WAAWX,OAAO,IAAI,CAAC,QAAQ;IACrC,IACEW,UAAU,WAAW,aACpBf,CAAAA,kBAAkBe,aAChBA,AAAAA,CAAAA,SAAS,UAAU,EAAE,UAAU,KAAK,KACpCA,AAAAA,CAAAA,SAAS,eAAe,EAAE,UAAU,KAAK,KAC1C;WAAIA,SAAS,SAAS;WAAKA,SAAS,QAAQ;KAAC,CAAC,IAAI,CAChD,CAACtB,OAASA,AAAgB,cAAhBA,KAAK,MAAM,KAEtBsB,AAAAA,CAAAA,SAAS,cAAc,EAAE,UAAU,KAAK,IAE3C,MAAM,IAAIV,UACR,CAAC,0DAA0D,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAG/E,MAAMkB,YAAYZ,OAAO,IAAI,CAAC,SAAS;IACvC,IACEY,WAAW,WAAW,aACrBhB,CAAAA,kBAAkBgB,cACjBA,UAAU,UAAU,IACnBA,AAAAA,CAAAA,UAAU,cAAc,EAAE,UAAU,KAAK,IAE5C,MAAM,IAAIX,UACR,CAAC,2DAA2D,EAAEP,KAAK,MAAM,CAAC,CAAC,CAAC;IAGhF,IACEiB,YACCA,CAAAA,SAAS,UAAU,KAAKjB,KAAK,UAAU,IACtCiB,SAAS,SAAS,KAAKjB,KAAK,SAAS,IACrCiB,SAAS,WAAW,KAAKjB,KAAK,WAAW,IACzCiB,SAAS,UAAU,KAAKjB,KAAK,UAAU,IACvC,CAAC1C,wBAAwB2D,SAAS,aAAa,IAEjD,MAAM,IAAItC,MACR,CAAC,sDAAsD,EAAEqB,KAAK,MAAM,CAAC,CAAC,CAAC;IAG3E,IACEM,OAAO,IAAI,CAAC,SAAS,IACrBA,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,KAAKN,KAAK,WAAW,EAEtD,MAAM,IAAIrB,MACR,CAAC,uDAAuD,EAAEqB,KAAK,MAAM,CAAC,CAAC,CAAC;AAG9E;;;;;;AC3mBO,MAAMmB,yBAAyB,CACpCC,WACAC,YACAC,WACAC,kBAAkB,CAAC,GAEnBC,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA,EAAW,UACR,MAAM,CACLV,KAAK,SAAS,CAAC;QACbM;QACAC;QACAC;WACIC,kBAAkB;YAACA;SAAgB,GAAG,EAAE;KAC7C,GAEF,MAAM,CAAC;AAEL,MAAME,6BAA6B,CACxCL,WACAC,YACAE,kBAAkB,CAAC,GAEnBC,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA,EAAW,UACR,MAAM,CACLV,KAAK,SAAS,CAAC;QACbM;QACAC;WACIE,kBAAkB;YAACA;SAAgB,GAAG,EAAE;KAC7C,GAEF,MAAM,CAAC;ACpBL,MAAMG,iBAGWC,4BAAAA,cAAkBA;;ACDnC,SAASC,oBAAoBC,MAAc;IAIhD,MAAMC,QAAsB,EAAE;IAC9B,MAAMC,QAAsB,EAAE;IAC9B,MAAMC,iBAAiB,IAAIrB;IAC3B,MAAMsB,kBAAkB,IAAItB;IAC5B,MAAMuB,gBAAgB,IAAIvB;IAE1B,MAAMwB,eAAeN,AAAyB,WAAzBA,OAAO,UAAU,CAAC,KAAgB,IAAI;IAC3D,MAAMvB,SAAS8B,AAAAA,IAAAA,iCAAAA,IAAAA,AAAAA,EAAKP,QAAQ;QAC1B,QAAQQ,iCAAAA,WAAWA;QACnB,UAASC,KAAK,EAAEC,KAAK;YACnB,IAAID,AAAU,WAAVA,OAAkB,YACpBR,MAAM,IAAI,CAAC;gBACT,OAAOS,MAAM,QAAQ,GAAGJ;gBACxB,KAAK;gBACL,OAAO;gBACP,UAAU,EAAE;YACd;YAGF,MAAMK,OAAOV,MAAM,GAAG;YACtBU,KAAK,GAAG,GAAGD,MAAM,QAAQ,GAAGJ;YAC5BK,KAAK,KAAK,GAAGD,MAAM,MAAM;YACzBT,MAAM,EAAE,CAAC,KAAK,SAAS,KAAKU;YAC5BT,MAAM,IAAI,CAACS;YACX,IAAID,AAAe,cAAfA,MAAM,IAAI,EAAgB;YAC9B,IAAK,IAAI3B,QAAQ,GAAGA,QAAQ4B,KAAK,QAAQ,CAAC,MAAM,EAAE5B,SAAS,EAAG;gBAC5D,MAAM3D,MAAMuF,KAAK,QAAQ,CAAC5B,MAAM,CAAC,KAAK;gBACtC,MAAMrD,QAAQiF,KAAK,QAAQ,CAAC5B,QAAQ,EAAE;gBACtC,IAAI,AAAe,YAAf,OAAO3D,OAAqBwF,AAAAA,IAAAA,4BAAAA,iBAAAA,AAAAA,EAAkBxF,QAASM;oBAE3DyE,eAAe,GAAG,CAACzE;oBACnB,IAAIA,AAAgB,SAAhBA,MAAM,KAAK,EAAW0E,gBAAgB,GAAG,CAAC1E,MAAM,KAAK;oBACzD2E,cAAc,GAAG,CAAC,CAAC,IAAI,EAAEpB,KAAK,SAAS,CAAC7D,KAAK,CAAC,CAAC;;YACjD;QACF;IACF;IAEA,MAAMyF,SAASX,MACZ,MAAM,CACL,CAACS,OAASR,eAAe,GAAG,CAACQ,SAASP,gBAAgB,GAAG,CAACO,KAAK,KAAK,GAErE,IAAI,CAAC,CAACG,MAAMC,QAAUD,KAAK,KAAK,GAAGC,MAAM,KAAK,IAAIA,MAAM,GAAG,GAAGD,KAAK,GAAG;IACzE,IAAIE,SAAS;IACb,IAAIC,WAAW;IACf,KAAK,MAAMC,SAASL,OAAQ;QAC1B,IAAIK,MAAM,KAAK,GAAGF,QAAQ;QAC1B,MAAMG,OAAOnB,OAAO,KAAK,CAACkB,MAAM,KAAK,EAAEA,MAAM,GAAG;QAChD,MAAME,UAAUD,KAAK,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI;QAC3C,MAAME,WAAWF,KAAK,KAAK,CAACC,QAAQ,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,IAAI;QAClEH,YAAY,GAAGjB,OAAO,KAAK,CAACgB,QAAQE,MAAM,KAAK,IAAIE,QAAQ,YAAY,EAAEC,UAAU;QACnFL,SAASE,MAAM,GAAG;IACpB;IACAD,YAAYjB,OAAO,KAAK,CAACgB;IACzB,MAAMtF,QAAQ4F,AAAAA,IAAAA,4BAAAA,kBAAAA,AAAAA,EAAmBL,UAAU;IAC3C,OAAO;QACLxC;QACA,YAAY;YACV/C;YACA,GAAI2E,cAAc,IAAI,GAAG;gBAAE,eAAe;uBAAIA;iBAAc;YAAC,IAAI,CAAC,CAAC;YACnE,GAAI3E,UAAUuF,WAAW;gBAAE,gBAAgB;oBAAC;iBAAI;YAAC,IAAI,CAAC,CAAC;QACzD;IACF;AACF;AChEA,MAAMM,0BACJ;AACF,MAAMC,qBAAqB;AAC3B,MAAMC,yBAAyB;AAE/B,MAAMC,kBAAkB,CACtBC,MACAC,MACA5E;IAEA,MAAM,IAAI6E,4BAAAA,kBAAkBA,CAC1B,CAAC,UAAU,EAAEF,KAAK,WAAW,EAAEC,KAAK,KAAK,EAAE5E,QAAQ,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EACzE;QAAE,GAAGA,QAAQ,QAAQ;QAAE,UAAU4E;QAAM,cAAcD;IAAK;AAE9D;AAEA,MAAMG,kBAAkB,CACtBF,MACA5E;IAEA,IAAI,CAAC3B,OAAO,MAAM,CAAC2B,QAAQ,SAAS,IAAI,CAAC,GAAG4E,OAC1C,OAAOF,gBAAgB,WAAWE,MAAM5E;IAE1C,OAAOA,QAAQ,SAAU,CAAC4E,KAAK;AACjC;AAEA,MAAMG,sBAAsB,CAC1BH,MACA5E;IAEA,MAAMtB,QAAQsB,QAAQ,GAAG,EAAE,CAAC4E,KAAK;IACjC,IAAIlG,AAAU6C,WAAV7C,OAAqB,OAAOgG,gBAAgB,eAAeE,MAAM5E;IACrE,OAAOtB;AACT;AAEA,MAAMsG,qBAAqB,CACzBJ,MACAlG,OACAsB;IAEA,IAAI,AAAiB,YAAjB,OAAOtB,SAAsBA,AAAU,SAAVA,OAC/B,MAAM,IAAImG,4BAAAA,kBAAkBA,CAC1B,CAAC,kBAAkB,EAAED,KAAK,gDAAgD,CAAC,EAC3E;QACE,GAAG5E,QAAQ,QAAQ;QACnB,UAAU4E;QACV,cAAc;IAChB;IAGJ,OAAOK,OAAOvG;AAChB;AAEA,MAAMwG,gBAAgB,CACpBxG,OACAsB;IAEA,MAAMmF,WAAWX,mBAAmB,IAAI,CAAC9F;IACzC,IAAIyG,UAAU,OAAOJ,oBAAoBI,QAAQ,CAAC,EAAE,EAAEnF;IACtD,MAAMoF,eAAeX,uBAAuB,IAAI,CAAC/F;IACjD,IAAI0G,cAAc,OAAON,gBAAgBM,YAAY,CAAC,EAAE,EAAEpF;IAE1D,OAAOtB,MAAM,OAAO,CAClB6F,yBACA,CAACc,QAAQC,iBAAqCC,cAC5CD,kBACIP,oBAAoBO,iBAAiBtF,WACrCgF,mBACEO,aACAT,gBAAgBS,aAAavF,UAC7BA;AAGZ;AAEO,MAAMwF,2BAA2B,CACtC9G,OACAsB;IAEA,IAAI,AAAiB,YAAjB,OAAOtB,OAAoB,OAAOwG,cAAcxG,OAAOsB;IAC3D,IAAIyF,MAAM,OAAO,CAAC/G,QAChB,OAAOA,MAAM,GAAG,CAAC,CAACgH,QAAUF,yBAAyBE,OAAO1F;IAE9D,IAAI,AAAiB,YAAjB,OAAOtB,SAAsBA,AAAU,SAAVA,OAC/B,OAAOL,OAAO,WAAW,CACvBA,OAAO,OAAO,CAACK,OAAO,GAAG,CAAC,CAAC,CAACN,KAAKsH,MAAM,GAAK;YAC1CtH;YACAoH,yBAAyBE,OAAO1F;SACjC;IAGL,OAAOtB;AACT;;;;;;;;;;;ACnFA,MAAMiH,YAAY,CAACjH,QACjB,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,SAAkB,CAAC+G,MAAM,OAAO,CAAC/G;AAEzD,MAAMkH,kCAAkCf,4BAAAA,kBAAkBA;IAG/D,YACEgB,YAAiD,EACjDrD,UAAkB,CAClB;QACA,KAAK,CACHqD,AAAiB,aAAjBA,eACI,CAAC,0DAA0D,EAAErD,WAAW,yBAAyB,EAAEA,WAAW,uCAAuC,CAAC,GACtJqD,AAAiB,mBAAjBA,eACE,CAAC,0EAA0E,EAAErD,WAAW,kCAAkC,EAAEA,WAAW,6CAA6C,CAAC,GACrL,CAAC,yFAAyF,EAAEA,WAAW,iFAAiF,CAAC,EAC/L;YAAEA;YAAYqD;YAAc,gBAAgB;QAAS,IAZzD,8BAAS,gBAAT;QAcE,IAAI,CAAC,YAAY,GAAGA;IACtB;AACF;AAEA,MAAMC,oBAAoB,CACxBpH,OACAqH,SACAC;IAEA,MAAMC,aAAa,IAAInE,IAAIiE;IAC3B,MAAMG,UAAU7H,OAAO,IAAI,CAACK,OAAO,MAAM,CAAC,CAACN,MAAQ,CAAC6H,WAAW,GAAG,CAAC7H;IACnE,IAAI8H,QAAQ,MAAM,EAChB,MAAM,IAAIrB,4BAAAA,kBAAkBA,CAC1B,GAAGmB,MAAM,wBAAwB,EAAEE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EACjD;QAAE,OAAOA,OAAO,CAAC,EAAE;IAAC;AAG1B;AAEO,MAAMC,eAAe,CAC1B5D,WACAC,YACAC,YACWH,uBAAuBC,WAAWC,YAAYC;AAEpD,MAAM2D,2BAA2B,CACtC7D,WACAC,aACWI,2BAA2BL,WAAWC;AAE5C,SAAS6D,wBACdrD,MAA8B,EAC9BhD,OAAuC;IAEvC,IAAIsG;IACJ,IAAI;QACFA,WAAWvD,oBAAoBwD,AAAAA,IAAAA,iCAAAA,YAAAA,AAAAA,EAAavD,OAAO,YAAY,EAAE;IACnE,EAAE,OAAOwD,OAAO;QACd,MAAM,IAAI3B,4BAAAA,kBAAkBA,CAC1B,CAAC,mCAAmC,EAAE7B,OAAO,UAAU,CAAC,EAAE,CAAC,EAC3D;YAAE,YAAYA,OAAO,UAAU;QAAC,GAChCwD;IAEJ;IACA,MAAM,EAAE/E,MAAM,EAAEgF,UAAU,EAAE,GAAGH;IAE/B,IAAI,CAACX,UAAUlE,SACb,MAAM,IAAIoD,4BAAAA,kBAAkBA,CAAC;IAE/B,MAAM6B,SAASC,AAAAA,IAAAA,4BAAAA,8BAAAA,AAAAA,EAA+BlF;IAC9C,IAAIiF,AAAW,aAAXA,UAAuBA,AAAW,mBAAXA,UAA6BA,AAAW,YAAXA,QACtD,MAAM,IAAId,0BAA0Bc,QAAQ1D,OAAO,UAAU;IAE/D8C,kBACErE,QACA;QAAC;QAAa;QAAc;QAAS;QAAa;KAAW,EAC7D;IAEF,IAAI,CAACgE,MAAM,OAAO,CAAChE,OAAO,KAAK,KAAKA,AAAwB,MAAxBA,OAAO,KAAK,CAAC,MAAM,EACrD,MAAM,IAAIoD,4BAAAA,kBAAkBA,CAC1B;IAIJ,MAAMrC,aAAaQ,OAAO,UAAU,CAAC,KAAK,CAAC4D,mCAAAA,GAAGA,EAAE,IAAI,CAAC;IACrD,MAAMC,uBAAuB,CAC3B/F,MACAgG,OACAC,WACAtE,YACI;YACJ,GAAG3B,IAAI;YACP,eAAeA,KAAK,KAAK;YACzB,OAAO0E,yBAAyB1E,KAAK,KAAK,EAAE;gBAC1C,WAAWd,QAAQ,SAAS;gBAC5B,KAAKA,QAAQ,GAAG,IAAIgH,QAAQ,GAAG;gBAC/B,UAAU;oBACR,aAAahE,OAAO,WAAW,IAAIA,OAAO,SAAS;oBACnDR;oBACAsE;oBACAC;oBACA,GAAItE,AAAclB,WAAdkB,YAA0B,CAAC,IAAI;wBAAEA;oBAAU,CAAC;gBAClD;YACF;QACF;IACA,MAAMwE,qBAAqB,CACzBH;QAEA,MAAMpI,QAAQ+C,MAAM,CAACqF,MAAM;QAC3B,IAAIpI,AAAU6C,WAAV7C,OAAqB,OAAO,EAAE;QAClC,IAAI,CAAC+G,MAAM,OAAO,CAAC/G,QACjB,MAAM,IAAImG,4BAAAA,kBAAkBA,CAC1B,CAAC,kBAAkB,EAAEiC,MAAM,kBAAkB,CAAC,EAC9C;YAAEA;QAAM;QAGZ,OAAOjE,eAAenE,OAAOsB,QAAQ,WAAW,EAAE,GAAG,CACnD,CAACkH,YAAYH;YACX,MAAMI,WAAWnH,QAAQ,WAAW,CAACkH,WAAW,IAAI;YACpD,IAAI,CAACC,UACH,MAAM,IAAItC,4BAAAA,kBAAkBA,CAC1B,CAAC,kBAAkB,EAAEiC,MAAM,MAAM,EAAEC,YAAY,EAAE,0BAA0B,EAAEG,WAAW,IAAI,CAAC,EAAE,CAAC,EAChG;gBAAEJ;gBAAOC;gBAAW,MAAMG,WAAW,IAAI;YAAC;YAG9C,OAAOL,qBAAqBK,YAAYJ,OAAOC;QACjD;IAEJ;IACA,MAAM1E,YAAY;QAChB,WAAW4E,mBAAmB;QAC9B,YAAYA,mBAAmB;QAC/B,WAAWA,mBAAmB;QAC9B,UAAUA,mBAAmB;IAC/B;IACA,MAAMG,MAAM,IAAItF;IAChB,MAAMuF,QAAyB5F,OAAO,KAAK,CAAC,GAAG,CAAC,CAACtD,YAAYsE;QAC3D,IAAI,CAACkD,UAAUxH,aACb,MAAM,IAAI0G,4BAAAA,kBAAkBA,CAAC,CAAC,KAAK,EAAEpC,YAAY,EAAE,mBAAmB,CAAC,EAAE;YACvEA;QACF;QAEFqD,kBACE3H,YACA;YAAC;YAAM;YAAQ;YAAQ;YAAa;SAAQ,EAC5C,CAAC,KAAK,EAAEsE,YAAY,GAAG;QAEzB,IACEtE,AAAkBoD,WAAlBpD,WAAW,EAAE,IACb,CAACM,wBAAwBN,WAAW,EAAE,GAEtC,MAAM,IAAI0G,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,2IAA2I,CAAC,EAClK;YAAEA;QAAU;QAGhB,IACE,AAA2B,YAA3B,OAAOtE,WAAW,IAAI,IACtBA,AAAkC,MAAlCA,WAAW,IAAI,CAAC,IAAI,GAAG,MAAM,EAE7B,MAAM,IAAI0G,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,iCAAiC,CAAC,EACxD;YAAEA;QAAU;QAGhB,IAAI,CAACgD,MAAM,OAAO,CAACtH,WAAW,KAAK,KAAKA,AAA4B,MAA5BA,WAAW,KAAK,CAAC,MAAM,EAC7D,MAAM,IAAI0G,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,iCAAiC,CAAC,EACxD;YAAEA;QAAU;QAGhB,MAAM6E,OAAOnJ,WAAW,IAAI,IAAI,EAAE;QAClC,IACE,CAACsH,MAAM,OAAO,CAAC6B,SACfA,KAAK,IAAI,CAAC,CAACC,MAAQ,AAAe,YAAf,OAAOA,OAAoBA,AAAsB,MAAtBA,IAAI,IAAI,GAAG,MAAM,GAE/D,MAAM,IAAI1C,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,4CAA4C,CAAC,EACnE;YAAEA;QAAU;QAGhB,MAAM+E,YAAYrJ,WAAW,SAAS,IAAI,EAAE;QAC5C,IACE,CAACsH,MAAM,OAAO,CAAC+B,cACfA,UAAU,IAAI,CACZ,CAACC,WACC,AAAoB,YAApB,OAAOA,YAAyBA,AAA2B,MAA3BA,SAAS,IAAI,GAAG,MAAM,GAG1D,MAAM,IAAI5C,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,iDAAiD,CAAC,EACxE;YAAEA;QAAU;QAGhB,IAAI,IAAIX,IAAI0F,WAAW,IAAI,KAAKA,UAAU,MAAM,EAC9C,MAAM,IAAI3C,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,uCAAuC,CAAC,EAC9D;YAAEA;QAAU;QAIhB,MAAMZ,QAAQgB,eAAe1E,WAAW,KAAK,EAAE6B,QAAQ,WAAW,EAAE,GAAG,CACrE,CAACkH,YAAYH;YACX,IAAI,CAAC/G,QAAQ,WAAW,CAACkH,WAAW,IAAI,GACtC,MAAM,IAAIrC,4BAAAA,kBAAkBA,CAC1B,CAAC,KAAK,EAAEpC,YAAY,EAAE,MAAM,EAAEsE,YAAY,EAAE,0BAA0B,EAAEG,WAAW,IAAI,CAAC,EAAE,CAAC,EAC3F;gBAAEzE;gBAAWsE;gBAAW,MAAMG,WAAW,IAAI;YAAC;YAGlD,OAAOL,qBAAqBK,YAAY,SAASH,WAAWtE;QAC9D;QAEF,MAAMiF,SACJ,AAAyB,YAAzB,OAAOvJ,WAAW,EAAE,GAChBA,WAAW,EAAE,GACbgI,aAAanD,OAAO,SAAS,EAAER,YAAYC;QACjD,IAAI2E,IAAI,GAAG,CAACM,SACV,MAAM,IAAI7C,4BAAAA,kBAAkBA,CAAC,CAAC,mBAAmB,EAAE6C,OAAO,CAAC,CAAC,EAAE;YAC5DA;QACF;QAEFN,IAAI,GAAG,CAACM;QAER,OAAO;YACLA;YACA,WAAW1E,OAAO,SAAS;YAC3BR;YACAC;YACA,YAAY;gBACV,GAAI,AAAyB,YAAzB,OAAOtE,WAAW,EAAE,GAAgB;oBAAE,IAAIA,WAAW,EAAE;gBAAC,IAAI,CAAC,CAAC;gBAClE,MAAMA,WAAW,IAAI;gBACrB,MAAMmJ;gBACN,GAAIE,UAAU,MAAM,GAAG,IAAI;oBAAE,WAAWA;gBAAsB,IAAI,CAAC,CAAC;gBACpE3F;YACF;QACF;IACF;IAEA,OAAO;QACL,YAAYuE,yBAAyBpD,OAAO,SAAS,EAAER;QACvD,WAAWQ,OAAO,SAAS;QAC3BR;QACAiE;QACApE;QACAgF;IACF;AACF;;ACnQA,MAAMM,YAAY,OAAOC,MAAclJ;IACrC,IAAI;QACF,MAAMmJ,AAAAA,IAAAA,yBAAAA,KAAAA,AAAAA,EAAMC,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQF,OAAO;YAAE,WAAW;QAAK;QAC7C,MAAMG,AAAAA,IAAAA,yBAAAA,SAAAA,AAAAA,EAAUH,MAAM3F,KAAK,SAAS,CAACvD,OAAO,MAAM;IACpD,EAAE,OAAO8H,OAAO;QACd,MAAM,IAAIwB,4BAAAA,wBAAwBA,CAAC,gBAAgBJ,MAAMpB;IAC3D;AACF;AAEO,MAAMyB,mBAAmB,CAC9BC,QACAC,WAEAR,UAAUS,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKF,QAAQ,cAAc;QACnC,eAAe;QACf,WAAW,IAAInJ,OAAO,WAAW;QACjC,UAAUoJ,SAAS,GAAG,CAAC,CAACE,OAAU;gBAChC,WAAWA,KAAK,OAAO,CAAC,SAAS;gBACjC,MAAMA,KAAK,OAAO,CAAC,IAAI;gBACvB,WAAWA,KAAK,KAAK,IAAI,EAAE;YAC7B;IACF;AAEF,MAAMC,UAAU,CAAC5J,QAA0BA,MAAM,KAAK,CAACkI,mCAAAA,GAAGA,EAAE,IAAI,CAAC;AAE1D,MAAM2B,wBAAwB,CACnChG,WACAiG,YACAlH,SAEAgH,QACEF,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EACE7F,WACA,aACAiG,YACA,SACAlH,OAAO,MAAM,EACb,GAAGA,OAAO,KAAK,CAAC,KAAK,CAAC;AAIrB,MAAMmH,6BAA6B,CACxCnH,SAEAgH,QACEF,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EACE9G,OAAO,SAAS,EAChB,aACAA,OAAO,UAAU,EACjBA,AAAwBC,WAAxBD,OAAO,YAAY,GACf,kBACA,GAAGA,OAAO,aAAa,CAAC,KAAK,CAAC;AAIjC,MAAMoH,sBAAsB,CACjCnG,WACAC;IAEA,MAAMmG,KAAKhG,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA,EAAW,UACnB,MAAM,CAACV,KAAK,SAAS,CAAC;QAACM;QAAWC;KAAW,GAC7C,MAAM,CAAC;IACV,OAAO8F,QAAQF,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAK7F,WAAW,qBAAqB,GAAGoG,GAAG,KAAK,CAAC;AAClE;AAEO,MAAMC,8BAA8B,CACzCV,QACA5G;IAEA,MAAM,EAAE,eAAeuH,cAAc,EAAE,GAAGC,iBAAiB,GAAGxH;IAC9D,OAAOqG,UACLS,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKF,QAAQO,2BAA2BnH,UACxCwH;AAEJ;AAEO,MAAMC,yBAAyB,CACpCb,QACA3F,WACAiG,YACAlH;IAEA,MAAM,EAAE,OAAO0H,SAAS,EAAE,GAAGF,iBAAiB,GAAGxH;IACjD,OAAOqG,UACLS,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKF,QAAQK,sBAAsBhG,WAAWiG,YAAYlH,UAC1D;QACE,GAAGwH,eAAe;QAClBE;IACF;AAEJ;AAEO,MAAMC,uBAAuB,CAClCf,QACAgB,kBAEOvB,UACLS,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EACEF,QACAQ,oBACEQ,gBAAgB,SAAS,EACzBA,gBAAgB,UAAU,IAG9B;QAAE,MAAM;QAAoB,GAAGA,eAAe;IAAC;AAInD,MAAMC,oBAAoB,CAACC,aAAqBC;IAC9C,MAAM3K,QAAQ4K,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASxB,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQsB,cAAcC;IAC7C,OAAOf,QAAQ5J,SAAS;AAC1B;AAEA,MAAM6K,YAAYC,4BAAAA,mBAAmBA;AAQ9B,MAAMC,4BAA4B,CACvCzJ;IAEA,MAAM,EAAEsB,MAAM,EAAE,GAAGtB;IACnB,MAAM0J,OAAO,CAAC9B,OAAiBU,QAAQV;IAEvC,OAAOD,UAAUrG,OAAO,WAAW,EAAE;QACnC,eAAeA,OAAO,aAAa;QACnC,OAAOA,OAAO,KAAK;QACnB,WAAWA,OAAO,SAAS;QAC3B,SAASA,OAAO,OAAO;QACvB,YAAYA,OAAO,UAAU;QAC7B,QAAQA,OAAO,MAAM;QACrB,UAAUA,OAAO,QAAQ;QACzB,GAAIA,OAAO,MAAM,EAAE,SAAS;YAAE,QAAQA,OAAO,MAAM,CAAC,GAAG,CAACiI;QAAW,IAAI,CAAC,CAAC;QACzE,aAAavJ,QAAQ,WAAW;QAChC,GAAIA,QAAQ,UAAU,GAAG;YAAE,YAAYA,QAAQ,UAAU;QAAC,IAAI,CAAC,CAAC;QAChE,WAAW;QACX,MAAM;QACN,GAAIsB,OAAO,YAAY,GACnB;YACE,cAAc;gBACZ,GAAGA,OAAO,YAAY;gBACtB,MAAM6H,kBACJ7H,OAAO,WAAW,EAClBA,OAAO,YAAY,CAAC,IAAI;YAE5B;QACF,IACA,CAAC,CAAC;QACN,WAAW6H,kBAAkB7H,OAAO,WAAW,EAAEA,OAAO,SAAS;QACjE,GAAIA,OAAO,UAAU,GACjB;YAAE,QAAQ6H,kBAAkB7H,OAAO,WAAW,EAAEA,OAAO,UAAU;QAAE,IACnE,CAAC,CAAC;QACN,GAAIA,OAAO,YAAY,GACnB;YAAE,UAAU6H,kBAAkB7H,OAAO,WAAW,EAAEA,OAAO,YAAY;QAAE,IACvE,CAAC,CAAC;QACN,SAASA,OAAO,OAAO;QACvB,UAAUA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAACqI,UAAa;gBAC1C,WAAWA,QAAQ,SAAS;gBAC5B,MAAMA,QAAQ,IAAI;gBAClB,QAAQA,QAAQ,MAAM;gBACtB,OAAOA,QAAQ,KAAK;gBACpB,eAAeA,QAAQ,aAAa;gBACpC,cAAcA,QAAQ,YAAY;gBAClC,aAAaA,QAAQ,WAAW;gBAChC,mBAAmBA,QAAQ,iBAAiB;gBAC5C,mBAAmBA,QAAQ,iBAAiB;gBAC5C,GAAIA,QAAQ,SAAS,GACjB;oBACE,WAAW;wBACT,QAAQA,QAAQ,SAAS,CAAC,MAAM;wBAChC,WAAWA,QAAQ,SAAS,CAAC,SAAS;wBACtC,SAASA,QAAQ,SAAS,CAAC,OAAO;wBAClC,YAAYA,QAAQ,SAAS,CAAC,UAAU;wBACxC,GAAIA,QAAQ,SAAS,CAAC,OAAO,GACzB;4BAAE,SAASA,QAAQ,SAAS,CAAC,OAAO;wBAAC,IACrC,CAAC,CAAC;wBACN,GAAIA,QAAQ,SAAS,CAAC,iBAAiB,GACnC;4BAAE,mBAAmBA,QAAQ,SAAS,CAAC,iBAAiB;wBAAC,IACzD,CAAC,CAAC;wBACN,GAAIA,QAAQ,SAAS,CAAC,UAAU,GAC5B;4BAAE,YAAYJ,UAAUI,QAAQ,SAAS,CAAC,UAAU;wBAAE,IACtD,CAAC,CAAC;wBACN,GAAIA,QAAQ,SAAS,CAAC,cAAc,GAChC;4BACE,gBACEA,QAAQ,SAAS,CAAC,cAAc,CAAC,GAAG,CAACJ;wBACzC,IACA,CAAC,CAAC;oBACR;gBACF,IACA,CAAC,CAAC;gBACN,OAAOI,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAChI,UAAa;wBACrC,GAAIA,QAAQ,aAAa,GACrB;4BAAE,eAAeA,QAAQ,aAAa;wBAAC,IACvC,CAAC,CAAC;wBACN,YAAYA,QAAQ,UAAU;wBAC9B,QAAQA,QAAQ,MAAM;wBACtB,YAAYA,QAAQ,UAAU;wBAC9B,WAAWA,QAAQ,SAAS;wBAC5B,MAAMA,QAAQ,IAAI;wBAClB,QAAQA,QAAQ,MAAM;wBACtB,GAAIA,QAAQ,YAAY,GAAG;4BAAE,cAAcA,QAAQ,YAAY;wBAAC,IAAI,CAAC,CAAC;wBACtE,GAAIA,QAAQ,SAAS,GACjB;4BACE,WAAW;gCACT,UAAUA,QAAQ,SAAS,CAAC,QAAQ;gCACpC,WAAWA,QAAQ,SAAS,CAAC,SAAS;gCACtC,GAAIA,AAA+BJ,WAA/BI,QAAQ,SAAS,CAAC,QAAQ,GAC1B,CAAC,IACD;oCAAE,UAAUA,QAAQ,SAAS,CAAC,QAAQ;gCAAC,CAAC;gCAC5C,GAAIA,QAAQ,SAAS,CAAC,OAAO,GACzB;oCAAE,SAASA,QAAQ,SAAS,CAAC,OAAO;gCAAC,IACrC,CAAC,CAAC;gCACN,GAAIA,QAAQ,SAAS,CAAC,SAAS,GAC3B;oCAAE,WAAWA,QAAQ,SAAS,CAAC,SAAS;gCAAC,IACzC,CAAC,CAAC;gCACN,GAAIA,QAAQ,SAAS,CAAC,QAAQ,GAC1B;oCAAE,UAAUA,QAAQ,SAAS,CAAC,QAAQ;gCAAC,IACvC,CAAC,CAAC;gCACN,GAAIA,QAAQ,SAAS,CAAC,SAAS,GAC3B;oCACE,WAAW;wCACT,QAAQA,QAAQ,SAAS,CAAC,SAAS,CAAC,MAAM;wCAC1C,WAAWA,QAAQ,SAAS,CAAC,SAAS,CAAC,SAAS;wCAChD,SAASA,QAAQ,SAAS,CAAC,SAAS,CAAC,OAAO;wCAC5C,YAAYA,QAAQ,SAAS,CAAC,SAAS,CAAC,UAAU;wCAClD,GAAIA,QAAQ,SAAS,CAAC,SAAS,CAAC,UAAU,GACtC;4CACE,YAAY4H,UACV5H,QAAQ,SAAS,CAAC,SAAS,CAAC,UAAU;wCAE1C,IACA,CAAC,CAAC;wCACN,GAAIA,QAAQ,SAAS,CAAC,SAAS,CAAC,cAAc,GAC1C;4CACE,gBACEA,QAAQ,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAC5C4H;wCAEN,IACA,CAAC,CAAC;oCACR;gCACF,IACA,CAAC,CAAC;4BACR;wBACF,IACA,CAAC,CAAC;wBACN,GAAI5H,QAAQ,QAAQ,GAChB;4BACE,UAAUA,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAACP,UAAa;oCAC3C,WAAWA,QAAQ,KAAK;oCACxB,cAAcA,QAAQ,YAAY;oCAClC,QAAQA,QAAQ,MAAM;oCACtB,GAAIA,QAAQ,OAAO,GAAG;wCAAE,SAASA,QAAQ,OAAO;oCAAC,IAAI,CAAC,CAAC;oCACvD,GAAIA,QAAQ,iBAAiB,GACzB;wCAAE,mBAAmBA,QAAQ,iBAAiB;oCAAC,IAC/C,CAAC,CAAC;oCACN,GAAIA,QAAQ,eAAe,GACvB;wCAAE,iBAAiBA,QAAQ,eAAe;oCAAC,IAC3C,CAAC,CAAC;oCACN,GAAIA,QAAQ,aAAa,GACrB;wCAAE,eAAeA,QAAQ,aAAa;oCAAC,IACvC,CAAC,CAAC;oCACN,YAAYsI,KACVnB,sBACEoB,QAAQ,SAAS,EACjBhI,QAAQ,UAAU,EAClBP;oCAGJ,GAAIA,QAAQ,WAAW,EAAE,SACrB;wCACE,SAASA,QAAQ,WAAW,CAAC,GAAG,CAAC,CAACwG,OAChCuB,kBAAkB7H,OAAO,WAAW,EAAEsG;oCAE1C,IACA,CAAC,CAAC;gCACR;wBACF,IACA,CAAC,CAAC;oBACR;gBACA,WAAW+B,QAAQ,SAAS,CAAC,GAAG,CAAC,CAACvH,WAAc;wBAC9C,YAAYA,SAAS,UAAU;wBAC/B,GAAIA,AAA0Bb,WAA1Ba,SAAS,YAAY,GACrB,CAAC,IACD;4BACE,cAAcA,SAAS,YAAY;4BACnC,eAAeA,SAAS,aAAa;wBACvC,CAAC;wBACL,YAAYA,SAAS,UAAU;wBAC/B,QAAQA,SAAS,MAAM;wBACvB,GAAIA,SAAS,OAAO,GAAG;4BAAE,SAASA,SAAS,OAAO;wBAAC,IAAI,CAAC,CAAC;wBACzD,GAAIA,SAAS,iBAAiB,GAC1B;4BAAE,mBAAmBA,SAAS,iBAAiB;wBAAC,IAChD,CAAC,CAAC;wBACN,GAAIA,SAAS,eAAe,GACxB;4BAAE,iBAAiBA,SAAS,eAAe;wBAAC,IAC5C,CAAC,CAAC;wBACN,GAAIA,SAAS,aAAa,GACtB;4BAAE,eAAeA,SAAS,aAAa;wBAAC,IACxC,CAAC,CAAC;wBACN,YAAYsH,KAAKjB,2BAA2BrG;wBAC5C,GAAIA,SAAS,WAAW,EAAE,SACtB;4BACE,SAASA,SAAS,WAAW,CAAC,GAAG,CAAC,CAACwF,OACjCuB,kBAAkB7H,OAAO,WAAW,EAAEsG;wBAE1C,IACA,CAAC,CAAC;oBACR;gBACA,kBAAkB+B,QAAQ,gBAAgB,CAAC,GAAG,CAAC,CAACnD,QAAW;wBACzD,YAAYA,MAAM,UAAU;wBAC5B,WAAWkD,KAAKhB,oBAAoBlC,MAAM,SAAS,EAAEA,MAAM,UAAU;oBACvE;YACF;IACF;AACF;;;AC9TO,MAAMoD,eAETC,4BAAAA,YAAgBA;AC4CpB,MAAMC,qBAAqB,CAAC/H,QAA0B,CAAC,QAAQ,EAAEA,OAAO;AA2BjE,MAAMgI,oBAAoB,CAC/B5L,aACoCA;AAE/B,MAAM6L,qBAAqB,CAChC7L,aAC4CA;AAE9C,MAAM8L,mBAAmB,CAACC,QAAiBC;IACzC,IAAI,AAAkB,YAAlB,OAAOD,UAAuBA,AAAW,SAAXA,UAAmB,aAAaA,QAAQ;QACxE,MAAME,gBAAiBF,OAAgC,OAAO;QAC9D,IACE,AAAyB,YAAzB,OAAOE,iBACPA,AAAkB,SAAlBA,iBACA,gBAAgBA,eAChB;YACA,IAAI,aAAaA,eACf,OAAQA,cAAuC,OAAO;YAExD,MAAM,IAAI1I,UACR,CAAC,iBAAiB,EAAEyI,aAAa,6BAA6B,CAAC;QAEnE;QACA,OAAOC;IACT;IACA,MAAM,IAAI1I,UACR,CAAC,iBAAiB,EAAEyI,aAAa,6BAA6B,CAAC;AAEnE;AAEA,MAAME,WAAW,CAAC3L,QAChB,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,SAAkB,CAAC+G,MAAM,OAAO,CAAC/G;AAEhE,MAAMoH,iCAAoB,CACxBpH,OACA4L,aACAtE;IAEA,MAAMD,UAAU,IAAIjE,IAAIwI;IACxB,MAAMpE,UAAU7H,OAAO,IAAI,CAACK,OAAO,IAAI,CAAC,CAACN,MAAQ,CAAC2H,QAAQ,GAAG,CAAC3H;IAC9D,IAAI8H,SACF,MAAM,IAAIxE,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAEE,QAAQ,kBAAkB,CAAC;AAG7D;AAEA,MAAMqE,oBAAoB,CAACC,UACzBC,AAAAA,IAAAA,mCAAAA,UAAAA,AAAAA,EAAWD,YACX,kBAAkB,IAAI,CAACA,YACvBA,QAAQ,UAAU,CAAC;AAErB,MAAME,mBAAmB,CACvBhM,OACAiM,OACA3E,QAAQ,OAAO,EACf4E,oBAAoB,KAAK;IAEzB,IAAI,CAACnF,MAAM,OAAO,CAAC/G,QACjB,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,kBAAkB,CAAC;IAE3E,IAAIA,AAAU,cAAVA,SAAuBjM,AAAiB,MAAjBA,MAAM,MAAM,IAAU,CAACkM,mBAChD,MAAM,IAAIlJ,UACR,CAAC,gBAAgB,EAAEsE,MAAM,mCAAmC,CAAC;IAIjE,OAAOtH,MAAM,GAAG,CAAC,CAAC8L,SAASzI;QACzB,IAAI,AAAmB,YAAnB,OAAOyI,WAAwBA,AAA0B,MAA1BA,QAAQ,IAAI,GAAG,MAAM,EACtD,MAAM,IAAI9I,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,CAAC,EAAE5I,MAAM,6BAA6B,CAAC;QAG7E,IAAIwI,kBAAkBC,UACpB,MAAM,IAAI9I,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,CAAC,EAAE5I,MAAM,uCAAuC,CAAC;QAGvF,IAAIyI,QAAQ,KAAK,CAAC,SAAS,QAAQ,CAAC,OAClC,MAAM,IAAI9I,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,CAAC,EAAE5I,MAAM,uCAAuC,CAAC;QAGvF,IAAIyI,QAAQ,QAAQ,CAAC,OACnB,MAAM,IAAI9I,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,CAAC,EAAE5I,MAAM,qCAAqC,CAAC;QAGrF,IAAIyI,QAAQ,UAAU,CAAC,MAAM;YAC3B,IAAIG,AAAU,cAAVA,OACF,MAAM,IAAIjJ,UACR,CAAC,gBAAgB,EAAEsE,MAAM,SAAS,EAAEjE,MAAM,2DAA2D,CAAC;YAG1G,MAAM,IAAIL,UACR,CAAC,gBAAgB,EAAEsE,MAAM,SAAS,EAAEjE,MAAM,gCAAgC,CAAC;QAE/E;QACA,OAAOyI;IACT;AACF;AAEO,MAAMK,4BAA4B,CACvCnM,OACAsH,QAAQ,OAAO;IAEf,IAAItH,AAAU6C,WAAV7C,OAAqB;IACzB,IAAI,CAAC2L,SAAS3L,QACZ,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;IAEnEF,+BAAkBpH,OAAO;QAAC;QAAW;KAAU,EAAEsH;IACjD,MAAM8E,UAAUJ,iBAAiBhM,MAAM,OAAO,EAAE,WAAWsH;IAC3D,MAAM+E,UACJrM,AAAkB6C,WAAlB7C,MAAM,OAAO,GACT6C,SACAmJ,iBAAiBhM,MAAM,OAAO,EAAE,WAAWsH;IACjD,OAAO3H,OAAO,MAAM,CAAC;QACnB,SAASA,OAAO,MAAM,CAACyM;QACvB,GAAIC,UAAU;YAAE,SAAS1M,OAAO,MAAM,CAAC0M;QAAS,IAAI,CAAC,CAAC;IACxD;AACF;AAEA,MAAMC,kBAAkB,CACtBtM,OACAiM,OACA3E;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAO,EAAE;IAClC,IAAI,CAAC+G,MAAM,OAAO,CAAC/G,QACjB,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,kBAAkB,CAAC;IAE3E,OAAOjM,MAAM,GAAG,CAAC,CAAC6I,KAAKxF;QACrB,IAAI,AAAe,YAAf,OAAOwF,OAAoBA,AAAsB,MAAtBA,IAAI,IAAI,GAAG,MAAM,EAC9C,MAAM,IAAI7F,UACR,CAAC,gBAAgB,EAAEsE,MAAM,CAAC,EAAE2E,MAAM,CAAC,EAAE5I,MAAM,6BAA6B,CAAC;QAG7E,OAAOwF;IACT;AACF;AAEA,MAAM0D,uBAAuB,CAC3BvM,OACAsH;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAOL,OAAO,MAAM,CAAC;QAAE,SAAS,EAAE;QAAE,SAAS,EAAE;IAAC;IACzE,IAAI,CAACgM,SAAS3L,QACZ,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;IAEnE,OAAO3H,OAAO,MAAM,CAAC;QACnB,SAASA,OAAO,MAAM,CAAC2M,gBAAgBtM,MAAM,OAAO,EAAE,WAAWsH;QACjE,SAAS3H,OAAO,MAAM,CAAC2M,gBAAgBtM,MAAM,OAAO,EAAE,WAAWsH;IACnE;AACF;AAEA,SAASkF,gBACPxM,KAAc,EACdkJ,IAAY,EACZuD,IAAkB;IAElB,IACEzM,AAAU,SAAVA,SACA,AAAiB,YAAjB,OAAOA,SACP,AAAiB,aAAjB,OAAOA,OAEP;IAEF,IAAI,AAAiB,YAAjB,OAAOA,OAAoB;QAC7B,IAAII,OAAO,QAAQ,CAACJ,QAAQ;QAC5B,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEkG,KAAK,yBAAyB,CAAC;IACxE;IACA,IAAI,AAAiB,YAAjB,OAAOlJ,SAAsBA,AAAU6C,WAAV7C,OAC/B,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEkG,KAAK,yBAAyB,CAAC;IAExE,IACE,CAACnC,MAAM,OAAO,CAAC/G,UACfL,OAAO,cAAc,CAACK,WAAWL,OAAO,SAAS,IACjDA,AAAiC,SAAjCA,OAAO,cAAc,CAACK,QAEtB,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEkG,KAAK,yBAAyB,CAAC;IAExE,IAAIuD,KAAK,GAAG,CAACzM,QACX,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEkG,KAAK,yBAAyB,CAAC;IAExEuD,KAAK,GAAG,CAACzM;IACT,IAAI+G,MAAM,OAAO,CAAC/G,QAChBA,MAAM,OAAO,CAAC,CAAC2J,MAAMtG,QACnBmJ,gBAAgB7C,MAAM,GAAGT,KAAK,CAAC,EAAE7F,MAAM,CAAC,CAAC,EAAEoJ;SAG7C,KAAK,MAAM,CAAC/M,KAAKsH,MAAM,IAAIrH,OAAO,OAAO,CAACK,OACxCwM,gBAAgBxF,OAAO,GAAGkC,KAAK,CAAC,EAAExJ,KAAK,EAAE+M;IAG7CA,KAAK,MAAM,CAACzM;AACd;AAEA,MAAM0M,iBAAiB,CAAsB1M;IAC3C,IAAI,AAAiB,YAAjB,OAAOA,SAAsBA,AAAU,SAAVA,OAAgB;QAC/C,KAAK,MAAMgH,SAASrH,OAAO,MAAM,CAACK,OAAQ0M,eAAe1F;QACzDrH,OAAO,MAAM,CAACK;IAChB;IACA,OAAOA;AACT;AAEA,MAAM2M,oBAAoB,CACxB3M,OACAsH;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAOL,OAAO,MAAM,CAAC,CAAC;IAC/C,IAAI,CAACgM,SAAS3L,QACZ,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;IAEnEkF,gBAAgBxM,OAAOsH,OAAO,IAAIlE;IAClC,OAAOsJ,eAAe1M;AACxB;AAEA,MAAM4M,gBAAgB,CACpB5M,OACAsH;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB;IACzB,IAAI,CAAC2L,SAAS3L,QACZ,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;IAEnEF,+BAAkBpH,OAAO;QAAC;QAAQ;KAAQ,EAAEsH;IAC5C,IAAI,AAAsB,YAAtB,OAAOtH,MAAM,IAAI,IAAiBA,AAA6B,MAA7BA,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,EAC5D,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,wBAAwB,CAAC;IAExE,IAAI,AAAuB,cAAvB,OAAOtH,MAAM,KAAK,EACpB,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,0BAA0B,CAAC;IAE1E,OAAOtH;AACT;AAEA,MAAM6M,0BAA0B,CAC9B7M,OACA8M,UACAxF;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAO8M;IAChC,IAAI,CAAC1M,OAAO,SAAS,CAACJ,UAAWA,SAAoB,GACnD,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,4BAA4B,CAAC;IAE5E,OAAOtH;AACT;AAEA,MAAM+M,6BAA6B,CACjC/M,OACA8M,UACAxF;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAO8M;IAChC,IAAI,CAAC1M,OAAO,SAAS,CAACJ,UAAWA,QAAmB,GAClD,MAAM,IAAIgD,UACR,CAAC,gBAAgB,EAAEsE,MAAM,gCAAgC,CAAC;IAG9D,OAAOtH;AACT;AAEA,MAAMgN,4BAA4B,CAChChN,OACAiN,cACAC;IAKA,IAAIlN,AAAU6C,WAAV7C,OAAqB;QACvB,MAAMmN,QAAQP,cACZK,cACA;QAEF,OAAO;YACL,qBAAqB;YACrB,UAAUtN,OAAO,MAAM,CAAC;gBACtBA,OAAO,MAAM,CAAC;oBACZ,WAAWyL,mBAAmB;oBAC9B,MAAM;oBACN,GAAI+B,QAAQ;wBAAEA;oBAAM,IAAI,CAAC,CAAC;oBAC1B,MAAMxN,OAAO,MAAM,CAAC;wBAAE,SAAS,EAAE;wBAAE,SAAS,EAAE;oBAAC;oBAC/C,OAAO;oBACP,WAAWA,OAAO,MAAM,CAAC,CAAC;oBAC1B,OAAO,IAAIuL,aAAagC,YAAY,WAAW;gBACjD;aACD;QACH;IACF;IACA,IAAID,AAAiBpK,WAAjBoK,cACF,MAAM,IAAIjK,UACR;IAGJ,IAAI,CAAC+D,MAAM,OAAO,CAAC/G,UAAUA,AAAiB,MAAjBA,MAAM,MAAM,EACvC,MAAM,IAAIgD,UACR;IAGJ,MAAMoK,QAAQ,IAAIhK;IAClB,MAAMqG,WAAWzJ,MAAM,GAAG,CAAC,CAACqN,WAAWhK;QACrC,MAAMiE,QAAQ,CAAC,SAAS,EAAEjE,MAAM,CAAC,CAAC;QAClC,IAAI,CAACsI,SAAS0B,YACZ,MAAM,IAAIrK,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;QAEnEF,+BACEiG,WACA;YAAC;YAAQ;YAAS;YAAS;YAAS;YAAQ;YAAS;SAAY,EACjE/F;QAEF,IACE,AAA0B,YAA1B,OAAO+F,UAAU,IAAI,IACrBA,AAAiC,MAAjCA,UAAU,IAAI,CAAC,IAAI,GAAG,MAAM,EAE5B,MAAM,IAAIrK,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,wBAAwB,CAAC;QAExE,IAAI8F,MAAM,GAAG,CAACC,UAAU,IAAI,GAC1B,MAAM,IAAIrK,UACR,CAAC,8BAA8B,EAAEqK,UAAU,IAAI,CAAC,iBAAiB,CAAC;QAGtED,MAAM,GAAG,CAACC,UAAU,IAAI;QACxB,MAAMC,QAAQnB,0BAA0BkB,UAAU,KAAK,EAAE,GAAG/F,MAAM,MAAM,CAAC;QACzE,IAAI+F,AAAoBxK,WAApBwK,UAAU,KAAK,IAAkB,CAACtG,MAAM,OAAO,CAACsG,UAAU,KAAK,GACjE,MAAM,IAAIrK,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,wBAAwB,CAAC;QAExE,MAAMiG,aAAa,IAAIrC,aACrBmC,UAAU,KAAK;QAEjB,MAAM7I,QAAQ,IAAI0G,aAAa;eAC1BgC,YAAY,WAAW,GAAG,MAAM,CAAC,CAACjI,OAAS,CAACsI,WAAW,GAAG,CAACtI,KAAK,IAAI;eACpEsI,WAAW,WAAW;SAC1B;QACD,OAAO5N,OAAO,MAAM,CAAC;YACnB,WAAWyL,mBAAmB/H;YAC9B,MAAMgK,UAAU,IAAI;YACpB7I;YACA,GAAI8I,QAAQ;gBAAEA;YAAM,IAAI,CAAC,CAAC;YAC1B,MAAMf,qBAAqBc,UAAU,IAAI,EAAE,GAAG/F,MAAM,KAAK,CAAC;YAC1D,OAAOyF,2BAA2BM,UAAU,KAAK,EAAE,GAAG,GAAG/F,MAAM,MAAM,CAAC;YACtE,WAAWqF,kBAAkBU,UAAU,SAAS,EAAE,GAAG/F,MAAM,UAAU,CAAC;YACtE,GAAI+F,AAAoBxK,WAApBwK,UAAU,KAAK,GACf,CAAC,IACD;gBACE,OAAOT,cACLS,UAAU,KAAK,EACf,GAAG/F,MAAM,MAAM,CAAC;YAEpB,CAAC;QACP;IACF;IACA,OAAO;QAAE,UAAU3H,OAAO,MAAM,CAAC8J;QAAW,qBAAqB;IAAK;AACxE;AAEA,MAAM+D,sBAAsB,CAACxN;IAC3B,IAAIA,AAAU6C,WAAV7C,SAAuB,CAAC2L,SAAS3L,QACnC,MAAM,IAAIgD,UAAU;IAEtB,MAAMqK,YAAarN,SAAS,CAAC;IAC7B,MAAMyN,gBAAgBJ,UAAU,aAAa,IAAI;IACjD,IAAII,AAAkB,cAAlBA,iBAA+BA,AAAkB,WAAlBA,eACjC,MAAM,IAAIzK,UACR;IAGJ,OAAOrD,OAAO,MAAM,CAAC;QACnB,gBAAgBkN,wBACdQ,UAAU,cAAc,EACxB,GACA;QAEF,MAAMN,2BAA2BM,UAAU,IAAI,EAAE,GAAG;QACpD,aAAaR,wBACXQ,UAAU,WAAW,EACrB,QACA;QAEFI;QACA,eAAeV,2BACbM,UAAU,aAAa,EACvB,GACA;IAEJ;AACF;AAEA,MAAMK,uBAAuB,CAAC1N;IAC5B,IAAIA,AAAU6C,WAAV7C,OAAqB;IACzB,IAAI,CAAC2L,SAAS3L,QACZ,MAAM,IAAIgD,UAAU;IAEtBoE,+BAAkBpH,OAAO;QAAC;QAAQ;KAAU,EAAE;IAC9C,IAAI,AAAsB,YAAtB,OAAOA,MAAM,IAAI,IAAiBA,AAA6B,MAA7BA,MAAM,IAAI,CAAC,IAAI,GAAG,MAAM,EAC5D,MAAM,IAAIgD,UAAU;IAEtB,IAAI,AAAyB,cAAzB,OAAOhD,MAAM,OAAO,EACtB,MAAM,IAAIgD,UAAU;IAEtB,OAAOrD,OAAO,MAAM,CAACK;AACvB;AAEA,MAAM2N,qBAAqB,CACzB3N,OACA8M,UACAxF;IAEA,IAAItH,AAAU6C,WAAV7C,OAAqB,OAAO8M;IAChC,IAAI,AAAiB,YAAjB,OAAO9M,SAAsBA,AAAwB,MAAxBA,MAAM,IAAI,GAAG,MAAM,EAClD,MAAM,IAAIgD,UAAU,CAAC,gBAAgB,EAAEsE,MAAM,mBAAmB,CAAC;IAEnE,OAAOtH;AACT;AAEA,MAAM4N,iBAAiB,CAAC5N;IACtB,IAAIA,AAAU6C,WAAV7C,SAAuB,CAAC2L,SAAS3L,QACnC,MAAM,IAAIgD,UAAU;IAEtB,MAAMqK,YAAarN,SAAS,CAAC;IAC7BoH,+BAAkBiG,WAAW;QAAC;KAAY,EAAE;IAC5C,OAAO1N,OAAO,MAAM,CAAC;QACnB,WAAWgO,mBACTN,UAAU,SAAS,EACnB,yBACA;IAEJ;AACF;AAEA,MAAMQ,gCAAgC,CACpCpO;IAEA,IAAI,CAACkM,SAASlM,aACZ,MAAM,IAAIuD,UAAU;IAEtB,IAAIvD,AAAqBoD,WAArBpD,WAAW,KAAK,IAAkB,CAACsH,MAAM,OAAO,CAACtH,WAAW,KAAK,GACnE,MAAM,IAAIuD,UAAU;IAEtB,IAAI,mBAAmBvD,YACrB,MAAM,IAAIuD,UACR;IAGJ,IAAI,mBAAmBvD,YACrB,MAAM,IAAIuD,UACR;IAGJ,IAAI,UAAUvD,YACZ,MAAM,IAAIuD,UACR;IAGJ,IAAI,WAAWvD,YACb,MAAM,IAAIuD,UACR;IAGJ,IAAI,gBAAgBvD,YAClB,MAAM,IAAIuD,UACR;IAGJoE,+BACE3H,YACA;QAAC;QAAS;QAAY;QAAQ;QAAU;QAAS;KAAW,EAC5D;IAEF,MAAM+E,QAAQ,IAAI0G,aAChBzL,WAAW,KAAK;IAElB,MAAMqO,mBAAmBd,0BACvBvN,WAAW,QAAQ,EACnBA,WAAW,KAAK,EAChB+E;IAEF,MAAMuJ,OAAOP,oBAAoB/N,WAAW,IAAI;IAChD,MAAMiC,WAAWgM,qBAAqBjO,WAAW,QAAQ;IACzD,IAAIiC,YAAYqM,AAAuB,WAAvBA,KAAK,aAAa,EAChC,MAAM,IAAI/K,UACR;IAGJ,OAAO;QACL,GAAG8K,gBAAgB;QACnBC;QACA,QAAQH,eAAenO,WAAW,MAAM;QACxC+E;QACA,GAAI9C,WAAW;YAAEA;QAAS,IAAI,CAAC,CAAC;QAChC,aAAa,CAACwE,OACZ1B,MAAM,GAAG,CAAC0B;IACd;AACF;AAEA,MAAM8H,wBAAwB,CAACvC;IAC7B,IAAI,CAACA,aAAa,QAAQ,CAAC,UAAU,CAACA,aAAa,QAAQ,CAAC,SAAS;QACnE,MAAMwC,YAAYxC,aAAa,KAAK,CAAC,kBAAkB,CAAC,EAAE,IAAI;QAC9D,MAAM,IAAIzI,UACR,CAAC,uCAAuC,EAAEiL,UAAU,kCAAkC,CAAC;IAE3F;IACA,OAAOxC,aAAa,QAAQ,CAAC,UAAU,SAAS;AAClD;AAEA,MAAMyC,wBAAwB,CAACpG;IAC7B,IAAI,CAAEA,CAAAA,iBAAiB1G,KAAI,GAAI,OAAO;IACtC,MAAM+M,YAAarG,MAAoC,IAAI;IAC3D,OACGA,iBAAiBsG,eAChB,iDAAiD,IAAI,CAACtG,MAAM,OAAO,KACrEqG,AAAc,wCAAdA,aACCA,AAAc,iCAAdA,aACC,4BAA4B,IAAI,CAACrG,MAAM,OAAO;AAEpD;AAEO,eAAeuG,gBACpBC,UAAmB;IAEnB,IAAI,CAACA,YACH,OAAOT,8BAAwC;QAC7C,OAAO,EAAE;IACX;IAGF,MAAMpC,eAAe8C,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQD;IAC7B,MAAML,YAAYD,sBAAsBvC;IACxC,IAAID;IACJ,IAAI;QACF,IAAIyC,AAAc,WAAdA,WACFzC,SAAS,MAAM,MAAM,CAACgD,AAAAA,IAAAA,kCAAAA,aAAAA,AAAAA,EAAc/C,cAAc,IAAI;aACjD;YAGL,MAAM,EAAEgD,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC;YAClCjD,SAAS,MAAMiD,SAASD,AAAAA,IAAAA,kCAAAA,aAAAA,AAAAA,EAAc/C,cAAc,IAAI,EAAE;gBACxD,WAAW+C,AAAAA,IAAAA,kCAAAA,aAAAA,AAAAA,EAAc,GAAGpF,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQqC,gBAAgBvD,mCAAAA,GAAGA,EAAE,EAAE,IAAI;gBAC/D,UAAU;YACZ;QACF;IACF,EAAE,OAAOJ,OAAO;QACd,IAAI;YACF,IAAImG,AAAc,WAAdA,aAAwB,CAACC,sBAAsBpG,QAAQ,MAAMA;YACjE0D,SAASkD,AAAAA,IAAAA,oBAAAA,OAAAA,AAAAA,EAAWjD,cAAc+C,AAAAA,IAAAA,kCAAAA,aAAAA,AAAAA,EAAc/C;QAClD,EAAE,OAAOkD,eAAe;YACtB,MAAMtN,UACJsN,yBAAyBvN,QAAQ,CAAC,EAAE,EAAEuN,cAAc,OAAO,EAAE,GAAG;YAClE,MAAM,IAAIvN,MACR,CAAC,gCAAgC,EAAEqK,aAAa,CAAC,EAAEpK,SAAS,EAC5D;gBAAE,OAAOsN;YAAc;QAE3B;IACF;IAEA,OAAOd,8BACLtC,iBAAiBC,QAAQC;AAE7B;AChnBO,MAAMmD,eAAe;IAC1B;IACA;CACD;AACD,MAAMC,gBAAgB;AACtB,MAAMC,0BAA0B;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD;AAEM,MAAMC,8BAAiD;IAC5D,SAAS;QAAC;KAAkB;AAC9B;AAEA,MAAMnF,8BAAU,CAAC5J,QAA0BA,MAAM,KAAK,CAACkI,mCAAAA,GAAGA,EAAE,IAAI,CAAC;AAE1D,MAAM8G,4BAA4B,CACvCC,aACAC;IAEA,MAAMC,OAAOZ,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQU;IACrB,MAAM3B,QAAQ,IAAIlK;IAClB,KAAK,MAAMgM,iBAAiBF,MAAO;QACjC,IACE,AAAyB,YAAzB,OAAOE,iBACPA,AAAgC,MAAhCA,cAAc,IAAI,GAAG,MAAM,EAE3B,MAAM,IAAIpM,UAAU;QAEtB,MAAMyI,eAAe8C,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQY,MAAMC;QACnC,MAAMC,eAAezE,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASuE,MAAM1D;QACpC,IACE4D,AAAiB,SAAjBA,gBACAA,aAAa,UAAU,CAAC,CAAC,EAAE,EAAEnH,mCAAAA,GAAGA,EAAE,KAClC6D,AAAAA,IAAAA,mCAAAA,UAAAA,AAAAA,EAAWsD,eAEX,MAAM,IAAIjO,MACR,CAAC,4CAA4C,EAAEgO,eAAe;QAGlE,IAAI,CAACE,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAW7D,eACd,MAAM,IAAIrK,MAAM,CAAC,oCAAoC,EAAEgO,eAAe;QAExE,IAAIG,AAAAA,IAAAA,iCAAAA,QAAAA,AAAAA,EAAS9D,cAAc,WAAW,IACpC,KAAK,MAAM+D,QAAQC,kBAAkBhE,cAAe6B,MAAM,GAAG,CAACkC;aACzD,IAAI,YAAY,IAAI,CAAC/D,eAC1B6B,MAAM,GAAG,CAAC7B;aAEV,MAAM,IAAIrK,MAAM,CAAC,kCAAkC,EAAEgO,eAAe;IAExE;IACA,OAAO;WAAI9B;KAAM,CAAC,IAAI,CAAC,CAACoC,GAAGC;QACzB,MAAMC,YAAYhG,4BAAQgB,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASuE,MAAMO;QACzC,MAAMG,YAAYjG,4BAAQgB,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASuE,MAAMQ;QACzC,OAAOC,YAAYC,YAAY,KAAKD,YAAYC,YAAY,IAAI;IAClE;AACF;AAEA,MAAMC,4BAA4B,CAChCb,aACAc;IAEA,MAAMZ,OAAOZ,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQU;IACrB,MAAMe,QAAQ,CAACC,WACbC,AAAAA,IAAAA,oCAAAA,QAAAA,AAAAA,EAASD,UAAU;YACjB,UAAU;YACV,oBAAoB;YACpB,KAAKd;YACL,KAAK;YACL,mBAAmB;YACnB,qBAAqB;YACrB,QAAQ;mBAAIL;mBAA6BiB,UAAU,OAAO,IAAI,EAAE;aAAE;YAClE,WAAW;QACb,GAAG,MAAM,CAAC,CAACP,OAAS,YAAY,IAAI,CAACA;IACvC,MAAMlC,QAAQ0C,MAAMD,UAAU,OAAO;IAErC,OAAO;WAAI,IAAI3M,IAAIkK,MAAM,GAAG,CAAC,CAACkC,OAASjB,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQiB;KAAQ,CAAC,IAAI,CAAC,CAACE,GAAGC;QAC/D,MAAMC,YAAYhG,4BAAQgB,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASuE,MAAMO;QACzC,MAAMG,YAAYjG,4BAAQgB,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASuE,MAAMQ;QACzC,OAAOC,YAAYC,YAAY,KAAKD,YAAYC,YAAY,IAAI;IAClE;AACF;AAEO,MAAMJ,oBAAoB,CAC/BR,aACAc,YAA+BhB,2BAA2B;IAE1D,MAAMvG,aAAa2D,0BAA0B4D;IAC7C,IAAI,CAACvH,YAAY,MAAM,IAAIxF,UAAU;IACrC,OAAO8M,0BAA0Bb,aAAazG;AAChD;AAEO,MAAM2H,qBAAqB,CAAClB;IACjC,MAAME,OAAOZ,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQU;IACrB,MAAMmB,aAAaC,AAAAA,IAAAA,iCAAAA,WAAAA,AAAAA,EAAYlB,MAC5B,MAAM,CAAC,CAACjJ,OAASA,KAAK,UAAU,CAAC2I,gBACjC,IAAI;IACP,MAAMyB,YAAYF,WAAW,MAAM,CAAC,CAAClK,OACnC0I,aAAa,QAAQ,CAAC1I;IAExB,MAAMqK,cAAcH,WAAW,MAAM,CACnC,CAAClK,OAAS,CAAC0I,aAAa,QAAQ,CAAC1I;IAEnC,IAAIqK,YAAY,MAAM,GAAG,GACvB,MAAM,IAAInP,MACR;QACE,CAAC,qDAAqD,EAAE+N,KAAK,CAAC,CAAC;WAC5DiB,WAAW,GAAG,CAAC,CAAClK,OAAS,CAAC,EAAE,EAAEA,MAAM;QACvC,CAAC,KAAK,EAAE0I,aAAa,IAAI,CAAC,SAAS,eAAe,CAAC;KACpD,CAAC,IAAI,CAAC;IAGX,IAAI0B,UAAU,MAAM,GAAG,GACrB,MAAM,IAAIlP,MACR;QACE,CAAC,mCAAmC,EAAE+N,KAAK,CAAC,CAAC;WAC1CmB,UAAU,GAAG,CAAC,CAACpK,OAAS,CAAC,EAAE,EAAEA,MAAM;QACtC;KACD,CAAC,IAAI,CAAC;IAGX,OAAOoK,SAAS,CAAC,EAAE,GAAG5G,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKyF,MAAMmB,SAAS,CAAC,EAAE,IAAIzN;AACnD;AAEA,MAAM2N,oBAAoB,CACxB3M,WACAgD,aACA/C,YACAgE,QACgC;QAChCjE;QACAgD;QACA/C;QACA,OACEgE,iBAAiB2I,4BAAAA,aAAaA,GAC1B3I,QACA,IAAI3B,4BAAAA,kBAAkBA,CACpB,CAAC,qCAAqC,EAAErC,WAAW,GAAG,EACpDgE,iBAAiB1G,QAAQ0G,MAAM,OAAO,GAAGvB,OAAOuB,QAChD,EACF;YAAEjB;YAAa/C;QAAW,GAC1BgE;IAEV;AAEO,MAAM4I,cAAc,CACzB9H,MACAmH;IAEA,IAAIA,UAAU,OAAO,CAAC,IAAI,CAAC,CAAClH,MAAQD,KAAK,QAAQ,CAACC,OAAO,OAAO;IAChE,OACEkH,AAA6B,MAA7BA,UAAU,OAAO,CAAC,MAAM,IACxBA,UAAU,OAAO,CAAC,IAAI,CAAC,CAAClH,MAAQD,KAAK,QAAQ,CAACC;AAElD;AAEA,MAAM8H,sBAAsB,CAC1BjN,UACAuH,SACA8E;IAEA,MAAMpH,QAAQjF,SAAS,KAAK,CAAC,MAAM,CAAC,CAACiG;QACnC,MAAMf,OAAOe,KAAK,UAAU,CAAC,IAAI,IAAI,EAAE;QACvC,OACE+G,YAAY9H,MAAMqC,QAAQ,IAAI,KAC9ByF,YAAY9H,MAAM;YAChB,SAASmH,WAAW,MAAM,WAAW,EAAE;YACvC,SAASA,WAAW,MAAM,WAAW,EAAE;QACzC,MACC,EAACA,WAAW,SAAS,UAAUA,UAAU,OAAO,CAAC,QAAQ,CAACpG,KAAK,MAAM;IAE1E;IACA,MAAMiH,WAAWlN,SAAS,KAAK,CAAC,MAAM,GAAGiF,MAAM,MAAM;IACrD,OAAOA,AAAiB,MAAjBA,MAAM,MAAM,GACf;QAAEiI;IAAS,IACX;QAAE,UAAU;YAAE,GAAGlN,QAAQ;YAAEiF;QAAM;QAAGiI;IAAS;AACnD;AAEO,MAAMC,iBAAiB,CAC5BpH,UACA2D;IAEA,IAAI,CAACA,SAASA,AAAiB,MAAjBA,MAAM,MAAM,EAAQ,OAAO3D;IACzC,MAAMqH,YAAY,IAAI1N,IAAIgK;IAC1B,IAAI0D,UAAU,IAAI,KAAK1D,MAAM,MAAM,EACjC,MAAM,IAAIhM,MAAM;IAElB,MAAM2P,QAAQ,IAAI3N,IAAIqG,SAAS,GAAG,CAAC,CAACwB,UAAYA,QAAQ,IAAI;IAC5D,MAAMzD,UAAU4F,MAAM,IAAI,CAAC,CAAClH,OAAS,CAAC6K,MAAM,GAAG,CAAC7K;IAChD,IAAIsB,SAAS,MAAM,IAAIpG,MAAM,CAAC,0BAA0B,EAAEoG,SAAS;IACnE,OAAOiC,SAAS,MAAM,CAAC,CAACwB,UAAY6F,UAAU,GAAG,CAAC7F,QAAQ,IAAI;AAChE;AAGO,eAAe+F,eACpB/F,OAA+B,EAC/BgE,WAAmB,EACnBzF,MAAc,EACdyH,gBAAwB,EACxB3P,UAAqC,CAAC,CAAC;IAEvC,MAAM4P,WAAW5P,QAAQ,QAAQ,EAAE;IACnC,MAAM6P,gBAAgBlG,QAAQ,KAAK,IAAI8D;IACvC,MAAMqC,mBAAmB9P,QAAQ,gBAAgB,GAC7CiN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQjN,QAAQ,gBAAgB,IAChCuB;IACJ,MAAMwO,eACJ/P,QAAQ,KAAK,IAAIwO,0BAA0Bb,aAAakC;IAC1D,MAAMG,gBAAgBhQ,QAAQ,SAAS,EAAE,OAAO,SAC5C,IAAI8B,IAAI4L,0BAA0BC,aAAa3N,QAAQ,SAAS,CAAC,KAAK,KACtEuB;IACJ,MAAM0O,YAAYD,gBACdD,aAAa,MAAM,CAAC,CAAC7B,OAAS8B,cAAc,GAAG,CAAC9B,SAChD6B;IACJ,MAAM/D,QAAQ;WACR8D,mBAAmB;YAACA;SAAiB,GAAG,EAAE;WAC3CG,UAAU,MAAM,CAAC,CAAC/B,OAASA,SAAS4B;KACxC;IACD,MAAMI,cAAc,IAAIC;IACxB,MAAMC,UAAUpE,MAAM,GAAG,CAAC,CAAC7B;QACzB,MAAMzH,kBAAkBwN,YAAY,GAAG,CAAC/F,iBAAiB;QACzD+F,YAAY,GAAG,CAAC/F,cAAczH,kBAAkB;QAChD,OAAO;YACL,WAAWiH,QAAQ,SAAS;YAC5B,aAAaA,QAAQ,IAAI;YACzB,YAAYrB,4BAAQgB,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASqE,aAAaxD;YAC1CA;YACAzH;QACF;IACF;IACA,MAAM2N,mBAAiD,EAAE;IACzD,MAAMC,cAA4C,EAAE;IACpD,MAAMC,QAA8D,EAAE;IACtE,IAAIC,oBAAoB;IACxB,MAAMC,mBAAmB,IAAI3O;IAE7B,IAAIsO,AAAmB,MAAnBA,QAAQ,MAAM,EAAQ;QACxB,MAAM5J,QAAQ0I,kBACZvF,QAAQ,SAAS,EACjBA,QAAQ,IAAI,EACZ,aACA,IAAI9E,4BAAAA,kBAAkBA,CACpB,CAAC,0CAA0C,EAAE8E,QAAQ,IAAI,CAAC,KAAK,EAAEgE,YAAY,CAAC,CAAC,EAC/E;YAAE,aAAahE,QAAQ,IAAI;YAAEgE;QAAY;QAG7C0C,iBAAiB,IAAI,CAAC7J;QACtB,MAAMyC,qBAAqBf,QAAQ1B;IACrC;IAEA,KAAK,MAAMxD,UAAUoN,QACnB,IAAI;QACF,MAAMM,YAAY,MAAM1Q,QAAQ,eAAe,GAAGgD,QAAQ2G;QAC1D,IAAI+G,WAAW;YACbF,qBAAqBE,UAAU,iBAAiB;YAChD,IAAIA,UAAU,UAAU,EAAE;gBACxB,MAAMC,OAAOC,AAAAA,IAAAA,4BAAAA,sBAAAA,AAAAA,EAAuBF,UAAU,UAAU,CAAC,QAAQ,EAAE;oBACjE,kBAAkBA,UAAU,UAAU,CAAC,gBAAgB;oBACvD,OAAOA,UAAU,UAAU,CAAC,KAAK;gBACnC;gBACAJ,YAAY,IAAI,CAAC;oBAAE,GAAGI,UAAU,UAAU;oBAAEC;gBAAK;gBACjDJ,MAAM,IAAI,CAACI;YACb;YACA;QACF;QACA,MAAMvO,WAAWiE,wBAAwBrD,QAAQ;YAC/C,aAAa2G,QAAQ,KAAK,CAAC,GAAG,CAAC,IAAI,CAACA,QAAQ,KAAK;YACjD,WAAWA,QAAQ,SAAS;YAC5B,KAAK3C,QAAQ,GAAG;QAClB;QACA,MAAM6J,YAAYzO,SAAS,KAAK,CAAC,IAAI,CAAC,CAACiG,OACrCoI,iBAAiB,GAAG,CAACpI,KAAK,MAAM;QAElC,IAAIwI,WACF,MAAM,IAAIhM,4BAAAA,kBAAkBA,CAC1B,CAAC,8BAA8B,EAAE8E,QAAQ,IAAI,CAAC,GAAG,EAAEkH,UAAU,MAAM,CAAC,CAAC,CAAC,EACtE;YAAE,QAAQA,UAAU,MAAM;YAAE,aAAalH,QAAQ,IAAI;QAAC;QAE1D,KAAK,MAAMtB,QAAQjG,SAAS,KAAK,CAAEqO,iBAAiB,GAAG,CAACpI,KAAK,MAAM;QACnE,MAAMiH,WACJtM,OAAO,YAAY,KAAK8M,mBACpB;YAAE1N;YAAU,UAAU;QAAE,IACxBiN,oBAAoBjN,UAAUuH,SAAS3J,QAAQ,SAAS;QAC9D,MAAM2Q,OAAOC,AAAAA,IAAAA,4BAAAA,sBAAAA,AAAAA,EAAuBxO,UAAU;YAC5C,iBACEkN,SAAS,QAAQ,EAAE,MAAM,IAAI,CAACjH,OAASA,KAAK,MAAM,KAAK,EAAE;YAC3DsH;YACA,OAAO;gBAAE,OAAO;gBAAQ,OAAOhG,QAAQ,KAAK;YAAC;QAC/C;QACA4G,MAAM,IAAI,CAACI;QACXH,qBAAqBlB,SAAS,QAAQ;QACtC,IAAIA,SAAS,QAAQ,EACnBgB,YAAY,IAAI,CAAC;YACfK;YACA,UAAUrB,SAAS,QAAQ;YAC3B,OAAO;gBAAE,OAAO;gBAAQ,OAAO3F,QAAQ,KAAK;YAAC;YAC7CgG;YACA,eAAe;YACf,UAAU;gBAAE,aAAahG,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,CAACA,QAAQ,KAAK;YAAE;QACrE;IACJ,EAAE,OAAOnD,OAAO;QACd,MAAM0C,kBAAkBgG,kBACtBvF,QAAQ,SAAS,EACjBA,QAAQ,IAAI,EACZ3G,OAAO,UAAU,EACjBwD;QAEF6J,iBAAiB,IAAI,CAACnH;QACtB,MAAMD,qBAAqBf,QAAQgB;IACrC;IAGF,MAAM4H,YAAYR,YAAY,GAAG,CAAC,CAACS,aAAeA,WAAW,QAAQ;IACrE,MAAMC,qBAAqBZ,QAAQ,IAAI,CACrC,CAACpN,SAAWA,OAAO,YAAY,KAAK8M;IAEtC,MAAMmB,uBAAuBH,UAAU,IAAI,CACzC,CAAC1O,WAAaA,SAAS,UAAU,KAAK4O,oBAAoB;IAE5D,OAAO;QACLrH;QACA,GAAIiG,WAAW;YAAEA;QAAS,IAAI,CAAC,CAAC;QAChC,qBAAqB5P,QAAQ,mBAAmB,IAAI;QACpD,GAAIiR,uBACA;YAAE,wBAAwBA,qBAAqB,UAAU;QAAC,IAC1D,CAAC,CAAC;QACNpB;QACAO;QACAU;QACAR;QACAC;QACAF;QACA,mBAAmBS,UAAU,MAAM,CACjC,CAACI,OAAO9O,WAAa8O,QAAQ9O,SAAS,KAAK,CAAC,MAAM,EAClD;QAEFoO;QACA,kBAAkB;eAAIC;SAAiB;IACzC;AACF;ACxWA,MAAMU,wBAAwB,CAC5BC,QACApL;IAEA,IAAIoL,AAAW7P,WAAX6P,QAAsB;IAC1B,IACE,CAAC3L,MAAM,OAAO,CAAC2L,WACfA,OAAO,IAAI,CACT,CAAC1S,QAAU,AAAiB,YAAjB,OAAOA,SAAsBA,AAAwB,MAAxBA,MAAM,IAAI,GAAG,MAAM,GAG7D,MAAM,IAAIgD,UAAU,GAAGsE,MAAM,uCAAuC,CAAC;IAEvE,IAAI,IAAIlE,IAAIsP,QAAQ,IAAI,KAAKA,OAAO,MAAM,EACxC,MAAM,IAAI1P,UAAU,GAAGsE,MAAM,6BAA6B,CAAC;IAE7D,OAAOoL;AACT;AAEO,MAAMC,uBAAuB,CAClCrR;IAEA,MAAM4N,QAAQuD,sBAAsBnR,QAAQ,KAAK,EAAE;IACnD,MAAMsR,UAAUH,sBACdnR,QAAQ,OAAO,EACf;IAEF,MAAM8K,UAAUqG,sBACdnR,QAAQ,IAAI,EAAE,SACd;IAEF,MAAM+K,UAAUoG,sBACdnR,QAAQ,IAAI,EAAE,SACd;IAEF,OAAO;QACL,GAAI4N,QAAQ;YAAEA;QAAM,IAAI,CAAC,CAAC;QAC1B,GAAI0D,UAAU;YAAEA;QAAQ,IAAI,CAAC,CAAC;QAC9B,GAAIxG,WAAWC,UACX;YACE,MAAM;gBACJ,GAAID,UAAU;oBAAEA;gBAAQ,IAAI,CAAC,CAAC;gBAC9B,GAAIC,UAAU;oBAAEA;gBAAQ,IAAI,CAAC,CAAC;YAChC;QACF,IACA,CAAC,CAAC;IACR;AACF;AC/BA,MAAMwG,cAAc,CAAC7S,QAA0BuG,OAAOvG,OAAO,QAAQ,CAAC,GAAG;AAElE,MAAM8S,kBAAkB,CAC7BC,OAAO,IAAI1S,MAAM,EACjB2S,OAAOC,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA,GAAY;IAEnB,MAAMC,YAAY;QAChBH,KAAK,WAAW;QAChBF,YAAYE,KAAK,QAAQ,KAAK;QAC9BF,YAAYE,KAAK,OAAO;QACxBF,YAAYE,KAAK,QAAQ;QACzBF,YAAYE,KAAK,UAAU;QAC3BF,YAAYE,KAAK,UAAU;KAC5B,CAAC,IAAI,CAAC;IACP,OAAO,GAAGG,UAAU,CAAC,EAAEF,KAAK,KAAK,CAAC,GAAG,IAAI;AAC3C;AAEA,MAAMG,kBAAkB,CAACjK,MAAc5B;IACrC,IAAI,CAACgI,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAWpG,SAAS,CAACqG,AAAAA,IAAAA,iCAAAA,QAAAA,AAAAA,EAASrG,MAAM,WAAW,IAClD,MAAM,IAAI9H,MAAM,GAAGkG,MAAM,uCAAuC,EAAE4B,MAAM;AAE5E;AAEA,MAAMkK,kBAAkB,CAAC9R;IACvB,MAAM+R,MAAM9E,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQjN,QAAQ,GAAG,IAAIgH,QAAQ,GAAG;IAC9C6K,gBAAgBE,KAAK;IACrB,MAAMC,YAAYhS,QAAQ,WAAW,GACjCiN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQ8E,KAAK/R,QAAQ,WAAW,IAChCuB;IACJ,MAAM0Q,aACJD,aAAahE,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAWgE,cAAc/D,AAAAA,IAAAA,iCAAAA,QAAAA,AAAAA,EAAS+D,WAAW,MAAM,KAC5DA,YACAzQ;IACN,IAAI0Q,cAAc,CAAC,YAAY,IAAI,CAACA,aAClC,MAAM,IAAInS,MACR,CAAC,qDAAqD,EAAEmS,YAAY;IAExE,MAAMC,iBAAiBD,aAAanK,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQmK,cAAcD;IAC1D,IAAIE,gBAAgBL,gBAAgBK,gBAAgB;IACpD,MAAMvE,cAAcuE,kBAAkBH;IACtC,OAAO;QACLA;QACApE;QACA,kBAAkBA;QAClB,GAAIsE,aAAa;YAAEA;QAAW,IAAI,CAAC,CAAC;IACtC;AACF;AAGO,eAAeE,eACpBnS,OAA8B;IAE9B,MAAMoS,YAAY,IAAIrT;IACtB,MAAMsT,QAAQb,gBAAgBY;IAC9B,MAAME,QAAQR,gBAAgB9R;IAC9B,MAAMyO,YAAY4C,qBAAqBrR;IACvC,MAAMgN,aAAahN,QAAQ,UAAU,GACjCiN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQqF,MAAM,gBAAgB,EAAEtS,QAAQ,UAAU,IAClD6O,mBAAmByD,MAAM,gBAAgB;IAC7C,IAAItS,QAAQ,UAAU,IAAI,YAAY,IAAI,CAACgN,aACzC,MAAM,IAAIlN,MACR,CAAC,sFAAsF,EAAEkN,WAAW,iDAAiD,EAAEhN,QAAQ,UAAU,CAAC,GAAG,CAAC;IAGlL,IAAIA,QAAQ,UAAU,IAAI,CAACgO,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAWhB,aACpC,MAAM,IAAIlN,MAAM,CAAC,gCAAgC,EAAEkN,YAAY;IACjE,MAAM7O,aAAa,MAAM4O,gBAAyBC;IAClD,MAAMuF,YAAYvS,QAAQ,SAAS,GAC/BiN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQqF,MAAM,GAAG,EAAEtS,QAAQ,SAAS,IACpCoI,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKkK,MAAM,WAAW,EAAE,aAAa;IACzC,MAAMpK,SAASE,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKmK,WAAWF;IAC/B,MAAMjJ,cAAchB,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKF,QAAQ;IACjC,MAAMsK,YAAYvF,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQqF,MAAM,WAAW,EAAEnU,WAAW,MAAM,CAAC,SAAS;IACxEsU,IAAAA,iCAAAA,SAAAA,AAAAA,EAAUF,WAAW;QAAE,WAAW;IAAK;IACvCE,IAAAA,iCAAAA,SAAAA,AAAAA,EAAUvK;IACV,MAAMC,WAAuC,EAAE;IAC/C,KAAK,MAAMwB,WAAW4F,eACpBpR,WAAW,QAAQ,EACnB6B,QAAQ,YAAY,EAEpBmI,SAAS,IAAI,CACX,MAAMuH,eACJ/F,SACA2I,MAAM,WAAW,EACjBpK,QACA/J,WAAW,IAAI,CAAC,WAAW,EAC3B;QACEsQ;QACA,GAAI6D,MAAM,UAAU,GAAG;YAAE,OAAO;gBAACA,MAAM,UAAU;aAAC;QAAC,IAAI,CAAC,CAAC;IAC3D;IAGN,IAAI7D,UAAU,OAAO,EAAE,QAAQ;QAC7B,MAAMgC,mBAAmB,IAAI3O,IAC3BqG,SAAS,OAAO,CAAC,CAACwB,UAAYA,QAAQ,gBAAgB,IAAI,EAAE;QAE9D,MAAMzD,UAAUuI,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC9F,KAAO,CAAC8H,iBAAiB,GAAG,CAAC9H;QACrE,IAAIzC,SAAS,MAAM,IAAIpG,MAAM,CAAC,0BAA0B,EAAEoG,SAAS;IACrE;IACA,IACGuI,AAAAA,CAAAA,UAAU,KAAK,EAAE,UAChBA,UAAU,OAAO,EAAE,UACnBA,UAAU,IAAI,EAAE,SAAS,UACzBA,UAAU,IAAI,EAAE,SAAS,MAAK,KAChCtG,SAAS,KAAK,CACZ,CAACwB,UACCA,AAA8B,MAA9BA,QAAQ,iBAAiB,IACzBA,AAAoC,MAApCA,QAAQ,gBAAgB,CAAC,MAAM,GAGnC,MAAM,IAAI7J,MAAM;IAElB,MAAM4S,oBAAoBvK,SAAS,IAAI,CAAC,CAACwB,UACvCA,QAAQ,gBAAgB,CAAC,IAAI,CAC3B,CAAC,EAAEnD,KAAK,EAAE,GAAKA,iBAAiBZ;IAGpC,OAAO;QACLwM;QACAC;QACA,aAAaC,MAAM,WAAW;QAC9B,GAAItF,aAAa;YAAEA;QAAW,IAAI,CAAC,CAAC;QACpCuF;QACArK;QACAkB;QACAoJ;QACArU;QACAgK;QAGA,gBAAgBuK,oBAAoB,QAAQ;QAC5C,eAAe;QACf,cAAc,EAAE;QAChB,YAAY1S,QAAQ,UAAU,IAAM,MAAM;IAC5C;AACF;;;;AC/IA,MAAMmE,uBAAO,CAACzF,QACZA,MACG,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,KAAK,QAChB,UAAU,CAAC,KAAK,QAChB,UAAU,CAAC,KAAK,UAChB,UAAU,CAAC,KAAK,UAChB,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,KAAK,SAChB,UAAU,CAAC,MAAM,SACjB,OAAO,CAAC,YAAY;AAEzB,MAAMiU,WAAW,CAACC;IAChB,MAAMC,UAAUC,KAAK,KAAK,CAACF,KAAK;IAChC,OAAOC,UAAU,KACb,GAAGA,QAAQ,CAAC,CAAC,GACb,GAAGC,KAAK,KAAK,CAACD,UAAU,IAAI,EAAE,EAAEA,UAAU,GAAG,CAAC,CAAC;AACrD;AACA,MAAME,OAAO,CAACC,MAAc3J,SAC1BC,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASxB,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQkL,OAAO3J,QAAQ,KAAK,CAACzC,mCAAAA,GAAGA,EAAE,GAAG,CAACqM,oBAAoB,IAAI,CAAC;AAQnE,SAASC,yBACdC,IAAuB,EACvBnT,UAAqC,CAAC,CAAC;IAEvC,MAAM,EAAEoT,OAAO,EAAE,GAAGD;IACpB,MAAMxR,UACJwR,AAAgB,cAAhBA,KAAK,MAAM,GACP,CAAC,IAAI,EAAEC,QAAQ,MAAM,CAAC,CAAC,EAAEA,QAAQ,KAAK,CAAC,SAAS,CAAC,GACjD,CAAC,IAAI,EAAEA,QAAQ,MAAM,CAAC,YAAY,EAAEA,QAAQ,MAAM,CAAC,UAAU,EAAEA,QAAQ,MAAM,CAAC,QAAQ,CAAC;IAC7F,MAAMC,QAAQ;QACZ;QACA;QACA,GAAG1R,QAAQ,GAAG,EAAEgR,SAASQ,KAAK,UAAU,GAAG;QAC3C;KACD;IACD,IAAIC,QAAQ,QAAQ,EAAEC,MAAM,IAAI,CAAC,CAAC,cAAc,EAAED,QAAQ,QAAQ,EAAE,EAAE;IACtE,MAAME,iBAAiB;QACrBF,QAAQ,gBAAgB,GACpB,GAAGA,QAAQ,gBAAgB,CAAC,kBAAkB,CAAC,GAC/C;QACJA,QAAQ,gBAAgB,GACpB,GAAGA,QAAQ,gBAAgB,CAAC,kBAAkB,CAAC,GAC/C;QACJA,QAAQ,eAAe,GACnB,GAAGA,QAAQ,eAAe,CAAC,iBAAiB,CAAC,GAC7C;KACL,CAAC,MAAM,CAACG;IACT,IAAID,eAAe,MAAM,EACvBD,MAAM,IAAI,CAAC,CAAC,oBAAoB,EAAEC,eAAe,IAAI,CAAC,QAAQ,EAAE;IAClE,MAAME,SAA6C,EAAE;IACrD,MAAMC,SAAmB,EAAE;IAC3B,MAAMC,cAAc,CAAC1N,OAAenE;QAClC,KAAK,MAAMf,QAAQe,MACjB,IAAIf,AAAgB,aAAhBA,KAAK,MAAM,EACb2S,OAAO,IAAI,CACT,GAAGzN,MAAM,GAAG,EAAElF,KAAK,IAAI,CAAC,EAAE,EAAEA,KAAK,KAAK,EAAE,WAAW,eAAe;IAG1E;IACA,KAAK,MAAM6I,WAAWwJ,KAAK,QAAQ,CAAE;QACnC,IAAIxJ,QAAQ,SAAS,EAAE,YACrB8J,OAAO,IAAI,CAAC,GAAG9J,QAAQ,IAAI,CAAC,EAAE,EAAEA,QAAQ,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE;QACxE,KAAK,MAAMnD,SAASmD,QAAQ,SAAS,EAAE,kBAAkB,EAAE,CACzD8J,OAAO,IAAI,CAAC,GAAG9J,QAAQ,IAAI,CAAC,EAAE,EAAEnD,MAAM,OAAO,EAAE;QACjD,KAAK,MAAMA,SAASmD,QAAQ,gBAAgB,CAC1C8J,OAAO,IAAI,CACT,GAAG9J,QAAQ,IAAI,CAAC,GAAG,EAAEnD,MAAM,UAAU,CAAC,EAAE,EAAEA,MAAM,KAAK,CAAC,OAAO,EAAE;QAEnE,KAAK,MAAMpE,YAAYuH,QAAQ,SAAS,CAAE;YACxC,MAAM/E,OAAOxC,SAAS,UAAU,CAC7B,OAAO,CAAC,OAAO,KACf,OAAO,CAAC,mBAAmB;YAC9B,MAAMuR,QAAQ;gBACZ,MAAMR,KAAK,QAAQ,CAAC,MAAM,GAAG,IAAI,GAAGxJ,QAAQ,IAAI,CAAC,GAAG,EAAE/E,MAAM,GAAGA;gBAC/D,MAAM,EAAE;YACV;YACA4O,OAAO,IAAI,CAACG;YACZD,YAAY,GAAG/J,QAAQ,IAAI,CAAC,GAAG,EAAEvH,SAAS,UAAU,EAAE,EAAE;mBACnDA,SAAS,SAAS;mBAClBA,SAAS,QAAQ;aACrB;YACD,KAAK,MAAMoE,SAASpE,SAAS,cAAc,IAAI,EAAE,CAC/CqR,OAAO,IAAI,CAAC,GAAGrR,SAAS,UAAU,CAAC,EAAE,EAAEoE,MAAM,OAAO,EAAE;YACxD,KAAK,MAAMoN,WAAWxR,SAAS,UAAU,IAAI,EAAE,CAC7CqR,OAAO,IAAI,CACT,GAAGrR,SAAS,UAAU,CAAC,GAAG,EAAEwR,QAAQ,KAAK,CAAC,EAAE,EAAEA,QAAQ,KAAK,CAAC,OAAO,EAAE;YAEzE,KAAK,MAAMC,YAAYzR,SAAS,KAAK,CACnCuR,MAAM,IAAI,CAAC,IAAI,CACb,CAAC,IAAI,EAAEE,AAAoB,cAApBA,SAAS,MAAM,GAAiB,MAAMA,AAAoB,cAApBA,SAAS,MAAM,GAAiB,OAAO,IAAI,CAAC,EAAE1P,qBAAK0P,SAAS,IAAI,GAAG;QAGtH;IACF;IACA,KAAK,MAAMC,cAAcX,KAAK,WAAW,IAAI,EAAE,CAC7C,IAAIW,AAAqB,YAArBA,WAAW,KAAK,EAAcL,OAAO,IAAI,CAACK,WAAW,OAAO;IAElE,IAAIL,OAAO,MAAM,EACfJ,MAAM,IAAI,CACR,wBACA,OACGI,OAAO,GAAG,CAAC,CAACjN,QAAU,CAAC,EAAE,EAAErC,qBAAKqC,QAAQ,GAC3C;IAEJ,KAAK,MAAMmN,SAASH,OAClB,IAAIG,MAAM,IAAI,CAAC,MAAM,EAAEN,MAAM,IAAI,CAAC,CAAC,EAAE,EAAElP,qBAAKwP,MAAM,IAAI,GAAG,KAAKA,MAAM,IAAI;IAE1E,IAAI,CAACH,OAAO,IAAI,CAAC,CAACG,QAAUA,MAAM,IAAI,CAAC,MAAM,GAC3CN,MAAM,IAAI,CAAC;IACb,IAAIrT,QAAQ,UAAU,EACpBqT,MAAM,IAAI,CACR,IACA,CAAC,mCAAmC,EAAErT,QAAQ,UAAU,CAAC,EAAE,CAAC;IAEhE,OAAO,GAAGqT,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;AAChC;AAEA,MAAMU,aAAa,IAAiC;QAClD,SAAS,EAAE;QACX,SAAS;YACP,gBAAgB;YAChB,aAAa;YACb,cAAc;YACd,mBAAmB;YACnB,kBAAkB;YAClB,aAAa;QACf;IACF;AAGO,eAAeC,wBACpB1S,MAA4B,EAC5BS,QAAkCgS,YAAY;IAE9C,MAAME,SAAS7L,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQxG,OAAO,WAAW,GAAG;IACjD,MAAM6R,OAAOe,AAAAA,IAAAA,4BAAAA,sBAAAA,AAAAA,EAAuB5S,QAAQS;IAC5C,MAAMgG,AAAAA,IAAAA,yBAAAA,SAAAA,AAAAA,EACJkM,QACAf,yBAAyBC,MAAM;QAC7B,GAAI7R,OAAO,UAAU,GACjB;YAAE,YAAYyR,KAAKkB,QAAQ3S,OAAO,UAAU;QAAE,IAC9C,CAAC,CAAC;IACR;IAEF,OAAO2S;AACT;ACzIO,MAAME,WAAW,CACtB3L,YACA4L,eACA7O,aACA8O,SAC8B;QAC9B7L;QACA,QAAQ4L,cAAc,MAAM;QAC5B7O;QACA,MAAM6O,cAAc,UAAU,CAAC,IAAI;QACnC,YAAYA,cAAc,UAAU;QACpC,WAAWA,cAAc,SAAS;QAClC,QAAQ;QACR,cAAcC;IAChB;AAEO,MAAMC,aAAa,CAACC;IACzB,MAAMC,WAAWD,AAAe,WAAfA,KAAK,KAAK,GAAcA,KAAK,IAAI,GAAGA,KAAK,QAAQ;IAClE,MAAMzN,QAAQ0N,AAAmB,YAAnBA,SAAS,KAAK,GAAe,SAASA,SAAS,KAAK;IAClE,OAAO,GAAG1N,MAAM,CAAC,EAAE0N,SAAS,SAAS,GAAG,EAAE,CAAC,EAAED,KAAK,SAAS,CAAC,EAAE,EAAEA,KAAK,IAAI,EAAE;AAC7E;AAEO,MAAME,mBAAmB,CAC9BF,MACAjT,QACAoT,SAAS,EAAE;IAEX,IAAIpT,AAAkB,cAAlBA,OAAO,MAAM,EACf,OAAO,GAAGoT,OAAO,EAAE,EAAEJ,WAAWC,MAAM,WAAW,EAAEjT,OAAO,YAAY,CAAC,CAAC,CAAC;IAC3E,MAAMqT,SAASrT,AAAkB,cAAlBA,OAAO,MAAM,GAAiB,MAAM;IACnD,MAAMkF,QAAQlF,OAAO,KAAK,GAAG,CAAC,GAAG,EAAEA,OAAO,KAAK,CAAC,OAAO,EAAE,GAAG;IAC5D,MAAMsT,eAAetT,OAAO,mBAAmB,GAAG,iBAAiB;IACnE,OAAO,GAAGoT,SAASC,OAAO,CAAC,EAAEL,WAAWC,MAAM,EAAE,EAAEjT,OAAO,UAAU,CAAC,IAAI,EAAEkF,QAAQoO,cAAc;AAClG;AAEO,MAAMC,aAAa,CACxBC,OACAnM,KACQ;WAAI,IAAIwH,IAAI2E,MAAM,GAAG,CAAC,CAACzM,OAAS;gBAACM,GAAGN;gBAAOA;aAAK,GAAG,MAAM;KAAG;AAE/D,MAAM0M,qBAAqB,CAChCC,UACA3N,OACAyJ,WACAzO;IAEA,MAAM,EAAEsH,OAAO,EAAE,GAAGqL;IACpB,MAAMC,gBACJD,SAAS,gBAAgB,CAAC,MAAM,GAAG,KACnCH,WAAWxN,OAAO,CAACgB,OAASA,KAAK,MAAM,EAAE,IAAI,CAC3C,CAACA,OACCA,AAAgB,cAAhBA,KAAK,MAAM,IACXA,KAAK,SAAS,EAAE,WAAW,WAAW,aAE1CwM,WAAW/D,WAAW,CAACzI,OAASA,KAAK,UAAU,EAAE,IAAI,CACnD,CAACA,OAASA,AAAgB,aAAhBA,KAAK,MAAM,KAEvBhG,WAAW,WAAW;IACxB,OAAO;QACL,WAAWsH,QAAQ,SAAS;QAC5B,MAAMA,QAAQ,IAAI;QAClB,GAAIqL,SAAS,QAAQ,GAAG;YAAE,UAAUA,SAAS,QAAQ;QAAC,IAAI,CAAC,CAAC;QAC5D,QAAQC,gBAAgB,WAAW;QACnC,OAAOtL,QAAQ,KAAK;QACpB,eAAeqL,SAAS,aAAa;QACrC,cAAcrL,QAAQ,IAAI;QAC1B,aAAaqL,SAAS,OAAO,CAAC,MAAM;QACpC,mBAAmBA,SAAS,iBAAiB;QAC7C,mBAAmBA,SAAS,iBAAiB;QAC7C,GAAI3S,YAAY;YAAEA;QAAU,IAAI,CAAC,CAAC;QAClCgF;QACA,OAAO2N,SAAS,KAAK;QACrBlE;QACA,kBAAkBkE,SAAS,gBAAgB;IAC7C;AACF;AChGO,SAASE,sBAAsBC,SAAiB;IACrD,MAAMvH,QAAQ,IAAIuC;IAClB,MAAMC,UAAU,IAAID;IACpB,OAAO;QAGL,mBAAkBnN,MAA4B;YAC5C,IAAI,CAACA,OAAO,QAAQ,EAAE;gBACpB,MAAMb,YAAY,IAAI,CAAC,WAAW,CAACa,OAAO,UAAU;gBACpDoN,QAAQ,GAAG,CAACjO,WAAW;oBACrB,YAAY,IAAI,CAAC,OAAO,CAACA;oBACzB,YAAYa,OAAO,UAAU;gBAC/B;gBACA,OAAOb;YACT;YACA,MAAMgR,OAAOiC,AAAAA,IAAAA,iCAAAA,YAAAA,AAAAA,EAAapS,OAAO,QAAQ;YACzC,MAAMb,YAAYwP,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA;YAClB,MAAM0D,cAAcjN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAK+M,WAAW,WAAWhT;YAC/CsQ,IAAAA,iCAAAA,SAAAA,AAAAA,EAAU4C,aAAa;gBAAE,WAAW;YAAK;YACzC,MAAMC,WAAWlN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKiN,aAAa;YACnCE,IAAAA,iCAAAA,MAAAA,AAAAA,EAAOpC,MAAMmC;YACb,MAAME,cAAcpN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQqL,OAAO;YACxC,IAAInF,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAWwH,cACbD,AAAAA,IAAAA,iCAAAA,MAAAA,AAAAA,EAAOC,aAAapN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKiN,aAAa,gBAAgB;gBACpD,WAAW;gBACX,aAAa;YACf;YACF,MAAM7S,aAAa4F,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKiN,aAAa;YACrCjF,QAAQ,GAAG,CAACjO,WAAW;gBACrBK;gBACA8S;gBACA,YAAYtS,OAAO,UAAU;YAC/B;YACA4K,MAAM,GAAG,CAACzL,WAAWK;YACrB,OAAOL;QACT;QACA,eAAcA,SAAiB;YAC7B,OAAOiO,QAAQ,GAAG,CAACjO;QACrB;QACA,aAAYK,UAAkB;YAC5B,MAAMQ,SAASoS,AAAAA,IAAAA,iCAAAA,YAAAA,AAAAA,EAAa5S;YAC5B,MAAMiT,QAAQxH,AAAAA,IAAAA,iCAAAA,QAAAA,AAAAA,EAASjL,QAAQ,WAAW,KACtCoF,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKpF,QAAQ,gBACbA;YACJ,IAAI,CAACiL,AAAAA,IAAAA,iCAAAA,QAAAA,AAAAA,EAASwH,OAAO,MAAM,IACzB,MAAM,IAAI5V,kBACR,CAAC,gDAAgD,EAAE2C,YAAY,EAC/D;gBAAE,MAAM;YAAS;YAGrB,MAAML,YAAYwP,AAAAA,IAAAA,qCAAAA,UAAAA,AAAAA;YAClB,MAAM0D,cAAcjN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAK+M,WAAW,WAAWhT;YAC/CsQ,IAAAA,iCAAAA,SAAAA,AAAAA,EAAU4C,aAAa;gBAAE,WAAW;YAAK;YAEzC,MAAMK,oBAAoBC,AAAoB,iBAApBA,AAAAA,IAAAA,mCAAAA,QAAAA,AAAAA,EAASF;YACnC,MAAMG,aAAaxN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EACjBiN,aACAK,oBAAoB,eAAe;YAErCH,IAAAA,iCAAAA,MAAAA,AAAAA,EACEG,oBAAoB5N,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQ2N,SAASA,OACrCC,oBAAoBL,cAAcO,YAClC;gBACE,WAAWF;gBACX,aAAa;YACf;YAEF,IAAI,CAACA,mBAAmB;gBACtB,MAAMF,cAAcpN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQ2N,QAAQ;gBACzC,IAAIzH,AAAAA,IAAAA,iCAAAA,UAAAA,AAAAA,EAAWwH,cACbD,AAAAA,IAAAA,iCAAAA,MAAAA,AAAAA,EAAOC,aAAapN,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKiN,aAAa,gBAAgB;oBACpD,WAAW;oBACX,aAAa;gBACf;YACJ;YACAzH,MAAM,GAAG,CAACzL,WAAWyT;YACrB,OAAOzT;QACT;QACA,SAAQA,SAAiB;YACvB,MAAMyT,aAAahI,MAAM,GAAG,CAACzL;YAC7B,IAAI,CAACyT,YACH,MAAM,IAAI/V,kBACR,CAAC,2CAA2C,EAAEsC,UAAU,CAAC,CAAC,EAC1D;gBAAE,MAAM;YAAS;YAGrB,OAAOyT;QACT;IACF;AACF;ACjFO,eAAeC,YACpB7V,OAA6C;IAE7C,IACE,CAAClB,OAAO,SAAS,CAACkB,QAAQ,cAAc,KACxCA,QAAQ,cAAc,IAAI,GAE1B,MAAM,IAAI0B,UACR;IAIJ,MAAMoU,UAAU9V,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC+V,GAAGhU,QAAUA;IAChD,MAAMiU,UAAsC,IAAIvQ,MAAMzF,QAAQ,KAAK,CAAC,MAAM;IAC1E,MAAMiW,kBAAkB,IAAInU;IAC5B,IAAIoU,SAAS;IACb,IAAIC;IACJ,IAAIC,WAAW;IAEf,OAAO,MAAM,IAAIC,QAAQ,CAACpJ,SAASqJ;QACjC,IAAIC,UAAU;QACd,MAAMC,gBAAgB,IACpBJ,YACApW,QAAQ,MAAM,EAAE,YAAY,QAC5BA,QAAQ,UAAU,SAAS;QAC7B,MAAMyW,SAAS;YACb,IAAIF,SAAS;YACbA,UAAU;YACVvW,QAAQ,MAAM,EAAE,oBAAoB,SAAS0W;YAC7C,IAAIN,UAAUE,OAAOH;iBAChBlJ,QAAQ+I;QACf;QACA,MAAMW,UAAU,CAACnP;YACf,KAAK,MAAMC,YAAYD,UAAWyO,gBAAgB,MAAM,CAACxO;QAC3D;QACA,MAAMmP,gBAAgB;YACpB,MAAMC,eAAef,QAAQ,SAAS,CAAC,CAACgB,YACtC9W,QAAQ,KAAK,CAAC8W,UAAU,CAAC,SAAS,CAAC,KAAK,CACtC,CAACrP,WAAa,CAACwO,gBAAgB,GAAG,CAACxO;YAGvC,IAAIoP,eAAe,GAAG;YACtB,MAAM,CAACC,UAAU,GAAGhB,QAAQ,MAAM,CAACe,cAAc;YACjD,OAAOC;QACT;QACA,SAASJ;YACP,IAAIH,SAAS;YACb,MAAOL,SAASlW,QAAQ,cAAc,IAAI,CAACwW,gBAAiB;gBAC1D,MAAMM,YAAYF;gBAClB,IAAIE,AAAcvV,WAAduV,WAAyB;gBAC7B,MAAM3V,OAAOnB,QAAQ,KAAK,CAAC8W,UAAU;gBACrC,KAAK,MAAMrP,YAAYtG,KAAK,SAAS,CAAE8U,gBAAgB,GAAG,CAACxO;gBAC3DyO,UAAU;gBACVG,QAAQ,OAAO,GACZ,IAAI,CAAC,IAAMrW,QAAQ,GAAG,CAACmB,MAAM2V,YAC7B,IAAI,CAAC,CAACxV;oBACL0U,OAAO,CAACc,UAAU,GAAGxV;gBACvB,GACC,KAAK,CAAC,CAACkF;oBACN,IAAI,CAAC4P,UAAU;wBACbA,WAAW;wBACXD,aAAa3P;oBACf;gBACF,GACC,OAAO,CAAC;oBACPmQ,QAAQxV,KAAK,SAAS;oBACtB+U,UAAU;oBACVQ;gBACF;YACJ;YAEA,IAAIR,AAAW,MAAXA,UAAiBJ,CAAAA,AAAmB,MAAnBA,QAAQ,MAAM,IAAUU,eAAc,GAAIC;QACjE;QAEAzW,QAAQ,MAAM,EAAE,iBAAiB,SAAS0W,MAAM;YAAE,MAAM;QAAK;QAC7DA;IACF;AACF;ACCA,MAAMK,qBAAqB,CACzB3U,UACAgS,gBACW,GAAGhS,SAAS,UAAU,CAAC,MAAM,EAAEgS,cAAc,SAAS,EAAE;AAErE,MAAM4C,mBAAmB,CACvB7O,WAEAA,SAAS,OAAO,CAAC,CAAC6M,UAAUiC,eAC1BjC,SAAS,SAAS,CAAC,OAAO,CAAC,CAAC5S,WAC1BA,SAAS,KAAK,CAAC,GAAG,CAAC,CAACgS;gBAClB,MAAM5L,aAAauO,mBAAmB3U,UAAUgS;gBAChD,OAAO;oBACL6C;oBACAjC;oBACA5S;oBACAgS;oBACA,MAAM/V,OAAO,MAAM,CAAC;wBAClB,QAAQ,GAAG2W,SAAS,OAAO,CAAC,SAAS,CAAC,CAAC,EAAEZ,cAAc,MAAM,EAAE;wBAC/D,WAAWY,SAAS,OAAO,CAAC,SAAS;wBACrC,aAAaA,SAAS,OAAO,CAAC,IAAI;wBAClCxM;wBACA,YAAY4L,cAAc,UAAU;wBACpC,QAAQA,cAAc,MAAM;wBAC5B,UAAUA,cAAc,UAAU,CAAC,IAAI;wBACvC,WAAWA,cAAc,SAAS;wBAClC,MAAM/V,OAAO,MAAM,CAAC;+BAAK+V,cAAc,UAAU,CAAC,IAAI,IAAI,EAAE;yBAAE;wBAC9D,WAAW/V,OAAO,MAAM,CAAC;+BACnB+V,cAAc,UAAU,CAAC,SAAS,IAAI,EAAE;yBAC7C;wBACD,OAAOY,SAAS,OAAO,CAAC,KAAK;oBAC/B;gBACF;YACF;AAIN,MAAMkC,cAAc,CAAC1Q;IACnB,MAAM2Q,UAAU,IAAIhI,4BAAAA,aAAaA,CAAC3I,MAAM,OAAO,EAAE;QAC/C,MAAMA,MAAM,IAAI;QAChB,SAASA,MAAM,OAAO;QACtB,OAAOA,MAAM,KAAK;IACpB;IACA2Q,QAAQ,IAAI,GAAG3Q,MAAM,IAAI;IACzB,OAAO2Q;AACT;AAEA,MAAMC,aAAa,CAACtW;IAClB,MAAM,EAAE0F,KAAK,EAAEyN,MAAM,EAAEoD,MAAM,EAAE,GAAGC,MAAM,GAAGxW;IAC3C,OAAO;QACL,GAAGwW,IAAI;QACP,OAAOxW,KAAK,KAAK;QACjB,MAAM;YAAE,GAAGA,KAAK,IAAI;QAAC;QACrB,GAAImT,SAAS;YAAE,QAAQ;gBAAE,GAAGA,MAAM;YAAC;QAAE,IAAI,CAAC,CAAC;QAC3C,GAAIzN,QAAQ;YAAE,OAAO0Q,YAAY1Q;QAAO,IAAI,CAAC,CAAC;QAC9C,GAAI6Q,SACA;YACE,QAAQ;gBACN,QAAQA,OAAO,MAAM,CAAC,GAAG,CAAC,CAACE,QAAW;wBAAE,GAAGA,KAAK;oBAAC;gBACjD,GAAIF,OAAO,gBAAgB,GACvB;oBAAE,kBAAkBA,OAAO,gBAAgB,CAAC,GAAG,CAACH;gBAAa,IAC7D,CAAC,CAAC;YACR;QACF,IACA,CAAC,CAAC;IACR;AACF;AAEA,MAAMM,gBAAgB,CAACpW;IACrB,MAAM,EACJqW,eAAe,EACfC,cAAc,EACdxV,UAAU,EACVyV,UAAU,EACV9V,KAAK,EACL+V,SAAS,EACT,GAAGN,MACJ,GAAGlW;IACJ,OAAO;QACL,GAAGkW,IAAI;QACP,YAAYK,WAAW,GAAG,CAACP;QAC3B,OAAOvV,MAAM,GAAG,CAACuV;QACjB,WAAWQ,UAAU,GAAG,CAACR;QACzB,GAAIK,kBACA;YAAE,iBAAiBA,gBAAgB,GAAG,CAACP;QAAa,IACpD,CAAC,CAAC;QACN,GAAIQ,iBACA;YAAE,gBAAgBA,eAAe,GAAG,CAACR;QAAa,IAClD,CAAC,CAAC;IACR;AACF;AAEA,MAAMW,iBAAiB,CACrBzV;IAEA,MAAM,EACJqV,eAAe,EACfC,cAAc,EACdxV,UAAU,EACV4V,SAAS,EACTC,QAAQ,EACRC,UAAU,EACV,GAAGV,MACJ,GAAGlV;IACJ,OAAO;QACL,GAAGkV,IAAI;QACP,GAAIU,aACA;YAAE,YAAYA,WAAW,GAAG,CAAC,CAACxR,QAAW;oBAAE,GAAGA,KAAK;gBAAC;QAAI,IACxD,CAAC,CAAC;QACN,WAAWsR,UAAU,GAAG,CAACV;QACzB,UAAUW,SAAS,GAAG,CAACX;QACvB,GAAIK,kBACA;YAAE,iBAAiBA,gBAAgB,GAAG,CAACP;QAAa,IACpD,CAAC,CAAC;QACN,GAAIQ,iBACA;YAAE,gBAAgBA,eAAe,GAAG,CAACR;QAAa,IAClD,CAAC,CAAC;IACR;AACF;AAEA,MAAMe,kBAAkB,CACtB5V;IAEA,MAAM,EAAE6V,UAAU,EAAER,cAAc,EAAE,GAAGJ,MAAM,GAAGjV;IAChD,OAAO;QACL,GAAGiV,IAAI;QACP,GAAIY,aAAa;YAAE,YAAYhB,YAAYgB;QAAY,IAAI,CAAC,CAAC;QAC7D,GAAIR,iBACA;YAAE,gBAAgBA,eAAe,GAAG,CAACR;QAAa,IAClD,CAAC,CAAC;IACR;AACF;AAEA,MAAMiB,oBAAoB,CACxB7W,QAKA8W,mBACAC;IAEA,MAAMC,mBAAmB,CACvBC,QACG;eACCA,AAAAA,CAAAA,MAAM,aAAa,IAAI,EAAC,EAAG,GAAG,CAACF;eAC/BE,AAAAA,CAAAA,MAAM,WAAW,IAAI,EAAC,EACvB,MAAM,CACL,CAAC3Q,OACC,CAAC2Q,MAAM,aAAa,EAAE,KAAK,CAACvV,SAAWA,OAAO,UAAU,KAAK4E,OAEhE,GAAG,CAACwQ;SACR;IAGD,MAAMI,UAAU,CAAC1X;QACf,IAAI,CAACA,KAAK,MAAM,EAAE,OAAOA;QACzB,MAAM,EAAE,SAAS2X,QAAQ,EAAE,GAAGpB,QAAQ,GAAGvW,KAAK,MAAM;QACpD,OAAO;YAAE,GAAGA,IAAI;YAAEuW;QAAO;IAC3B;IACA,MAAMqB,aAAa,CAACtX;QAClB,MAAM,EAAEuX,WAAW,EAAEC,aAAa,EAAEC,aAAa,EAAE,GAAGC,kBAAkB,GACtE1X;QACF,MAAMc,aAAaoW,iBAAiBlX;QACpC,OAAO;YACL,GAAG0X,gBAAgB;YACnB,YAAY1X,QAAQ,UAAU,CAAC,GAAG,CAACoX;YACnC,OAAOpX,QAAQ,KAAK,CAAC,GAAG,CAACoX;YACzB,WAAWpX,QAAQ,SAAS,CAAC,GAAG,CAACoX;YACjC,GAAItW,WAAW,MAAM,GAAG;gBAAEA;YAAW,IAAI,CAAC,CAAC;QAC7C;IACF;IACA,MAAMN,WAAWN,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAIoX;IAC3C,MAAMK,MAAMnX,UAAU,GAAG;IACzB,MAAM,EAAE,KAAKoX,IAAI,EAAE,UAAUC,SAAS,EAAE,GAAGC,eAAe,GAAG5X,OAAO,IAAI;IACxE,MAAMc,WAAWd,OAAO,QAAQ,GAC3B,AAAC;QACA,MAAM,EACJqX,WAAW,EACXC,aAAa,EACbC,aAAa,EACb,GAAGM,mBACJ,GAAG7X,OAAO,QAAQ;QACnB,MAAMY,aAAaoW,iBAAiBhX,OAAO,QAAQ;QACnD,OAAO;YACL,GAAG6X,iBAAiB;YACpB,GAAI7X,OAAO,QAAQ,CAAC,UAAU,GAC1B;gBACE,YAAYA,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CACxC,CAAC,EAAEwF,KAAK,EAAEN,KAAK,EAAE,GAAM;wBACrBM;wBACA,OAAO0C,AAAAA,IAAAA,4BAAAA,mBAAAA,AAAAA,EAAoBhD;oBAC7B;YAEJ,IACA,CAAC,CAAC;YACN,WAAWlF,OAAO,QAAQ,CAAC,SAAS,CAAC,GAAG,CAACkX;YACzC,UAAUlX,OAAO,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAACkX;YACvC,GAAItW,WAAW,MAAM,GAAG;gBAAEA;YAAW,IAAI,CAAC,CAAC;QAC7C;IACF,OACAX;IACJ,OAAOU,KAAK,KAAK,CACfA,KAAK,SAAS,CAAC;QACb,MAAM;YACJ,GAAGiX,aAAa;YAChB,GAAIH,MAAM;gBAAEA;YAAI,IAAI,CAAC,CAAC;YACtB,GAAInX,WAAW;gBAAEA;YAAS,IAAI,CAAC,CAAC;QAClC;QACA,GAAIQ,WAAW;YAAEA;QAAS,IAAI,CAAC,CAAC;QAChC,GAAId,OAAO,SAAS,GAAG;YAAE,WAAWA,OAAO,SAAS;QAAC,IAAI,CAAC,CAAC;IAC7D;AAEJ;AAEA,MAAM8X,sBAAsB,CAC1B9X,QACA+X,wBACAC;IAMA,MAAMC,iBAAiB,CAACC;QACtB,MAAMb,cAAwB,EAAE;QAChC,MAAMC,gBAAwC,EAAE;QAChD,KAAK,MAAMa,OAAOD,QAAQ,EAAE,CAAE;YAC5B,MAAM5R,OAAOyR,uBAAuBI;YACpC,MAAMzW,SAASsW,cAAcG;YAC7B,IAAIzW,QAAQ4V,cAAc,IAAI,CAAC5V;iBAC1B2V,YAAY,IAAI,CAAC/Q;QACxB;QACA,OAAO;YACL,GAAI+Q,YAAY,MAAM,GAAG;gBAAEA;YAAY,IAAI,CAAC,CAAC;YAC7C,GAAIC,cAAc,MAAM,GAAG;gBAAEA;YAAc,IAAI,CAAC,CAAC;QACnD;IACF;IACA,MAAMhX,WAAWN,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAACF,UAAa;YACvD,GAAGoW,cAAcpW,QAAQ;YACzB,GAAGmY,eAAenY,QAAQ,UAAU,CAAC;QACvC;IACA,MAAM2X,MAAMnX,UAAU,GAAG;IACzB,MAAM,EAAE,KAAKoX,IAAI,EAAE,UAAUC,SAAS,EAAE,GAAGS,UAAU,GAAGpY,OAAO,IAAI;IACnE,OAAO;QACL,MAAM;YACJ,GAAGoY,QAAQ;YACX,GAAIX,MAAM;gBAAEA;YAAI,IAAI,CAAC,CAAC;YACtB,GAAInX,WAAW;gBAAEA;YAAS,IAAI,CAAC,CAAC;QAClC;QACA,GAAIN,OAAO,QAAQ,GACf;YACE,UAAU;gBACR,GAAGuW,eAAevW,OAAO,QAAQ,CAAC;gBAClC,GAAGiY,eAAejY,OAAO,QAAQ,CAAC,UAAU,CAAC;YAC/C;QACF,IACA,CAAC,CAAC;QACN,GAAIA,OAAO,SAAS,GAChB;YAAE,WAAW2W,gBAAgB3W,OAAO,SAAS;QAAE,IAC/C,CAAC,CAAC;IACR;AACF;AAEA,MAAMqY,eAAe,OACnBC,cACA5Z,SACA6Z,cACAzB,mBACAC;IAEA,MAAM,EAAErD,QAAQ,EAAE5S,QAAQ,EAAEgS,aAAa,EAAEjT,IAAI,EAAE,GAAGyY;IACpD,MAAM,EAAEjQ,OAAO,EAAE,GAAGqL;IACpB,MAAM8E,mBAA8C;QAClD,GAAG1X,QAAQ;QACX,YAAYjB,KAAK,UAAU;QAC3B,OAAO;YAACiT;SAAc;IACxB;IACA,MAAM2F,UAAUC,AAAAA,IAAAA,4BAAAA,oBAAAA,AAAAA,EAAqB;QACnCrQ;QACA,OAAOA,QAAQ,KAAK;QACpB,QAAQ3J,QAAQ,MAAM;IACxB;IACA,IAAIqC;IACJ,IAAI4X;IACJ,IAAIC;IAEJ,IAAI;QACF,MAAMH,QAAQ,KAAK;QACnB,IAAIA,QAAQ,MAAM,EAChBE,YAAY,MAAME,AAAAA,IAAAA,4BAAAA,mBAAAA,AAAAA,EAAoBL,kBAAkB;YACtD,aAAanQ,QAAQ,KAAK,CAAC,OAAO,CAAC,IAAI,CAACA,QAAQ,KAAK;YACrDA;YACA,gBAAgBoQ,QAAQ,OAAO;YAC/B,OAAOpQ,QAAQ,KAAK;YACpB,QAAQoQ,QAAQ,MAAM;YACtB,kBAAkB/Z,QAAQ,IAAI,CAAC,WAAW;YAC1C,YAAY,IAAMA,QAAQ,MAAM,CAAC,OAAO;YACxC,YAAY,IAAM;YAClB,cAAc,CAAC+Y,MACb;uBAAIA,IAAI,UAAU;uBAAKA,IAAI,KAAK;uBAAKA,IAAI,SAAS;iBAAC,CAAC,IAAI,CACtD,CAACjY,OAASA,KAAK,KAAK,IAAIsZ,AAAAA,IAAAA,4BAAAA,kBAAAA,AAAAA,EAAmBtZ,KAAK,KAAK,MACjDiY,AAAAA,CAAAA,IAAI,cAAc,IAAI,EAAC,EAAG,IAAI,CAACqB,4BAAAA,kBAAkBA;YACzD,aAAa,CAAC7F,OAASsF,aAAa,CAAC,EAAE,EAAEvF,WAAWC,OAAO;YAC3D,cAAc,CAACA,MAAMjT,SACnBuY,aAAapF,iBAAiBF,MAAMjT;YACtC,cAAc,CAACF,UACbyY,aACE,GAAGzY,AAAmB,cAAnBA,QAAQ,MAAM,GAAiB,MAAM,IAAI,SAAS,EAAEA,QAAQ,YAAY,GAAG,EAAE,CAAC,EAAEuI,QAAQ,KAAK,GAAG,EAAE,EAAE,EAAEvI,QAAQ,IAAI,CAAC,EAAE,EAAEA,QAAQ,UAAU,CAAC,IAAI,CAAC;QAExJ;IAEJ,EAAE,OAAOoF,OAAO;QACd0T,iBAAiB1T;QACjB,IAAIA,iBAAiB6T,4BAAAA,wBAAwBA,EAAEJ,YAAYzT,MAAM,MAAM;IACzE,SAAU;QACR,MAAM8T,SACJJ,AAAmB3Y,WAAnB2Y,kBACA,CAACH,QAAQ,MAAM,IACfE,WAAW,KAAK,CAAC,EAAE,EAAE,WAAW,aAChCA,WAAW,SAAS,WAAW;QACjC5X,YAAY,MAAM0X,QAAQ,MAAM,CAACO,SAAS,WAAW;IACvD;IAEA,IAAIJ,gBAAgB;QAClB,IAAI,CAACD,WAAW,MAAMC;QACtBla,QAAQ,qBAAqB,CAACka;IAChC;IACA,IAAI,CAACD,WACH,OAAO9B,kBACL;QACE,MAAMhE,SACJhT,KAAK,UAAU,EACfiT,eACAzK,QAAQ,IAAI,EACZ3J,QAAQ,MAAM,CAAC,OAAO,GAAG,gBAAgB;QAE3CqC;IACF,GACA+V,mBACAC;IAGJ,MAAM1W,UAAUsY,UAAU,KAAK,CAAC,EAAE;IAClC,IAAI,CAACtY,SACH,MAAM,IAAI7B,MAAM,CAAC,yCAAyC,EAAEqB,KAAK,MAAM,CAAC,CAAC,CAAC;IAE5E,OAAOgX,kBACL;QACE,MAAM;YAAE,GAAGxW,OAAO;YAAE,YAAYR,KAAK,UAAU;QAAC;QAChD,UAAU8Y,UAAU,QAAQ;QAC5B5X;IACF,GACA+V,mBACAC;AAEJ;AAEA,MAAMkC,cAAc,OAClBX,cACA9C,WACA0D,WACAxa,SACAya;IAEA,MAAM,EAAEzF,QAAQ,EAAE7T,IAAI,EAAE,GAAGyY;IAC3B,MAAMC,eAAe,CAAC9Z,UACpBC,QAAQ,QAAQ,CACd,CAAC,MAAM,EAAE8W,YAAY,EAAE,CAAC,EAAE0D,UAAU,EAAE,EAAErZ,KAAK,WAAW,CAAC,GAAG,EAAEA,KAAK,UAAU,CAAC,GAAG,EAAEA,KAAK,QAAQ,CAAC,EAAE,EAAEpB,SAAS;IAElH8Z,aAAa;IAEb,MAAM1E,YAAY/M,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAChBpI,QAAQ,MAAM,EACdmB,KAAK,SAAS,EACd,mBACAA,KAAK,UAAU,EACfA,KAAK,MAAM;IAEbsR,IAAAA,iCAAAA,SAAAA,AAAAA,EAAU0C,WAAW;QAAE,WAAW;IAAK;IACvC,MAAM,EACJ,aAAaiD,iBAAiB,EAC9BC,iBAAiB,EACjB,SAASgB,sBAAsB,EAC/BC,aAAa,EACd,GAAGpE,sBAAsBC;IAE1B,IAAIH,SAAS,gBAAgB,CAAC,MAAM,GAAG,GACrC,OAAO;QACL,MAAMb,SACJhT,KAAK,UAAU,EACfyY,aAAa,aAAa,EAC1BzY,KAAK,WAAW,EAChB;IAEJ;IAEF,MAAMf,WAAWJ,QAAQ,QAAQ,IAAIK;IACrC,IAAIiB;IACJ,IAAIoZ;IACJ,IAAIC,mBAAmB;IACvB,IACE,IAAIC,eAAe,GACnBA,gBAAgB5a,QAAQ,IAAI,CAAC,aAAa,EAC1C4a,gBAAgB,EAChB;QACAD,mBAAmBC,eAAe;QAClC,IAAI;YACFtZ,SAAS,MAAMlB,SAAS,OAAO,CAACe,MAAM;gBACpC,QAAQnB,QAAQ,MAAM;gBACtB,YAAY6Z;gBACZ1E;gBACAiD;gBACA,UAAU,IACRuB,aACEC,cACA5Z,SACA6Z,cACAzB,mBACAC;YAEN;YACAqC,kBAAkBnZ;YAClB;QACF,EAAE,OAAOiF,OAAO;YACd,IAAI,CAACvG,oBAAoBuG,QAAQ,MAAMA;YACvCkU,kBAAkBlU;YAClB,IACE,CAACA,MAAM,SAAS,IAChBoU,gBAAgB5a,QAAQ,IAAI,CAAC,aAAa,IAC1CA,QAAQ,MAAM,CAAC,OAAO,EAEtB;YAEF6Z,aACE,CAAC,eAAe,EAAEe,eAAe,EAAE,CAAC,EAAE5a,QAAQ,IAAI,CAAC,aAAa,CAAC,EAAE,EAAEwG,MAAM,OAAO,EAAE;QAExF;IACF;IACA,IAAI,CAAClF,QAAQ;QACX,IAAI,CAACoZ,iBACH,MAAM,IAAI5a,MAAM,CAAC,qCAAqC,EAAEqB,KAAK,MAAM,CAAC,CAAC,CAAC;QAExE0Y,aAAa,CAAC,iBAAiB,EAAEa,gBAAgB,OAAO,EAAE;QAC1D,OAAO;YACL,MAAM;gBACJ,GAAGvG,SACDhT,KAAK,UAAU,EACfyY,aAAa,aAAa,EAC1BzY,KAAK,WAAW,EAChB,kBACD;gBACD,WAAW;oBACT,UAAUf,SAAS,IAAI;oBACvB,WAAWe,KAAK,SAAS;oBACzB,UAAUwZ;oBACV,SAAS;wBACP,MAAMD,gBAAgB,IAAI;wBAC1B,SAASA,gBAAgB,OAAO;wBAChC,WAAWA,gBAAgB,SAAS;oBACtC;gBACF;YACF;QACF;IACF;IACAlZ,4BAA4BL,MAAMG;IAClC,MAAMuZ,iBAAiBzB,oBACrB9X,QACA+X,wBACAC;IAEF,MAAMwB,YAAY;QAChB,GAAGD,cAAc;QACjB,MAAM;YACJ,GAAGA,eAAe,IAAI;YACtB,WAAW;gBACT,UAAUza,SAAS,IAAI;gBACvB,WAAWe,KAAK,SAAS;gBACzB,UAAUwZ;gBACV,GAAIE,eAAe,SAAS,GACxB;oBAAE,WAAWA,eAAe,SAAS;gBAAC,IACtC,CAAC,CAAC;gBACN,GAAIvZ,OAAO,SAAS,GAAG;oBAAE,WAAWA,OAAO,SAAS;gBAAC,IAAI,CAAC,CAAC;gBAC3D,GAAIA,OAAO,QAAQ,GAAG;oBAAE,UAAUA,OAAO,QAAQ;gBAAC,IAAI,CAAC,CAAC;YAC1D;QACF;IACF;IACAmZ,YAAYK;IACZ,KAAK,MAAM1Z,WAAWyZ,eAAe,IAAI,CAAC,QAAQ,IAAI,EAAE,CACtD,MAAM9R,uBACJ/I,QAAQ,MAAM,EACdmB,KAAK,SAAS,EACdA,KAAK,UAAU,EACfC;IAGJ,IAAIyZ,eAAe,QAAQ,EACzB,MAAMjS,4BAA4B5I,QAAQ,MAAM,EAAE6a,eAAe,QAAQ;IAC3EhB,aAAagB,eAAe,IAAI,CAAC,MAAM;IACvC,OAAOC;AACT;AAEO,MAAMC,mBAAmB,OAC9B/a;IAEA,MAAMgb,QAAQhE,iBAAiBhX,QAAQ,QAAQ;IAC/C,IAAIib,kBAAkB;IACtB,MAAMC,cAAc,IAClBlb,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAKib,mBAAmBjb,QAAQ,IAAI,CAAC,IAAI;IAC/D,MAAMgW,UAAsD,IAAIvQ,MAC9DuV,MAAM,MAAM;IAEd,IAAIA,MAAM,MAAM,GAAG,GACjB,IAAI;QACF,MAAMnF,YAAY;YAChB,OAAOmF,MAAM,GAAG,CAAC,CAACpB,eAAiBA,aAAa,IAAI;YACpD,gBAAgB9G,KAAK,GAAG,CAAC9S,QAAQ,IAAI,CAAC,cAAc,EAAEgb,MAAM,MAAM;YAClE,QAAQhb,QAAQ,MAAM;YACtB,YAAYkb;YACZ,KAAK,OAAO5a,OAAOwW;gBACjB,IAAI;oBACF,MAAMxV,SAAS,MAAMiZ,YACnBS,KAAK,CAAClE,UAAU,EAChBA,WACAkE,MAAM,MAAM,EACZhb,SACA,CAAC8a;wBACC9E,OAAO,CAACc,UAAU,GAAGgE;oBACvB;oBAEF9E,OAAO,CAACc,UAAU,GAAGxV;oBACrB,IAAIA,AAAuB,aAAvBA,OAAO,IAAI,CAAC,MAAM,EAAe2Z,mBAAmB;oBACxD,OAAO3Z;gBACT,EAAE,OAAOkF,OAAO;oBACdxG,QAAQ,qBAAqB,CAACwG;oBAC9B,MAAMA;gBACR;YACF;QACF;IACF,EAAE,OAAOA,OAAO;QACdxG,QAAQ,qBAAqB,CAACwG;IAChC;IAGF,OAAOxG,QAAQ,QAAQ,CAAC,GAAG,CAAC,CAACgV,UAAUiC;QACrC,MAAMkE,eAAeH,MAClB,GAAG,CAAC,CAAC7Z,MAAM2V,YAAe;gBAAE3V;gBAAM,QAAQ6U,OAAO,CAACc,UAAU;YAAC,IAC7D,MAAM,CAAC,CAAC,EAAE3V,IAAI,EAAE,GAAKA,KAAK,YAAY,KAAK8V;QAC9C,MAAM5C,SAASW,SAAS,gBAAgB,CAAC,MAAM,GAC3C,6BACAhV,QAAQ,MAAM,CAAC,OAAO,GACpB,gBACAkb,gBACE,SACA3Z;QACR,MAAM8F,QAAQ8T,aAAa,GAAG,CAAC,CAAC,EAAEha,IAAI,EAAEG,MAAM,EAAE;YAC9C,IAAIA,QAAQ,OAAOA,OAAO,IAAI;YAC9B,IAAI,CAAC+S,QACH,MAAM,IAAIvU,MACR,CAAC,6CAA6C,EAAEqB,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAGxE,OAAOgT,SACLhT,KAAK,IAAI,CAAC,UAAU,EACpBA,KAAK,aAAa,EAClB6T,SAAS,OAAO,CAAC,IAAI,EACrBX;QAEJ;QACA,MAAMvD,YAAYqK,aAAa,OAAO,CAAC,CAAC,EAAE7Z,MAAM,EAAE,GAChDA,QAAQ,WAAW;gBAACA,OAAO,QAAQ;aAAC,GAAG,EAAE;QAE3C,OAAOyT,mBAAmBC,UAAU3N,OAAOyJ;IAC7C;AACF;AChnBA,MAAMsK,oBAAoB,CAACzZ,UACxBA,AAAAA,CAAAA,QAAQ,QAAQ,IAAI,EAAC,EAAG,IAAI,CAC3B,CAACP,UACC;eAAIA,QAAQ,UAAU;eAAKA,QAAQ,KAAK;eAAKA,QAAQ,SAAS;SAAC,CAAC,IAAI,CAClE,CAACN,OAASA,KAAK,KAAK,IAAIsZ,AAAAA,IAAAA,4BAAAA,kBAAAA,AAAAA,EAAmBtZ,KAAK,KAAK,MAEtDM,AAAAA,CAAAA,QAAQ,cAAc,IAAI,EAAC,EAAG,IAAI,CAACgZ,4BAAAA,kBAAkBA,KACtD,CAAC,CAAChZ,QAAQ,eAAe,EAAE,KAAKia,4BAAAA,uBAAuBA;AAG7D,MAAMC,wBAAwB,CAACha,SAC7B;WAAIA,OAAO,SAAS;WAAKA,OAAO,QAAQ;KAAC,CAAC,IAAI,CAC5C,CAACR,OAASA,KAAK,KAAK,IAAIsZ,AAAAA,IAAAA,4BAAAA,kBAAAA,AAAAA,EAAmBtZ,KAAK,KAAK,MAEtDQ,AAAAA,CAAAA,OAAO,cAAc,IAAI,EAAC,EAAG,IAAI,CAAC8Y,4BAAAA,kBAAkBA,KACrD,CAAC,CAAC9Y,OAAO,eAAe,EAAE,KAAK+Z,4BAAAA,uBAAuBA;AAGjD,eAAeE,0BACpBvb,OAAyC;IAEzC,MAAM,EAAE+Q,UAAU,EAAEpH,OAAO,EAAE6R,KAAK,EAAE,GAAGxb;IACvC,MAAM,EAAEoC,QAAQ,EAAE,GAAG2O;IACrB,MAAM0K,gBAAgB1K,AAA2B,eAA3BA,WAAW,KAAK,CAAC,KAAK;IAC5C,MAAMnP,WAA8C,EAAE;IAEtD,MAAM8Z,AAAAA,IAAAA,4BAAAA,mBAAAA,AAAAA,EACJ;QACE,OAAOD,gBAAgB1K,WAAW,KAAK,CAAC,KAAK,GAAG;QAChD,QAAQ/Q,QAAQ,MAAM;QACtB,YAAY,IAAMA,QAAQ,UAAU,MAAMA,QAAQ,cAAc;IAClE,GACA,OAAO2b;QACL,IAAIF,eACFzb,QAAQ,UAAU,CAChB,CAAC,iBAAiB,EAAE2b,uBAAuB,EAAE,CAAC,EAAE5K,WAAW,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE3O,SAAS,UAAU,EAAE;QAExG,MAAM6X,YAAY,MAAME,AAAAA,IAAAA,4BAAAA,mBAAAA,AAAAA,EAAoB/X,UAAU;YACpD,MAAM2O,WAAW,IAAI;YACrB,sBAAsB0K,gBAAgBE,uBAAuBpa;YAC7D,GAAGwP,WAAW,QAAQ;YACtBpH;YACA,gBAAgB3J,QAAQ,cAAc;YACtC,OAAOyb,gBAAgB,IAAI1K,WAAW,KAAK,CAAC,KAAK;YACjD,QAAQ/Q,QAAQ,MAAM;YACtB,kBAAkB+Q,WAAW,gBAAgB;YAC7C,YAAY,IACV/Q,QAAQ,UAAU,CAAC,OAAO,IAC1BA,QAAQ,UAAU,MAClBA,QAAQ,cAAc;YACxB,YAAY,IACVA,QAAQ,UAAU,CAAC,OAAO,GACtB,gBACAA,QAAQ,cAAc,KACpB,gBACA;YACR,cAAc,CAAC+Y,MACb;uBAAIA,IAAI,UAAU;uBAAKA,IAAI,KAAK;uBAAKA,IAAI,SAAS;iBAAC,CAAC,IAAI,CACtD,CAACjY,OAASA,KAAK,KAAK,IAAIsZ,AAAAA,IAAAA,4BAAAA,kBAAAA,AAAAA,EAAmBtZ,KAAK,KAAK,MACjDiY,AAAAA,CAAAA,IAAI,cAAc,IAAI,EAAC,EAAG,IAAI,CAACqB,4BAAAA,kBAAkBA;YACzD,aAAa,CAAChG;gBACZpU,QAAQ,UAAU,CAChB,CAAC,UAAU,EAAEoU,cAAc,SAAS,GAAG,EAAE,CAAC,EAAEhS,SAAS,KAAK,CAAC,MAAM,CAAC,EAAE,EAAEgS,cAAc,UAAU,CAAC,IAAI,EAAE;YAEzG;YACA,aAAa,CAACG;gBACZ,MAAMG,SAASH,AAAe,WAAfA,KAAK,KAAK,GAAc,WAAW;gBAClDvU,QAAQ,UAAU,CAAC,GAAG0U,OAAO,EAAE,EAAEJ,WAAWC,OAAO;YACrD;YACA,cAAc,OAAOA,MAAMjT;gBACzB,MAAMyP,WAAW,QAAQ,CAAC,YAAY,GAAGwD,MAAMjT;gBAC/CtB,QAAQ,UAAU,CAChByU,iBACEF,MACAjT,QACAiT,AAAe,WAAfA,KAAK,KAAK,GAAc,WAAW;YAGzC;YACA,cAAc,OAAOnT;gBACnB,MAAM2H,uBACJ/I,QAAQ,MAAM,EACd2J,QAAQ,SAAS,EACjBvH,SAAS,UAAU,EACnBhB;gBAEFpB,QAAQ,UAAU,CAChB,CAAC,IAAI,EAAEoB,AAAmB,cAAnBA,QAAQ,MAAM,GAAiB,MAAM,IAAI,SAAS,EAAEA,QAAQ,YAAY,GAAG,EAAE,CAAC,EAAEqa,gBAAgB,IAAI1K,WAAW,KAAK,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE3P,QAAQ,IAAI,CAAC,EAAE,EAAEA,QAAQ,UAAU,CAAC,IAAI,CAAC;YAEvL;YACA,eAAe,CAACO;gBACd,IAAIyZ,kBAAkBzZ,UAAU3B,QAAQ,gBAAgB;gBACxD,IAAI,CAACyb,iBAAiB9Z,AAAmB,aAAnBA,QAAQ,MAAM,EAClC3B,QAAQ,cAAc,CAAC;YAC3B;YACA,kBAAkBA,QAAQ,gBAAgB;QAC5C,GAAG,KAAK,CAAC,OAAOwG;YACd,IAAIA,iBAAiB6T,4BAAAA,wBAAwBA,EAAE;gBAC7C,MAAMuB,UAAUpV,MAAM,MAAM;gBAC5B,MAAMqV,eACJrV,MAAM,MAAM,CAAC,MAAM,GAAG,KACtBA,MAAM,MAAM,CAAC,KAAK,CAChB,CAACoN,UACCyH,AAAAA,IAAAA,4BAAAA,uBAAAA,AAAAA,EAAwBzH,YACxBgI,QAAQ,QAAQ,CAAC,UAAU,EAAE,KAC3B,CAACE,OACCA,AAAe,cAAfA,KAAK,KAAK,IACTA,CAAAA,KAAK,KAAK,KAAKlI,WACbkI,KAAK,KAAK,YAAYhc,SACrBgc,KAAK,KAAK,CAAC,KAAK,KAAKlI,OAAM;gBAKzC,IAAIiI,cAAc;oBAChB,IAAIrV,MAAM,MAAM,CAAC,IAAI,CAAC6U,4BAAAA,uBAAuBA,GAC3Crb,QAAQ,gBAAgB;oBAC1B,OAAO4b;gBACT;gBACA,IAAIH,eACFG,QAAQ,QAAQ,CAAC,aAAa,GAAGG,AAAAA,IAAAA,4BAAAA,WAAAA,AAAAA,EAAY;oBAC3C,OAAO;oBACP,YAAYhL,WAAW,KAAK,CAAC,KAAK;oBAClC,cAAc4K;oBACd,QAAQ;oBACR,qBAAqB;gBACvB;gBACF/Z,SAAS,IAAI,CAACga;gBACdJ,MAAM,SAAS,CAAC,IAAI,CAACI,QAAQ,QAAQ;gBACrCJ,MAAM,KAAK,CAAC,IAAI,IACXI,QAAQ,KAAK,CAAC,GAAG,CAAC,CAACja,UAAa;wBACjC,GAAGA,OAAO;wBACV,YAAYS,SAAS,UAAU;wBAC/B,eAAewZ,QAAQ,QAAQ,CAAC,aAAa;oBAC/C;gBAEF,IAAI;oBACF,KAAK,MAAMja,WAAWia,QAAQ,KAAK,CACjC,KAAK,MAAMxa,WAAWO,QAAQ,QAAQ,IAAI,EAAE,CAC1C,MAAMoH,uBACJ/I,QAAQ,MAAM,EACd2J,QAAQ,SAAS,EACjBvH,SAAS,UAAU,EACnBhB;oBAEN,MAAMwH,4BAA4B5I,QAAQ,MAAM,EAAE4b,QAAQ,QAAQ;gBACpE,EAAE,OAAOI,kBAAkB;oBACzB,MAAM,IAAI3B,4BAAAA,wBAAwBA,CAACuB,SAAS;2BACvCpV,MAAM,MAAM;wBACfwV;qBACD;gBACH;YACF;YACA,MAAMxV;QACR;QAEA,IAAI8U,sBAAsBrB,UAAU,QAAQ,GAAGja,QAAQ,gBAAgB;QACvE,MAAMic,SAAS;YACbhC,UAAU,QAAQ;eACfA,UAAU,KAAK,CAAC,OAAO,CAAC,CAACtY,UAAYA,QAAQ,QAAQ,IAAI,EAAE;SAC/D;QACD,MAAMua,iBAAiBD,OAAO,IAAI,CAChC,CAACE,QAAUA,MAAM,OAAO,EAAE,WAAW;QAEvC,MAAMC,mBAAmBH,OAAO,IAAI,CAClC,CAACE,QAAU,CAAC,CAACA,MAAM,iBAAiB,EAAE;QAExC,MAAME,gBAAgBJ,OAAO,IAAI,CAC/B,CAACE,QACCA,MAAM,OAAO,EAAE,WAAW,YAC1B,CAAC,CAACA,MAAM,cAAc,EAAE,UACvB,gBAAgBA,SACfA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAErV,KAAK,EAAE,GAAKA,AAAU,cAAVA;QAI5C,IAAIoV,kBAAkBG,iBAAiBD,kBACrCpc,QAAQ,gBAAgB;QAC1B,MAAMsa,SACJL,AAA8B,aAA9BA,UAAU,QAAQ,CAAC,MAAM,IACzBA,UAAU,KAAK,CAAC,IAAI,CAAC,CAAC5R,OAASA,AAAgB,cAAhBA,KAAK,MAAM;QAC5C,MAAMiU,WAAWP,AAAAA,IAAAA,4BAAAA,WAAAA,AAAAA,EAAY;YAC3B,OAAO;YACP,YAAYhL,WAAW,KAAK,CAAC,KAAK;YAClC,cAAc4K;YACd,QAAQrB,SAAS,WAAW;YAC5B4B;YACAG;YACAD;YACA,YAAYpc,QAAQ,cAAc;YAClC,aAAaA,QAAQ,MAAM,CAAC,OAAO,IAAIA,QAAQ,UAAU,CAAC,OAAO;YACjE,YAAYA,QAAQ,UAAU;QAChC;QACA,IAAIyb,eAAexB,UAAU,QAAQ,CAAC,aAAa,GAAGqC;QACtD1a,SAAS,IAAI,CAACqY;QACduB,MAAM,KAAK,CAAC,IAAI,IACXvB,UAAU,KAAK,CAAC,GAAG,CAAC,CAACtY,UAAa;gBACnC,GAAGA,OAAO;gBACV,YAAYS,SAAS,UAAU;gBAC/B,eAAe6X,UAAU,QAAQ,CAAC,aAAa;YACjD;QAEFuB,MAAM,SAAS,CAAC,IAAI,CAACvB,UAAU,QAAQ;QAGvC,IAAI;YACF,KAAK,MAAMtY,WAAWsY,UAAU,KAAK,CACnC,KAAK,MAAM7Y,WAAWO,QAAQ,QAAQ,IAAI,EAAE,CAC1C,MAAMoH,uBACJ/I,QAAQ,MAAM,EACd2J,QAAQ,SAAS,EACjBvH,SAAS,UAAU,EACnBhB;YAEN,MAAMwH,4BAA4B5I,QAAQ,MAAM,EAAEia,UAAU,QAAQ;QACtE,EAAE,OAAOzT,OAAO;YACdyT,UAAU,QAAQ,CAAC,MAAM,GAAG;YAC5BA,UAAU,QAAQ,CAAC,UAAU,GAAG;mBAC1BA,UAAU,QAAQ,CAAC,UAAU,IAAI,EAAE;gBACvC;oBAAE,OAAO;oBAAezT;gBAAM;aAC/B;YACD,IAAIiV,eACFxB,UAAU,QAAQ,CAAC,aAAa,GAAG8B,AAAAA,IAAAA,4BAAAA,WAAAA,AAAAA,EAAY;gBAC7C,OAAO;gBACP,YAAYhL,WAAW,KAAK,CAAC,KAAK;gBAClC,cAAc4K;gBACd,QAAQ;gBACR,qBAAqB;YACvB;YACF,MAAM,IAAItB,4BAAAA,wBAAwBA,CAACJ,WAAW;gBAACzT;aAAM;QACvD;QACA,OAAO8V,AAAsB,YAAtBA,SAAS,QAAQ,GAAe,WAAW/a;IACpD;IAGF,MAAMgb,QAAQ3a,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC2a,OAAO;IACZ,MAAMC,cAAcD,MAAM,KAAK,CAAC,MAAM,CACpC,CAAClU,OAASA,AAAgB,aAAhBA,KAAK,MAAM,EACrB,MAAM;IACR,IAAIoT,iBAAiBe,aAAaxc,QAAQ,cAAc,CAACwc;SACpD,IAAID,AAA0B,aAA1BA,MAAM,QAAQ,CAAC,MAAM,IAAiBC,AAAgB,MAAhBA,aAC7Cxc,QAAQ,cAAc,CAAC8S,KAAK,GAAG,CAAC,GAAG0J;AACvC;ACtRO,SAASC,uBAAuBvU,MAAc;IACnD,MAAMN,OAAOQ,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKF,QAAQ;IAC1BwU,IAAAA,iCAAAA,aAAAA,AAAAA,EAAc9U,MAAM,IAAI;QAAE,MAAM;IAAK;IACrC,OAAO;QACLA;QACA,QAAOnE,KAA4C;YACjDkZ,IAAAA,iCAAAA,cAAAA,AAAAA,EAAe/U,MAAM,GAAG3F,KAAK,SAAS,CAACwB,OAAO,EAAE,CAAC;QACnD;IACF;AACF;ACsBA,MAAMmZ,YAAY,CAChBzU;IAEA,MAAM0U,cAAc1U,SAAS,OAAO,CAAC,CAACwB;QACpC,MAAMmT,yBAAyB,IAAI3M,IACjCxG,QAAQ,SAAS,CAAC,GAAG,CAAC,CAACvH,WAAa;gBAClCA,SAAS,aAAa;gBACtBA,SAAS,YAAY,IAAI;aAC1B;QAEH,OAAOyS,WAAWlL,QAAQ,KAAK,EAAE,CAACtB,OAASA,KAAK,MAAM,EAAE,GAAG,CAAC,CAACA,OACpD;gBACL,QAAQA,KAAK,MAAM;gBACnB,GAAIA,KAAK,GAAG,GAAG;oBAAE,KAAKA,KAAK,GAAG;gBAAC,IAAI,CAAC,CAAC;gBACrC,GAAIA,KAAK,QAAQ,GAAG;oBAAE,UAAUA,KAAK,QAAQ;gBAAC,IAAI,CAAC,CAAC;gBACpD,YAAYA,KAAK,aAAa,GACzByU,uBAAuB,GAAG,CAACzU,KAAK,aAAa,KAAK,IACnD;YACN;IAEJ;IACA,MAAMyI,YAAY3I,SAAS,OAAO,CAAC,CAACwB,UAClCkL,WAAWlL,QAAQ,SAAS,EAAE,CAACtB,OAASA,KAAK,UAAU;IAEzD,MAAM0U,SAASC,AAAAA,IAAAA,uBAAAA,sBAAAA,AAAAA,EAAuBH;IACtC,OAAO;QACL,OAAOE,OAAO,KAAK;QACnB,QAAQA,OAAO,MAAM;QACrB,QAAQA,OAAO,MAAM;QACrB,QAAQA,OAAO,MAAM;QACrB,kBAAkBA,OAAO,gBAAgB;QACzC,eAAeA,OAAO,aAAa;QACnC,eAAeA,OAAO,aAAa;QACnC,UAAU5U,SAAS,MAAM,CACvB,CAAC+I,OAAOvH,UAAYuH,QAAQvH,QAAQ,iBAAiB,EACrD;QAEF,kBAAkBxB,SAAS,MAAM,CAC/B,CAAC+I,OAAOvH,UAAYuH,QAAQvH,QAAQ,gBAAgB,CAAC,MAAM,EAC3D;QAEF,kBAAkBmH,UAAU,MAAM,CAChC,CAAC1O,WAAaA,AAAoB,aAApBA,SAAS,MAAM,EAC7B,MAAM;QACR,iBAAiB+F,SAAS,MAAM,CAAC,CAACwB,UAAYA,AAAmB,aAAnBA,QAAQ,MAAM,EACzD,MAAM;IACX;AACF;AAEA,MAAMsT,cAAc,CAClBjI,UACAX,SAEAW,SAAS,SAAS,CAAC,OAAO,CAAC,CAAC5S,WAC1BA,SAAS,KAAK,CAAC,GAAG,CAAC,CAACiG,OAClB8L,SAAS/R,SAAS,UAAU,EAAEiG,MAAM2M,SAAS,OAAO,CAAC,IAAI,EAAEX;AAK1D,eAAe6I,uBACpBvM,IAAyB;IAEzB,MAAM,EACJyB,SAAS,EACTC,KAAK,EACL1E,WAAW,EACXX,UAAU,EACVuF,SAAS,EACTrK,MAAM,EACNkB,WAAW,EACXoJ,SAAS,EACTrU,UAAU,EACV,UAAUgf,gBAAgB,EAC3B,GAAGxM;IACJ,MAAMyM,WAAWzM,KAAK,UAAU;IAChC,MAAM0M,iBAAiBF,iBAAiB,MAAM,CAC5C,CAACjM,OAAO8D,WAAa9D,QAAQ8D,SAAS,SAAS,CAAC,MAAM,EACtD;IAEF,MAAMsI,aAAaH,iBAAiB,MAAM,CACxC,CAACjM,OAAO8D,WAAa9D,QAAQ8D,SAAS,iBAAiB,EACvD;IAEF,MAAMuI,cAAcJ,iBAAiB,MAAM,CACzC,CAACjM,OAAO8D,WAAa9D,QAAQ8D,SAAS,gBAAgB,CAAC,MAAM,EAC7D;IAEFoI,SACE,CAAC,2BAA2B,EAAED,iBAAiB,MAAM,CAAC,WAAW,EAAEE,eAAe,YAAY,EAAEC,WAAW,QAAQ,EAAEC,YAAY,kBAAkB,CAAC;IAGtJ,MAAMC,uBAAuB1K,KAAK,GAAG,CACnC3U,WAAW,IAAI,CAAC,cAAc,EAC9Bgf,iBAAiB,MAAM;IAEzB,MAAMlV,iBAAiBC,QAAQiV;IAC/B,MAAMM,UAAUhB,uBAAuBvU;IACvC,MAAMwV,iBAAiB,IAAIC;IAC3BC,IAAAA,qCAAAA,eAAAA,AAAAA,EACE9K,KAAK,GAAG,CACN,IACC3U,AAAAA,CAAAA,AAAkC,WAAlCA,WAAW,IAAI,CAAC,aAAa,GAC1B2U,KAAK,GAAG,CAAC3U,WAAW,IAAI,CAAC,cAAc,EAAEmf,cACzCE,oBAAmB,IAAK,IAE9BE,eAAe,MAAM;IAEvB,MAAMG,eAAe,CAACC;QACpBJ,eAAe,KAAK,CAAC,IAAI5d,MAAM,CAAC,wBAAwB,EAAEge,OAAO,CAAC,CAAC;IACrE;IACA,MAAMC,SAAS,IAAMF,aAAa;IAClC,MAAMG,UAAU,IAAMH,aAAa;IACnC7W,QAAQ,EAAE,CAAC,UAAU+W;IACrB/W,QAAQ,EAAE,CAAC,WAAWgX;IAEtB,IAAI/C,kBAAkB;IACtB,MAAMC,cAAc,IAClB/c,WAAW,IAAI,CAAC,IAAI,GAAG,KAAK8c,mBAAmB9c,WAAW,IAAI,CAAC,IAAI;IACrE,IAAI8f,yBAAyB;IAC7B,MAAMC,uBAAkC,EAAE;IAC1C,MAAMC,4BAA4B,CAAC3X;QACjC,MAAMiN,SACJjN,iBAAiB6T,4BAAAA,wBAAwBA,GAAG7T,MAAM,MAAM,GAAG;YAACA;SAAM;QACpE,KAAK,MAAM6B,QAAQoL,OACjB,IAAI,CAACyK,qBAAqB,QAAQ,CAAC7V,OAAO6V,qBAAqB,IAAI,CAAC7V;QACtE4V,yBAAyB;QACzBP,eAAe,KAAK,CAAClX;IACvB;IACA,MAAM4X,4BAA4B,CAAIC;QACpC,IAAI;YACF,OAAOA;QACT,EAAE,OAAO7X,OAAO;YACd2X,0BAA0B3X;YAC1B,MAAMA;QACR;IACF;IACA,MAAM8X,0BAA0BC,AAAAA,IAAAA,4BAAAA,yBAAAA,AAAAA,EAC9Bb,eAAe,MAAM,EACrB,CAACja;QACC,IAAI;YACFga,QAAQ,MAAM,CAACha;QACjB,EAAE,OAAO+C,OAAO;YACd2X,0BACE,IAAInW,4BAAAA,wBAAwBA,CAAC,gBAAgByV,QAAQ,IAAI,EAAEjX;YAE7DgY,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS,0BAA0B;gBAAE,SAAS;YAAK,GACjD,CAAC,mCAAmC,EAAEvZ,OAAOuB,QAAQ;QAEzD;IACF;IAGF,MAAMiY,kBAAkB,CAACzJ,UAA2BiC;QAClD,MAAM,EAAEtN,OAAO,EAAE,GAAGqL;QACpBoJ,0BAA0B,IACxBhB,SACE,CAAC,SAAS,EAAEnG,eAAe,EAAE,CAAC,EAAEkG,iBAAiB,MAAM,CAAC,EAAE,EAAExT,QAAQ,IAAI,EAAE;IAGhF;IACA,MAAM+U,4BAA4B,CAChC1J,UACAiC,cACA5C;QAEAoK,gBAAgBzJ,UAAUiC;QAC1B,OAAOlC,mBAAmBC,UAAUiI,YAAYjI,UAAUX,SAAS,EAAE;IACvE;IACA,MAAMsK,qBAAqB,OACzB3J,UACAiC;QAEA,MAAM,EAAEtN,OAAO,EAAE,GAAGqL;QACpByJ,gBAAgBzJ,UAAUiC;QAC1B,MAAM2H,kBAAkB,CAAC7e,UACvBqe,0BAA0B,IACxBhB,SACEI,uBAAuB,IAAI,CAAC,CAAC,EAAE7T,QAAQ,IAAI,CAAC,CAAC,EAAE5J,SAAS,GAAGA;QAGjE,MAAMsH,QAAoC,EAAE;QAC5C,MAAMyJ,YAAyC,EAAE;QACjD,IAAIzO;QACJ,IAAIwc,eAAe;QAEnB,IACE7J,SAAS,gBAAgB,CAAC,MAAM,GAAG,KAClCrE,AAAwB,UAAxBA,KAAK,cAAc,IAAc4M,cAAc,GAEhDlW,MAAM,IAAI,IAAI4V,YAAYjI,UAAU;aAC/B,IAAI0I,eAAe,MAAM,CAAC,OAAO,EACtCrW,MAAM,IAAI,IAAI4V,YAAYjI,UAAU;aAC/B,IAAIkG,eACT7T,MAAM,IAAI,IAAI4V,YAAYjI,UAAU;aAC/B;YACL,MAAM+E,UAAUC,AAAAA,IAAAA,4BAAAA,oBAAAA,AAAAA,EAAqB;gBACnCrQ;gBACA,OAAOA,QAAQ,KAAK;gBACpB,QAAQ+T,eAAe,MAAM;YAC/B;YACA,IAAIoB,2BAA2B;YAC/B,IAAI;gBACF,MAAM/E,QAAQ,KAAK;gBACnB,IAAKA,QAAQ,MAAM,EASZ;oBACL,MAAMgF,cAAc,OAClBhO,YACAiO;wBAEA,MAAM,EAAE5c,QAAQ,EAAE,GAAG2O;wBACrB,IACE2M,eAAe,MAAM,CAAC,OAAO,IAC7BxC,iBACA2D,cACA;4BACA,MAAMxK,SAASqJ,eAAe,MAAM,CAAC,OAAO,GACxC,gBACAmB,eACE,gBACA;4BACNxX,MAAM,IAAI,IACLjF,SAAS,KAAK,CAAC,GAAG,CAAC,CAACiG,OACrB8L,SAAS/R,SAAS,UAAU,EAAEiG,MAAMsB,QAAQ,IAAI,EAAE0K;4BAGtD;wBACF;wBACAuK,gBACE,CAAC,YAAY,EAAEI,gBAAgB,EAAE,CAAC,EAAEhK,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE5S,SAAS,UAAU,EAAE;wBAEzF,MAAMmZ,0BAA0B;4BAC9BxK;4BACApH;4BACA,gBAAgBoQ,QAAQ,OAAO;4BAC/B7R;4BACA,QAAQ6R,QAAQ,MAAM;4BACtB,YAAY2D,eAAe,MAAM;4BACjC,YAAYxC;4BACZ,gBAAgB,IAAM2D;4BACtB,kBAAkB;gCAChBA,eAAe;4BACjB;4BACA,gBAAgB,CAAC7f;gCACfic,mBAAmBjc;4BACrB;4BACA,YAAY4f;4BACZ,OAAO;gCACLvX;gCACAyJ;4BACF;wBACF;oBACF;oBACA,IAAImO,qBAAqB;oBACzB,MAAMC,eAAelK,SAAS,WAAW,CAAC,IAAI,CAC5C,CAACjE,aACCA,WAAW,QAAQ,CAAC,UAAU,KAC9BiE,SAAS,sBAAsB;oBAEnC,MAAMmK,oBAAoBD,eAAe,IAAI;oBAC7C,IAAIA,cAAc;wBAChB,MAAMH,YAAYG,cAAc;wBAChCD,qBACEnO,UAAU,EAAE,CAAC,KAAK,WAAW,YAC7B+D,WAAWxN,OAAO,CAACgB,OAASA,KAAK,MAAM,EAAE,IAAI,CAC3C,CAACA,OAASA,AAAgB,cAAhBA,KAAK,MAAM;oBAE3B;oBACA,IAAI,CAAC4W,oBACH,MAAMG,AAAAA,IAAAA,4BAAAA,iBAAAA,AAAAA,EACJpK,SAAS,WAAW,CAAC,MAAM,CACzB,CAACjE,aAAeA,eAAemO,eAEjC;wBACE,aAAalK,SAAS,mBAAmB;wBACzC,YAAY,IACV0I,eAAe,MAAM,CAAC,OAAO,IAC7BxC,iBACA2D;oBACJ,GACA,OAAO9N,YAAYhP;wBACjB,IAAI;4BACF,MAAMgd,YAAYhO,YAAYhP,QAAQod;wBACxC,EAAE,OAAO3Y,OAAO;4BACd2X,0BAA0B3X;4BAC1B,MAAMA;wBACR;oBACF;oBAGJ,MAAMsU,YAAY,IAAIhZ,IAAIuF,MAAM,GAAG,CAAC,CAACgB,OAASA,KAAK,MAAM;oBACzD,MAAMgM,SAAS4K,qBACX,yBACAvB,eAAe,MAAM,CAAC,OAAO,GAC3B,gBACAmB,eACE,gBACA;oBACRxX,MAAM,IAAI,IACL4V,YAAYjI,UAAUX,QAAQ,MAAM,CACrC,CAAChM,OAAS,CAACyS,UAAU,GAAG,CAACzS,KAAK,MAAM;gBAG1C,OA1GEhB,MAAM,IAAI,IACL4V,YACDjI,UACA0I,eAAe,MAAM,CAAC,OAAO,GACzB,gBACA;YAsGZ,EAAE,OAAOlX,OAAO;gBACdsY,2BAA2B;gBAC3BX,0BAA0B3X;YAC5B,SAAU;gBACR,MAAM6Y,aACJP,4BACAjK,WAAWxN,OAAO,CAACgB,OAASA,KAAK,MAAM,EAAE,IAAI,CAC3C,CAACA,OAASA,AAAgB,cAAhBA,KAAK,MAAM,KAEvBwM,WAAW/D,WAAW,CAACzI,OAASA,KAAK,UAAU,EAAE,IAAI,CACnD,CAACA,OAASA,AAAgB,aAAhBA,KAAK,MAAM,KAEvBwW,gBACAnB,eAAe,MAAM,CAAC,OAAO;gBAC/Brb,YAAY,MAAM0X,QAAQ,MAAM,CAACsF,aAAa,WAAW;YAC3D;YACA,IAAIP,0BAA0B;gBAC5B,MAAMhE,YAAY,IAAIhZ,IAAIuF,MAAM,GAAG,CAAC,CAACgB,OAASA,KAAK,MAAM;gBACzDhB,MAAM,IAAI,IACL4V,YAAYjI,UAAU,eAAe,MAAM,CAC5C,CAAC3M,OAAS,CAACyS,UAAU,GAAG,CAACzS,KAAK,MAAM;YAG1C;QACF;QAEA,MAAMiX,QAAQ,IAAInP,IAChB6E,SAAS,SAAS,CAAC,GAAG,CAAC,CAAC5S,UAAUL,QAAU;gBAACK,SAAS,UAAU;gBAAEL;aAAM;QAE1E,MAAMwd,gBAAgB,CAAC5W,KACrB2W,MAAM,GAAG,CAAC3W,OAAO7J,OAAO,gBAAgB;QAC1CuI,MAAM,IAAI,CACR,CAAC+G,GAAGC,IACFkR,cAAcnR,EAAE,UAAU,IAAImR,cAAclR,EAAE,UAAU,KACxDD,EAAE,SAAS,GAAGC,EAAE,SAAS;QAE7ByC,UAAU,IAAI,CACZ,CAAC1C,GAAGC,IACFkR,cAAcnR,EAAE,UAAU,IAAImR,cAAclR,EAAE,UAAU,KACvDD,AAAAA,CAAAA,EAAE,YAAY,IAAI,KAAMC,CAAAA,EAAE,YAAY,IAAI;QAE/C,OAAO0G,mBAAmBC,UAAU3N,OAAOyJ,WAAWzO;IACxD;IAEA,MAAMmd,iBACJ,IAAI/Z,MAAM0X,iBAAiB,MAAM;IAEnC,IAAI;QACF,IACEhf,AAAkC,WAAlCA,WAAW,IAAI,CAAC,aAAa,IAC3BwS,AAAwB,UAAxBA,KAAK,cAAc,IAAc4M,cAAc,GAejD,MAAM6B,AAAAA,IAAAA,4BAAAA,iBAAAA,AAAAA,EACJjC,kBACA;YACE,aAAaK;YACb,YAAY,IACVS,0BACAP,eAAe,MAAM,CAAC,OAAO,IAC7BxC;QACJ,GACA,OAAOlG,UAAUjT;YACf,IAAI;gBACFyd,cAAc,CAACzd,MAAM,GAAG,MAAM4c,mBAAmB3J,UAAUjT;YAC7D,EAAE,OAAOyE,OAAO;gBACd2X,0BAA0B3X;gBAC1B,MAAMA;YACR;QACF;aA9BF;YACA,MAAMwP,UAAU,MAAM+E,iBAAiB;gBACrC,UAAUoC;gBACV,MAAMhf,WAAW,IAAI;gBACrB,UAAUA,WAAW,QAAQ;gBAC7B+J;gBACA,QAAQwV,eAAe,MAAM;gBAC7BN;gBACA,uBAAuBe;YACzB;YACAnI,QAAQ,OAAO,CAAC,CAAC1U,QAAQS;gBACvByd,cAAc,CAACzd,MAAM,GAAGT;YAC1B;QACF;IAmBF,EAAE,OAAOkF,OAAO;QACd2X,0BAA0B3X;IAC5B,SAAU;QACR8X;QACAtX,QAAQ,GAAG,CAAC,UAAU+W;QACtB/W,QAAQ,GAAG,CAAC,WAAWgX;IACzB;IAEA,MAAMyB,0BAA0BtC,iBAAiB,GAAG,CAClD,CAACnI,UAAUiC;QACT,MAAM3V,SAASke,cAAc,CAACvI,aAAa;QAC3C,IAAI3V,QAAQ,OAAOA;QACnB,MAAM+S,SAASW,SAAS,gBAAgB,CAAC,MAAM,GAC3C,6BACA0I,eAAe,MAAM,CAAC,OAAO,GAC3B,gBACAxC,gBACE,SACA3Z;QACR,IAAI,CAAC8S,QACH,MAAM,IAAIvU,MACR,CAAC,gDAAgD,EAAEkV,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAGhF,OAAO0J,0BAA0B1J,UAAUiC,cAAc5C;IAC3D;IAGF,MAAMjB,UAAUwJ,UAAU6C;IAC1B,MAAMnF,SACJ2D,0BACAP,eAAe,MAAM,CAAC,OAAO,IAC7BtK,QAAQ,MAAM,GAAG,KACjBA,QAAQ,MAAM,GAAG,KACjBA,QAAQ,gBAAgB,GAAG,KAC3BA,QAAQ,gBAAgB,GAAG,KAC3BA,QAAQ,eAAe,GAAG;IAC5B,MAAMsM,UAAU,IAAI3gB;IACpB,MAAMuC,SAA+B;QACnC,eAAe;QACf,cAAc;YAAE,MAAMmc,QAAQ,IAAI;YAAE,YAAYiC,QAAQ,WAAW;QAAG;QACtErN;QACA,WAAWD,UAAU,WAAW;QAChC,SAASsN,QAAQ,WAAW;QAC5B,YAAY5M,KAAK,GAAG,CAAC,GAAG4M,QAAQ,OAAO,KAAKtN,UAAU,OAAO;QAC7D,QAAQkI,SAAS,WAAW;QAC5B,UAAUA,SAAS,IAAI;QACvB/H;QACAnJ;QACAoJ;QACAY;QACA,UAAUqM;QACV,OAAOA,wBAAwB,OAAO,CAAC,CAAC9V,UAAYA,QAAQ,KAAK;QACjE,WAAW8V,wBAAwB,OAAO,CAAC,CAAC9V,UAAYA,QAAQ,SAAS;QACzE,kBAAkB8V,wBAAwB,OAAO,CAC/C,CAAC9V,UAAYA,QAAQ,gBAAgB;QAEvC,GAAIsU,yBACA;YAAE,QAAQC,qBAAqB,GAAG,CAACyB,4BAAAA,gBAAgBA;QAAE,IACrD,CAAC,CAAC;IACR;IACA,IAAIC,kBAAkBte;IACtB,IAAIue;IACJ,MAAMC,UAAU,OACd5gB,WACA0I,MACAyW;QAEA,IAAI;YACF,MAAMA;YACN,OAAO;QACT,EAAE,OAAO7X,OAAO;YACd2X,0BACE3X,iBAAiBwB,4BAAAA,wBAAwBA,IACvCxB,iBAAiB6T,4BAAAA,wBAAwBA,GACvC7T,QACA,IAAIwB,4BAAAA,wBAAwBA,CAAC9I,WAAW0I,MAAMpB;YAEpDoZ,kBAAkB;gBAChB,GAAGA,eAAe;gBAClB,QAAQ;gBACR,UAAU;gBACV,QAAQ1B,qBAAqB,GAAG,CAACyB,4BAAAA,gBAAgBA;YACnD;YACA,OAAO;QACT;IACF;IACA,MAAMI,eAAe,IACnBD,QAAQ,gBAAgB1W,aAAa,IACnCK,0BAA0B;gBACxBkE;gBACA,GAAIX,aAAa;oBAAEA;gBAAW,IAAI,CAAC,CAAC;gBACpC,QAAQ4S;YACV;IAEJ,MAAMI,cAAc,IAClBF,QAAQ,gBAAgBtN,WAAW;YACjC,IAAI,CAAC7B,KAAK,aAAa,EAAE;YACzB,MAAMiF,aAAa,MAAM,IAAIqK,uBAAAA,sBAAsBA,GAAG,aAAa,CAAC;gBAClE,WAAWzN;gBACX,gBAAgB,CAAC,aAAa,EAAEH,OAAO;gBACvC,WAAW;gBACX,SAAS6N,AAAAA,IAAAA,4BAAAA,2BAAAA,AAAAA,EAA4BN;gBACrC,iBAAiB,CAAC7d;oBAChB8d,cAAc9d;oBACd,MAAMoR,OAAOe,AAAAA,IAAAA,4BAAAA,sBAAAA,AAAAA,EAAuB0L,iBAAiB7d;oBACrD,MAAMoe,OAAO3B,AAAAA,IAAAA,uBAAAA,QAAAA,AAAAA,EAAS,gCAAgC;wBACpD,SAAS;oBACX;oBACA,KAAK,MAAM1K,cAAcX,KAAK,WAAW,IAAI,EAAE,CAC7CgN,KAAKrM,WAAW,OAAO;oBACzB,OAAOX;gBACT;YACF;YACAyM,kBAAkB;gBAAE,GAAGA,eAAe;gBAAEhK;YAAW;QACrD;IAIF,MAAMoK;IACN,KAAK,MAAMI,eAAezP,KAAK,YAAY,CACzC,MAAMmP,QAAQM,YAAY,SAAS,EAAEA,YAAY,IAAI,EAAE;QACrD,MAAMA,YAAY,OAAO,CAACR;IAC5B;IACF,MAAME,QACJ,gBACA1X,AAAAA,IAAAA,mCAAAA,IAAAA,AAAAA,EAAKN,AAAAA,IAAAA,mCAAAA,OAAAA,AAAAA,EAAQsB,cAAc,cAC3B;QACE,MAAMiX,eAAe,MAAMrM,wBACzB4L,iBACAC;QAEFD,kBAAkB;YAAE,GAAGA,eAAe;YAAES;QAAa;IACvD;IAEF,MAAMN;IACN,IAAI9B,wBACF,MAAM,IAAI5D,4BAAAA,wBAAwBA,CAACuF,iBAAiB1B;IACtD,OAAO0B;AACT;AC9iBO,eAAeU,eACpBtgB,UAAiC,CAAC,CAAC;IAEnC,OAAOkd,uBAAuB,MAAM/K,eAAenS;AACrD"}