{"version":3,"sources":["../src/agent-runtime.ts"],"sourcesContent":["import { spawn, type ChildProcess } from \"node:child_process\";\nimport { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { defineIntegration, type FarmIntegration } from \"./integrations\";\nimport type { BundleResultPayload, FarmPlugin } from \"./plugin\";\n\nconst AGENT_RUNTIME_METHODS = [\n  \"GET\",\n  \"HEAD\",\n  \"QUERY\",\n  \"POST\",\n  \"PUT\",\n  \"PATCH\",\n  \"DELETE\",\n  \"OPTIONS\",\n] as const;\n\nconst HOP_BY_HOP_HEADERS = [\n  \"connection\",\n  \"keep-alive\",\n  \"proxy-authenticate\",\n  \"proxy-authorization\",\n  \"te\",\n  \"trailer\",\n  \"transfer-encoding\",\n  \"upgrade\",\n] as const;\n\nconst DECODED_CONTENT_CODINGS: readonly string[] = [\"gzip\", \"x-gzip\", \"deflate\", \"br\"];\n\nconst ZSTD_FRAME_MAGIC = new Uint8Array([0x28, 0xb5, 0x2f, 0xfd]);\n\nexport interface FarmAgentRuntimeInstance {\n  readonly provider: string;\n  readonly routePrefix: string;\n  readonly routePrefixes: readonly string[];\n  getOrigin(): string | undefined;\n}\n\nexport interface FarmManagedAgentRuntime {\n  readonly origin: string;\n  readonly process?: ChildProcess;\n  stop(): Promise<void>;\n}\n\nexport interface FarmAgentRuntimeStartContext {\n  readonly root: string;\n  readonly log: {\n    info(message: string, meta?: Record<string, unknown>): void;\n    warn(message: string, meta?: Record<string, unknown>): void;\n    error(message: string, meta?: Record<string, unknown>): void;\n  };\n}\n\nexport interface FarmAgentRuntimeBuildContext extends BundleResultPayload {\n  readonly provider: string;\n  readonly routePrefix: string;\n  readonly routePrefixes: readonly string[];\n}\n\nexport interface FarmAgentRuntimeIntegrationOptions {\n  provider: string;\n  routePrefix: string;\n  /** Whether Farm's production server must dispatch this runtime's proxy routes. */\n  serverRuntime?: boolean;\n  additionalRoutePrefixes?: readonly string[];\n  origin?: string;\n  originEnv?: string | readonly string[];\n  webSockets?: boolean;\n  startDev?(context: FarmAgentRuntimeStartContext): Promise<FarmManagedAgentRuntime>;\n  afterBuild?(context: FarmAgentRuntimeBuildContext): Promise<void> | void;\n  plugins?: readonly FarmPlugin[];\n  instance?: Record<string, unknown>;\n}\n\nexport interface FarmManagedProcessOptions {\n  command: string;\n  args?: readonly string[];\n  cwd: string;\n  env?: Record<string, string | undefined>;\n  label: string;\n  origin?: string;\n  resolveOrigin?(output: string): string | undefined;\n  healthPath?: string;\n  timeoutMs?: number;\n  stopTimeoutMs?: number;\n  onOutput?(line: string, stream: \"stdout\" | \"stderr\"): void;\n}\n\nexport interface FarmAgentProxyOptions {\n  fetch?: typeof globalThis.fetch;\n}\n\ninterface RuntimeState {\n  origin?: string;\n  managed?: FarmManagedAgentRuntime;\n}\n\nexport function createAgentRuntimeIntegration(\n  options: FarmAgentRuntimeIntegrationOptions,\n): FarmIntegration {\n  const provider = normalizeProviderName(options.provider);\n  const routePrefix = normalizeAgentRoutePrefix(options.routePrefix);\n  const routePrefixes = [\n    routePrefix,\n    ...(options.additionalRoutePrefixes || []).map(normalizeAgentRoutePrefix),\n  ].filter((prefix, index, values) => values.indexOf(prefix) === index);\n  const originEnv = normalizeOriginEnv(options.originEnv);\n  const state: RuntimeState = {\n    origin: resolveConfiguredOrigin(options.origin, originEnv),\n  };\n\n  const runtimeInstance: FarmAgentRuntimeInstance & Record<string, unknown> = {\n    ...options.instance,\n    provider,\n    routePrefix,\n    routePrefixes,\n    getOrigin: () => state.origin ?? resolveConfiguredOrigin(options.origin, originEnv),\n  };\n\n  const runtimePlugin: FarmPlugin = {\n    name: `farm:agent-runtime:${provider}`,\n    config(config, context) {\n      if (!context.isDev) {\n        return config;\n      }\n\n      const origin = runtimeInstance.getOrigin();\n      if (!origin) {\n        return config;\n      }\n\n      for (const prefix of routePrefixes) {\n        applyAgentRuntimeViteProxy(config, {\n          origin,\n          routePrefix: prefix,\n          webSockets: options.webSockets,\n        });\n      }\n      return config;\n    },\n    async afterBundle(result) {\n      if (!result.success || !options.afterBuild) {\n        return;\n      }\n\n      await options.afterBuild({\n        ...result,\n        provider,\n        routePrefix,\n        routePrefixes,\n      });\n    },\n  };\n\n  return defineIntegration({\n    category: \"agent\",\n    type: provider,\n    serverRuntime: options.serverRuntime,\n    instance: runtimeInstance,\n    async setup(context) {\n      if (!context.isDev || state.origin || !options.startDev) {\n        return;\n      }\n\n      state.managed = await options.startDev({\n        root: context.appConfig.root || process.cwd(),\n        log: context.log,\n      });\n      state.origin = normalizeAgentOrigin(state.managed.origin);\n      context.log.info(`${provider} runtime ready`, {\n        origin: state.origin,\n      });\n      await context.cleanup(async () => {\n        await state.managed?.stop();\n        state.managed = undefined;\n        state.origin = undefined;\n      });\n    },\n    routes: routePrefixes.map((prefix) => ({\n      path: `${prefix}/[...farmAgentRuntimePath]`,\n      methods: AGENT_RUNTIME_METHODS,\n      rawBody: true,\n      async handler(request) {\n        const origin = runtimeInstance.getOrigin();\n        if (!origin) {\n          return Response.json(\n            {\n              error: \"Agent runtime unavailable\",\n              provider,\n            },\n            { status: 503 },\n          );\n        }\n\n        return proxyAgentRuntimeRequest(request, origin);\n      },\n    })),\n    plugins: [runtimePlugin, ...(options.plugins || [])],\n  });\n}\n\nexport function applyAgentRuntimeViteProxy(\n  config: { vite?: Record<string, any> },\n  input: {\n    origin: string;\n    routePrefix: string;\n    webSockets?: boolean;\n  },\n): void {\n  const origin = normalizeAgentOrigin(input.origin);\n  const routePrefix = normalizeAgentRoutePrefix(input.routePrefix);\n  const vite = config.vite || {};\n  const server = vite.server || {};\n  const proxy = server.proxy || {};\n\n  if (proxy[routePrefix]) {\n    throw new Error(\n      `Farm agent runtime cannot own ${routePrefix} because vite.server.proxy already defines it.`,\n    );\n  }\n\n  config.vite = {\n    ...vite,\n    server: {\n      ...server,\n      proxy: {\n        ...proxy,\n        [routePrefix]: {\n          target: origin,\n          changeOrigin: true,\n          ws: input.webSockets === true,\n        },\n      },\n    },\n  };\n}\n\nexport async function proxyAgentRuntimeRequest(\n  request: Request,\n  origin: string,\n  options: FarmAgentProxyOptions = {},\n): Promise<Response> {\n  const upstreamOrigin = normalizeAgentOrigin(origin);\n  const incomingUrl = new URL(request.url);\n  const targetUrl = new URL(`${incomingUrl.pathname}${incomingUrl.search}`, upstreamOrigin);\n  const headers = createProxyRequestHeaders(request.headers, incomingUrl);\n  const method = request.method.toUpperCase();\n  const init: RequestInit & { duplex?: \"half\" } = {\n    method,\n    headers,\n    redirect: \"manual\",\n    signal: request.signal,\n  };\n\n  if (method !== \"GET\" && method !== \"HEAD\" && request.body) {\n    init.body = request.body;\n    init.duplex = \"half\";\n  }\n\n  try {\n    const upstream = await (options.fetch || globalThis.fetch)(targetUrl, init);\n    const responseHeaders = new Headers(upstream.headers);\n    removeHopByHopHeaders(responseHeaders);\n    // Fetch decodes supported content codings before exposing the body while\n    // retaining the upstream metadata, so forwarding those headers would make the\n    // client decode an already-decoded stream and trust a stale byte length.\n    // gzip/x-gzip/deflate/br are decoded by every supported Node, so the headers\n    // are stripped unconditionally. zstd is only decoded by undici >=7.11\n    // (Node >=24.4); on older runtimes the body stays a raw zstd frame and the\n    // headers are truthful, so the strip decision is derived from whether this\n    // fetch actually decoded by peeking the zstd frame magic.\n    const contentCodings = responseHeaders\n      .get(\"content-encoding\")\n      ?.toLowerCase()\n      .split(\",\")\n      .map((coding) => coding.trim())\n      .filter(Boolean);\n    let responseBody: ReadableStream<Uint8Array> | null = upstream.body;\n    if (upstream.body && contentCodings && contentCodings.length) {\n      if (contentCodings.every((coding) => DECODED_CONTENT_CODINGS.includes(coding))) {\n        responseHeaders.delete(\"content-encoding\");\n        responseHeaders.delete(\"content-length\");\n      } else if (\n        contentCodings.includes(\"zstd\") &&\n        contentCodings.every(\n          (coding) => DECODED_CONTENT_CODINGS.includes(coding) || coding === \"zstd\",\n        )\n      ) {\n        const { decoded, body } = await detectZstdDecoding(upstream.body);\n        responseBody = body;\n        if (decoded) {\n          responseHeaders.delete(\"content-encoding\");\n          responseHeaders.delete(\"content-length\");\n        }\n      }\n    }\n    rewriteProxyLocation(responseHeaders, upstreamOrigin, incomingUrl.origin);\n\n    return new Response(responseBody, {\n      status: upstream.status,\n      statusText: upstream.statusText,\n      headers: responseHeaders,\n    });\n  } catch (error) {\n    if (request.signal.aborted || isAbortError(error)) {\n      throw error;\n    }\n\n    return Response.json(\n      {\n        error: \"Agent runtime request failed\",\n      },\n      { status: 502 },\n    );\n  }\n}\n\nexport async function startManagedAgentRuntime(\n  options: FarmManagedProcessOptions,\n): Promise<FarmManagedAgentRuntime> {\n  const timeoutMs = options.timeoutMs ?? 30_000;\n  const stopTimeoutMs = options.stopTimeoutMs ?? 2_000;\n  const fixedOrigin = options.origin ? normalizeAgentOrigin(options.origin) : undefined;\n  let output = \"\";\n  let settled = false;\n  let checkingReadiness = false;\n\n  const child = spawn(options.command, [...(options.args || [])], {\n    cwd: options.cwd,\n    env: {\n      ...process.env,\n      ...options.env,\n    },\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n\n  const origin = await new Promise<string>((resolveOrigin, reject) => {\n    let timer: ReturnType<typeof setTimeout>;\n\n    const finish = () => {\n      if (settled) return;\n      settled = true;\n      clearTimeout(timer);\n      child.off(\"error\", onError);\n      child.off(\"exit\", onExit);\n    };\n\n    const succeed = async (candidate: string) => {\n      if (settled || checkingReadiness) return;\n      checkingReadiness = true;\n      try {\n        const normalized = normalizeAgentOrigin(candidate);\n        await waitForAgentRuntime(normalized, options.healthPath, timeoutMs, child);\n        finish();\n        resolveOrigin(normalized);\n      } catch (error) {\n        finish();\n        terminateChild(child);\n        reject(error);\n      }\n    };\n\n    timer = setTimeout(() => {\n      finish();\n      terminateChild(child);\n      reject(new Error(`${options.label} did not become ready within ${timeoutMs}ms.`));\n    }, timeoutMs);\n\n    const onError = (error: Error) => {\n      finish();\n      reject(error);\n    };\n\n    const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n      finish();\n      reject(\n        new Error(\n          `${options.label} exited before it was ready (code ${String(code)}, signal ${String(signal)}).`,\n        ),\n      );\n    };\n\n    const onData = (chunk: Buffer, stream: \"stdout\" | \"stderr\") => {\n      const text = chunk.toString(\"utf8\");\n      output = `${output}${text}`.slice(-16_384);\n      emitProcessOutput(text, stream, options.onOutput);\n\n      if (!fixedOrigin && options.resolveOrigin) {\n        const candidate = options.resolveOrigin(output);\n        if (candidate) {\n          void succeed(candidate);\n        }\n      }\n    };\n\n    child.once(\"error\", onError);\n    child.once(\"exit\", onExit);\n    child.stdout?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stdout\"));\n    child.stderr?.on(\"data\", (chunk: Buffer) => onData(chunk, \"stderr\"));\n\n    if (fixedOrigin) {\n      void succeed(fixedOrigin);\n    }\n  });\n\n  return {\n    origin,\n    process: child,\n    async stop() {\n      if (child.exitCode !== null || child.signalCode !== null) {\n        return;\n      }\n\n      child.kill(\"SIGTERM\");\n      const exited = await waitForChildExit(child, stopTimeoutMs);\n      if (!exited && child.exitCode === null && child.signalCode === null) {\n        child.kill(\"SIGKILL\");\n        await waitForChildExit(child, stopTimeoutMs);\n      }\n    },\n  };\n}\n\nexport async function findAvailableAgentRuntimePort(host = \"127.0.0.1\"): Promise<number> {\n  return await new Promise<number>((resolvePort, reject) => {\n    const server = createNetServer();\n    server.unref();\n    server.once(\"error\", reject);\n    server.listen(0, host, () => {\n      const address = server.address();\n      if (!address || typeof address === \"string\") {\n        server.close();\n        reject(new Error(\"Unable to allocate an agent runtime port.\"));\n        return;\n      }\n\n      const port = address.port;\n      server.close((error) => {\n        if (error) reject(error);\n        else resolvePort(port);\n      });\n    });\n  });\n}\n\nexport async function resolveProjectPackageBin(\n  projectRoot: string,\n  packageName: string,\n  binName?: string,\n): Promise<string> {\n  const root = resolve(projectRoot);\n  const projectRequire = createRequire(join(root, \"package.json\"));\n  let packageJsonPath: string;\n\n  try {\n    packageJsonPath = projectRequire.resolve(`${packageName}/package.json`);\n  } catch {\n    throw new Error(\n      `${packageName} is required by this agent integration. Install it in ${root} and try again.`,\n    );\n  }\n\n  const packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\")) as {\n    bin?: string | Record<string, string>;\n  };\n  const bin =\n    typeof packageJson.bin === \"string\"\n      ? packageJson.bin\n      : packageJson.bin?.[binName || packageName.split(\"/\").at(-1) || packageName];\n\n  if (!bin) {\n    throw new Error(\n      `${packageName} does not expose the expected ${binName || packageName} binary.`,\n    );\n  }\n\n  const packageRoot = dirname(packageJsonPath);\n  const binaryPath = resolve(packageRoot, bin);\n  if (\n    relative(packageRoot, binaryPath).startsWith(\"..\") ||\n    isAbsolute(relative(packageRoot, binaryPath))\n  ) {\n    throw new Error(`${packageName} exposes a binary outside its package root.`);\n  }\n\n  return binaryPath;\n}\n\nexport function normalizeAgentOrigin(value: string): string {\n  const input = value.trim();\n  if (!input) {\n    throw new Error(\"Agent runtime origin cannot be empty.\");\n  }\n\n  const url = new URL(input);\n  if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n    throw new Error(\"Agent runtime origin must use http or https.\");\n  }\n  if (url.username || url.password) {\n    throw new Error(\"Agent runtime origin cannot contain credentials.\");\n  }\n  if (url.pathname !== \"/\" || url.search || url.hash) {\n    throw new Error(\"Agent runtime origin must not contain a path, query, or hash.\");\n  }\n\n  return url.origin;\n}\n\nexport function normalizeAgentRoutePrefix(value: string): string {\n  const normalized = `/${value.trim()}`.replace(/\\/{2,}/g, \"/\");\n  if (normalized === \"/\") {\n    throw new Error(\"Agent runtime route prefix cannot own the application root.\");\n  }\n  return normalized.replace(/\\/$/, \"\");\n}\n\nfunction normalizeProviderName(value: string): string {\n  const provider = value.trim();\n  if (!provider || !/^[a-z0-9][a-z0-9._-]*$/i.test(provider)) {\n    throw new Error(\"Agent runtime provider must be a non-empty package-style name.\");\n  }\n  return provider;\n}\n\nfunction normalizeOriginEnv(value: string | readonly string[] | undefined): readonly string[] {\n  if (!value) return [];\n  return (Array.isArray(value) ? value : [value]).map((entry) => entry.trim()).filter(Boolean);\n}\n\nfunction resolveConfiguredOrigin(\n  configuredOrigin: string | undefined,\n  envNames: readonly string[],\n): string | undefined {\n  if (configuredOrigin) {\n    return normalizeAgentOrigin(configuredOrigin);\n  }\n\n  for (const envName of envNames) {\n    const value = process.env[envName];\n    if (value?.trim()) {\n      return normalizeAgentOrigin(value);\n    }\n  }\n\n  return undefined;\n}\n\nfunction createProxyRequestHeaders(input: Headers, incomingUrl: URL): Headers {\n  const headers = new Headers(input);\n  removeHopByHopHeaders(headers);\n  headers.delete(\"host\");\n  headers.delete(\"content-length\");\n  // Node fetch supplies its own compression preference when this header is\n  // absent, then exposes a decoded body with the original encoding headers.\n  headers.set(\"accept-encoding\", \"identity\");\n  if (!headers.has(\"x-forwarded-host\")) headers.set(\"x-forwarded-host\", incomingUrl.host);\n  if (!headers.has(\"x-forwarded-proto\")) {\n    headers.set(\"x-forwarded-proto\", incomingUrl.protocol.replace(\":\", \"\"));\n  }\n  return headers;\n}\n\nfunction removeHopByHopHeaders(headers: Headers): void {\n  const connectionOptions = headers.get(\"connection\")?.split(\",\") ?? [];\n  for (const option of connectionOptions) {\n    const header = option.trim();\n    if (/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(header)) {\n      headers.delete(header);\n    }\n  }\n\n  for (const header of HOP_BY_HOP_HEADERS) {\n    headers.delete(header);\n  }\n}\n\nasync function detectZstdDecoding(body: ReadableStream<Uint8Array>): Promise<{\n  decoded: boolean;\n  body: ReadableStream<Uint8Array>;\n}> {\n  const reader = body.getReader();\n  const consumed: Uint8Array[] = [];\n  let total = 0;\n  try {\n    while (total < ZSTD_FRAME_MAGIC.byteLength) {\n      const { value, done } = await reader.read();\n      if (done) break;\n      if (!value || value.byteLength === 0) continue;\n      consumed.push(value);\n      total += value.byteLength;\n    }\n  } catch {\n    // The upstream read failure is surfaced through the rebuilt body below;\n    // fall back to stripping the stale framing rather than forwarding it.\n  }\n  const lookahead = concatUint8(consumed);\n  const decoded = !startsWithZstdFrameMagic(lookahead);\n  const rebuilt = new ReadableStream<Uint8Array>({\n    start(controller) {\n      if (lookahead.byteLength > 0) controller.enqueue(lookahead);\n    },\n    async pull(controller) {\n      try {\n        const { value, done } = await reader.read();\n        if (done) {\n          controller.close();\n          return;\n        }\n        controller.enqueue(value ?? new Uint8Array());\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    cancel(reason) {\n      reader.cancel(reason).catch(() => {});\n    },\n  });\n  return { decoded, body: rebuilt };\n}\n\nfunction concatUint8(chunks: Uint8Array[]): Uint8Array {\n  if (chunks.length === 0) return new Uint8Array(0);\n  if (chunks.length === 1) return chunks[0];\n  const total = chunks.reduce((sum, chunk) => sum + chunk.byteLength, 0);\n  const merged = new Uint8Array(total);\n  let offset = 0;\n  for (const chunk of chunks) {\n    merged.set(chunk, offset);\n    offset += chunk.byteLength;\n  }\n  return merged;\n}\n\nfunction startsWithZstdFrameMagic(buffer: Uint8Array): boolean {\n  if (buffer.byteLength < ZSTD_FRAME_MAGIC.byteLength) return false;\n  let isStandardFrame = true;\n  for (let index = 0; index < ZSTD_FRAME_MAGIC.byteLength; index++) {\n    if (buffer[index] !== ZSTD_FRAME_MAGIC[index]) {\n      isStandardFrame = false;\n      break;\n    }\n  }\n  if (isStandardFrame) return true;\n\n  // RFC 8878 permits a zstd stream to begin with one or more skippable\n  // frames. Their little-endian magic range is 0x184D2A50-0x184D2A5F, so\n  // only the low byte varies. Treating those frames as decoded plaintext\n  // would strip truthful Content-Encoding metadata on Node versions whose\n  // fetch implementation does not decode zstd.\n  return (\n    buffer[0] >= 0x50 &&\n    buffer[0] <= 0x5f &&\n    buffer[1] === 0x2a &&\n    buffer[2] === 0x4d &&\n    buffer[3] === 0x18\n  );\n}\n\nfunction rewriteProxyLocation(\n  headers: Headers,\n  upstreamOrigin: string,\n  incomingOrigin: string,\n): void {\n  const location = headers.get(\"location\");\n  if (!location) return;\n\n  try {\n    const url = new URL(location, upstreamOrigin);\n    if (url.origin === upstreamOrigin) {\n      headers.set(\"location\", `${incomingOrigin}${url.pathname}${url.search}${url.hash}`);\n    }\n  } catch {\n    // Preserve non-URL Location values exactly as returned by the runtime.\n  }\n}\n\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof Error && error.name === \"AbortError\";\n}\n\nasync function waitForAgentRuntime(\n  origin: string,\n  healthPath: string | undefined,\n  timeoutMs: number,\n  child: ChildProcess,\n): Promise<void> {\n  const deadline = Date.now() + timeoutMs;\n  const healthUrl = new URL(healthPath || \"/\", origin);\n\n  while (Date.now() < deadline) {\n    if (child.exitCode !== null || child.signalCode !== null) {\n      throw new Error(\"Agent runtime exited while Farm was waiting for it to become ready.\");\n    }\n\n    const controller = new AbortController();\n    const timer = setTimeout(() => controller.abort(), 750);\n    try {\n      await fetch(healthUrl, {\n        signal: controller.signal,\n        redirect: \"manual\",\n      });\n      return;\n    } catch {\n      await delay(100);\n    } finally {\n      clearTimeout(timer);\n    }\n  }\n\n  throw new Error(`Agent runtime at ${origin} did not answer before the startup timeout.`);\n}\n\nfunction emitProcessOutput(\n  text: string,\n  stream: \"stdout\" | \"stderr\",\n  onOutput: FarmManagedProcessOptions[\"onOutput\"],\n): void {\n  if (!onOutput) return;\n  for (const line of text.split(/\\r?\\n/)) {\n    const value = line.trimEnd();\n    if (value) onOutput(value, stream);\n  }\n}\n\nfunction terminateChild(child: ChildProcess): void {\n  if (child.exitCode === null && child.signalCode === null) {\n    child.kill(\"SIGTERM\");\n  }\n}\n\nasync function waitForChildExit(child: ChildProcess, timeoutMs: number): Promise<boolean> {\n  if (child.exitCode !== null || child.signalCode !== null) return true;\n  return await new Promise<boolean>((resolveExit) => {\n    const timer = setTimeout(() => {\n      child.off(\"exit\", onExit);\n      resolveExit(false);\n    }, timeoutMs);\n    const onExit = () => {\n      clearTimeout(timer);\n      resolveExit(true);\n    };\n    child.once(\"exit\", onExit);\n  });\n}\n\nfunction delay(ms: number): Promise<void> {\n  return new Promise((resolveDelay) => setTimeout(resolveDelay, ms));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAgC;AACzC,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,uBAAuB;AAChD,SAAS,SAAS,YAAY,MAAM,UAAU,eAAe;AAI7D,IAAM,wBAAwB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,0BAA6C,CAAC,QAAQ,UAAU,WAAW,IAAI;AAErF,IAAM,mBAAmB,IAAI,WAAW,CAAC,IAAM,KAAM,IAAM,GAAI,CAAC;AAoEzD,SAAS,8BACd,SACiB;AACjB,QAAM,WAAW,sBAAsB,QAAQ,QAAQ;AACvD,QAAM,cAAc,0BAA0B,QAAQ,WAAW;AACjE,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,IAAI,QAAQ,2BAA2B,CAAC,GAAG,IAAI,yBAAyB;AAAA,EAC1E,EAAE,OAAO,CAAC,QAAQ,OAAO,WAAW,OAAO,QAAQ,MAAM,MAAM,KAAK;AACpE,QAAM,YAAY,mBAAmB,QAAQ,SAAS;AACtD,QAAM,QAAsB;AAAA,IAC1B,QAAQ,wBAAwB,QAAQ,QAAQ,SAAS;AAAA,EAC3D;AAEA,QAAM,kBAAsE;AAAA,IAC1E,GAAG,QAAQ;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,6BAAM,MAAM,UAAU,wBAAwB,QAAQ,QAAQ,SAAS,GAAvE;AAAA,EACb;AAEA,QAAM,gBAA4B;AAAA,IAChC,MAAM,sBAAsB,QAAQ;AAAA,IACpC,OAAO,QAAQ,SAAS;AACtB,UAAI,CAAC,QAAQ,OAAO;AAClB,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,gBAAgB,UAAU;AACzC,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,MACT;AAEA,iBAAW,UAAU,eAAe;AAClC,mCAA2B,QAAQ;AAAA,UACjC;AAAA,UACA,aAAa;AAAA,UACb,YAAY,QAAQ;AAAA,QACtB,CAAC;AAAA,MACH;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,YAAY,QAAQ;AACxB,UAAI,CAAC,OAAO,WAAW,CAAC,QAAQ,YAAY;AAC1C;AAAA,MACF;AAEA,YAAM,QAAQ,WAAW;AAAA,QACvB,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,kBAAkB;AAAA,IACvB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,eAAe,QAAQ;AAAA,IACvB,UAAU;AAAA,IACV,MAAM,MAAM,SAAS;AACnB,UAAI,CAAC,QAAQ,SAAS,MAAM,UAAU,CAAC,QAAQ,UAAU;AACvD;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,QAAQ,SAAS;AAAA,QACrC,MAAM,QAAQ,UAAU,QAAQ,QAAQ,IAAI;AAAA,QAC5C,KAAK,QAAQ;AAAA,MACf,CAAC;AACD,YAAM,SAAS,qBAAqB,MAAM,QAAQ,MAAM;AACxD,cAAQ,IAAI,KAAK,GAAG,QAAQ,kBAAkB;AAAA,QAC5C,QAAQ,MAAM;AAAA,MAChB,CAAC;AACD,YAAM,QAAQ,QAAQ,YAAY;AAChC,cAAM,MAAM,SAAS,KAAK;AAC1B,cAAM,UAAU;AAChB,cAAM,SAAS;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,cAAc,IAAI,CAAC,YAAY;AAAA,MACrC,MAAM,GAAG,MAAM;AAAA,MACf,SAAS;AAAA,MACT,SAAS;AAAA,MACT,MAAM,QAAQ,SAAS;AACrB,cAAM,SAAS,gBAAgB,UAAU;AACzC,YAAI,CAAC,QAAQ;AACX,iBAAO,SAAS;AAAA,YACd;AAAA,cACE,OAAO;AAAA,cACP;AAAA,YACF;AAAA,YACA,EAAE,QAAQ,IAAI;AAAA,UAChB;AAAA,QACF;AAEA,eAAO,yBAAyB,SAAS,MAAM;AAAA,MACjD;AAAA,IACF,EAAE;AAAA,IACF,SAAS,CAAC,eAAe,GAAI,QAAQ,WAAW,CAAC,CAAE;AAAA,EACrD,CAAC;AACH;AAtGgB;AAwGT,SAAS,2BACd,QACA,OAKM;AACN,QAAM,SAAS,qBAAqB,MAAM,MAAM;AAChD,QAAM,cAAc,0BAA0B,MAAM,WAAW;AAC/D,QAAM,OAAO,OAAO,QAAQ,CAAC;AAC7B,QAAM,SAAS,KAAK,UAAU,CAAC;AAC/B,QAAM,QAAQ,OAAO,SAAS,CAAC;AAE/B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI;AAAA,MACR,iCAAiC,WAAW;AAAA,IAC9C;AAAA,EACF;AAEA,SAAO,OAAO;AAAA,IACZ,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG;AAAA,QACH,CAAC,WAAW,GAAG;AAAA,UACb,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,IAAI,MAAM,eAAe;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAlCgB;AAoChB,eAAsB,yBACpB,SACA,QACA,UAAiC,CAAC,GACf;AACnB,QAAM,iBAAiB,qBAAqB,MAAM;AAClD,QAAM,cAAc,IAAI,IAAI,QAAQ,GAAG;AACvC,QAAM,YAAY,IAAI,IAAI,GAAG,YAAY,QAAQ,GAAG,YAAY,MAAM,IAAI,cAAc;AACxF,QAAM,UAAU,0BAA0B,QAAQ,SAAS,WAAW;AACtE,QAAM,SAAS,QAAQ,OAAO,YAAY;AAC1C,QAAM,OAA0C;AAAA,IAC9C;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,QAAQ,QAAQ;AAAA,EAClB;AAEA,MAAI,WAAW,SAAS,WAAW,UAAU,QAAQ,MAAM;AACzD,SAAK,OAAO,QAAQ;AACpB,SAAK,SAAS;AAAA,EAChB;AAEA,MAAI;AACF,UAAM,WAAW,OAAO,QAAQ,SAAS,WAAW,OAAO,WAAW,IAAI;AAC1E,UAAM,kBAAkB,IAAI,QAAQ,SAAS,OAAO;AACpD,0BAAsB,eAAe;AASrC,UAAM,iBAAiB,gBACpB,IAAI,kBAAkB,GACrB,YAAY,EACb,MAAM,GAAG,EACT,IAAI,CAAC,WAAW,OAAO,KAAK,CAAC,EAC7B,OAAO,OAAO;AACjB,QAAI,eAAkD,SAAS;AAC/D,QAAI,SAAS,QAAQ,kBAAkB,eAAe,QAAQ;AAC5D,UAAI,eAAe,MAAM,CAAC,WAAW,wBAAwB,SAAS,MAAM,CAAC,GAAG;AAC9E,wBAAgB,OAAO,kBAAkB;AACzC,wBAAgB,OAAO,gBAAgB;AAAA,MACzC,WACE,eAAe,SAAS,MAAM,KAC9B,eAAe;AAAA,QACb,CAAC,WAAW,wBAAwB,SAAS,MAAM,KAAK,WAAW;AAAA,MACrE,GACA;AACA,cAAM,EAAE,SAAS,KAAK,IAAI,MAAM,mBAAmB,SAAS,IAAI;AAChE,uBAAe;AACf,YAAI,SAAS;AACX,0BAAgB,OAAO,kBAAkB;AACzC,0BAAgB,OAAO,gBAAgB;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AACA,yBAAqB,iBAAiB,gBAAgB,YAAY,MAAM;AAExE,WAAO,IAAI,SAAS,cAAc;AAAA,MAChC,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS;AAAA,MACrB,SAAS;AAAA,IACX,CAAC;AAAA,EACH,SAAS,OAAO;AACd,QAAI,QAAQ,OAAO,WAAW,aAAa,KAAK,GAAG;AACjD,YAAM;AAAA,IACR;AAEA,WAAO,SAAS;AAAA,MACd;AAAA,QACE,OAAO;AAAA,MACT;AAAA,MACA,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;AA9EsB;AAgFtB,eAAsB,yBACpB,SACkC;AAClC,QAAM,YAAY,QAAQ,aAAa;AACvC,QAAM,gBAAgB,QAAQ,iBAAiB;AAC/C,QAAM,cAAc,QAAQ,SAAS,qBAAqB,QAAQ,MAAM,IAAI;AAC5E,MAAI,SAAS;AACb,MAAI,UAAU;AACd,MAAI,oBAAoB;AAExB,QAAM,QAAQ,MAAM,QAAQ,SAAS,CAAC,GAAI,QAAQ,QAAQ,CAAC,CAAE,GAAG;AAAA,IAC9D,KAAK,QAAQ;AAAA,IACb,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,GAAG,QAAQ;AAAA,IACb;AAAA,IACA,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,EAClC,CAAC;AAED,QAAM,SAAS,MAAM,IAAI,QAAgB,CAAC,eAAe,WAAW;AAClE,QAAI;AAEJ,UAAM,SAAS,6BAAM;AACnB,UAAI,QAAS;AACb,gBAAU;AACV,mBAAa,KAAK;AAClB,YAAM,IAAI,SAAS,OAAO;AAC1B,YAAM,IAAI,QAAQ,MAAM;AAAA,IAC1B,GANe;AAQf,UAAM,UAAU,8BAAO,cAAsB;AAC3C,UAAI,WAAW,kBAAmB;AAClC,0BAAoB;AACpB,UAAI;AACF,cAAM,aAAa,qBAAqB,SAAS;AACjD,cAAM,oBAAoB,YAAY,QAAQ,YAAY,WAAW,KAAK;AAC1E,eAAO;AACP,sBAAc,UAAU;AAAA,MAC1B,SAAS,OAAO;AACd,eAAO;AACP,uBAAe,KAAK;AACpB,eAAO,KAAK;AAAA,MACd;AAAA,IACF,GAbgB;AAehB,YAAQ,WAAW,MAAM;AACvB,aAAO;AACP,qBAAe,KAAK;AACpB,aAAO,IAAI,MAAM,GAAG,QAAQ,KAAK,gCAAgC,SAAS,KAAK,CAAC;AAAA,IAClF,GAAG,SAAS;AAEZ,UAAM,UAAU,wBAAC,UAAiB;AAChC,aAAO;AACP,aAAO,KAAK;AAAA,IACd,GAHgB;AAKhB,UAAM,SAAS,wBAAC,MAAqB,WAAkC;AACrE,aAAO;AACP;AAAA,QACE,IAAI;AAAA,UACF,GAAG,QAAQ,KAAK,qCAAqC,OAAO,IAAI,CAAC,YAAY,OAAO,MAAM,CAAC;AAAA,QAC7F;AAAA,MACF;AAAA,IACF,GAPe;AASf,UAAM,SAAS,wBAAC,OAAe,WAAgC;AAC7D,YAAM,OAAO,MAAM,SAAS,MAAM;AAClC,eAAS,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,MAAO;AACzC,wBAAkB,MAAM,QAAQ,QAAQ,QAAQ;AAEhD,UAAI,CAAC,eAAe,QAAQ,eAAe;AACzC,cAAM,YAAY,QAAQ,cAAc,MAAM;AAC9C,YAAI,WAAW;AACb,eAAK,QAAQ,SAAS;AAAA,QACxB;AAAA,MACF;AAAA,IACF,GAXe;AAaf,UAAM,KAAK,SAAS,OAAO;AAC3B,UAAM,KAAK,QAAQ,MAAM;AACzB,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB,OAAO,OAAO,QAAQ,CAAC;AACnE,UAAM,QAAQ,GAAG,QAAQ,CAAC,UAAkB,OAAO,OAAO,QAAQ,CAAC;AAEnE,QAAI,aAAa;AACf,WAAK,QAAQ,WAAW;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,SAAS;AAAA,IACT,MAAM,OAAO;AACX,UAAI,MAAM,aAAa,QAAQ,MAAM,eAAe,MAAM;AACxD;AAAA,MACF;AAEA,YAAM,KAAK,SAAS;AACpB,YAAM,SAAS,MAAM,iBAAiB,OAAO,aAAa;AAC1D,UAAI,CAAC,UAAU,MAAM,aAAa,QAAQ,MAAM,eAAe,MAAM;AACnE,cAAM,KAAK,SAAS;AACpB,cAAM,iBAAiB,OAAO,aAAa;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;AAxGsB;AA0GtB,eAAsB,8BAA8B,OAAO,aAA8B;AACvF,SAAO,MAAM,IAAI,QAAgB,CAAC,aAAa,WAAW;AACxD,UAAM,SAAS,gBAAgB;AAC/B,WAAO,MAAM;AACb,WAAO,KAAK,SAAS,MAAM;AAC3B,WAAO,OAAO,GAAG,MAAM,MAAM;AAC3B,YAAM,UAAU,OAAO,QAAQ;AAC/B,UAAI,CAAC,WAAW,OAAO,YAAY,UAAU;AAC3C,eAAO,MAAM;AACb,eAAO,IAAI,MAAM,2CAA2C,CAAC;AAC7D;AAAA,MACF;AAEA,YAAM,OAAO,QAAQ;AACrB,aAAO,MAAM,CAAC,UAAU;AACtB,YAAI,MAAO,QAAO,KAAK;AAAA,YAClB,aAAY,IAAI;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,CAAC;AACH;AApBsB;AAsBtB,eAAsB,yBACpB,aACA,aACA,SACiB;AACjB,QAAM,OAAO,QAAQ,WAAW;AAChC,QAAM,iBAAiB,cAAc,KAAK,MAAM,cAAc,CAAC;AAC/D,MAAI;AAEJ,MAAI;AACF,sBAAkB,eAAe,QAAQ,GAAG,WAAW,eAAe;AAAA,EACxE,QAAQ;AACN,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,yDAAyD,IAAI;AAAA,IAC7E;AAAA,EACF;AAEA,QAAM,cAAc,KAAK,MAAM,MAAM,SAAS,iBAAiB,MAAM,CAAC;AAGtE,QAAM,MACJ,OAAO,YAAY,QAAQ,WACvB,YAAY,MACZ,YAAY,MAAM,WAAW,YAAY,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,WAAW;AAE/E,MAAI,CAAC,KAAK;AACR,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,iCAAiC,WAAW,WAAW;AAAA,IACvE;AAAA,EACF;AAEA,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,aAAa,QAAQ,aAAa,GAAG;AAC3C,MACE,SAAS,aAAa,UAAU,EAAE,WAAW,IAAI,KACjD,WAAW,SAAS,aAAa,UAAU,CAAC,GAC5C;AACA,UAAM,IAAI,MAAM,GAAG,WAAW,6CAA6C;AAAA,EAC7E;AAEA,SAAO;AACT;AAzCsB;AA2Cf,SAAS,qBAAqB,OAAuB;AAC1D,QAAM,QAAQ,MAAM,KAAK;AACzB,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,uCAAuC;AAAA,EACzD;AAEA,QAAM,MAAM,IAAI,IAAI,KAAK;AACzB,MAAI,IAAI,aAAa,WAAW,IAAI,aAAa,UAAU;AACzD,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,MAAI,IAAI,YAAY,IAAI,UAAU;AAChC,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,MAAI,IAAI,aAAa,OAAO,IAAI,UAAU,IAAI,MAAM;AAClD,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AAEA,SAAO,IAAI;AACb;AAlBgB;AAoBT,SAAS,0BAA0B,OAAuB;AAC/D,QAAM,aAAa,IAAI,MAAM,KAAK,CAAC,GAAG,QAAQ,WAAW,GAAG;AAC5D,MAAI,eAAe,KAAK;AACtB,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,SAAO,WAAW,QAAQ,OAAO,EAAE;AACrC;AANgB;AAQhB,SAAS,sBAAsB,OAAuB;AACpD,QAAM,WAAW,MAAM,KAAK;AAC5B,MAAI,CAAC,YAAY,CAAC,0BAA0B,KAAK,QAAQ,GAAG;AAC1D,UAAM,IAAI,MAAM,gEAAgE;AAAA,EAClF;AACA,SAAO;AACT;AANS;AAQT,SAAS,mBAAmB,OAAkE;AAC5F,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,UAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO;AAC7F;AAHS;AAKT,SAAS,wBACP,kBACA,UACoB;AACpB,MAAI,kBAAkB;AACpB,WAAO,qBAAqB,gBAAgB;AAAA,EAC9C;AAEA,aAAW,WAAW,UAAU;AAC9B,UAAM,QAAQ,QAAQ,IAAI,OAAO;AACjC,QAAI,OAAO,KAAK,GAAG;AACjB,aAAO,qBAAqB,KAAK;AAAA,IACnC;AAAA,EACF;AAEA,SAAO;AACT;AAhBS;AAkBT,SAAS,0BAA0B,OAAgB,aAA2B;AAC5E,QAAM,UAAU,IAAI,QAAQ,KAAK;AACjC,wBAAsB,OAAO;AAC7B,UAAQ,OAAO,MAAM;AACrB,UAAQ,OAAO,gBAAgB;AAG/B,UAAQ,IAAI,mBAAmB,UAAU;AACzC,MAAI,CAAC,QAAQ,IAAI,kBAAkB,EAAG,SAAQ,IAAI,oBAAoB,YAAY,IAAI;AACtF,MAAI,CAAC,QAAQ,IAAI,mBAAmB,GAAG;AACrC,YAAQ,IAAI,qBAAqB,YAAY,SAAS,QAAQ,KAAK,EAAE,CAAC;AAAA,EACxE;AACA,SAAO;AACT;AAbS;AAeT,SAAS,sBAAsB,SAAwB;AACrD,QAAM,oBAAoB,QAAQ,IAAI,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;AACpE,aAAW,UAAU,mBAAmB;AACtC,UAAM,SAAS,OAAO,KAAK;AAC3B,QAAI,gCAAgC,KAAK,MAAM,GAAG;AAChD,cAAQ,OAAO,MAAM;AAAA,IACvB;AAAA,EACF;AAEA,aAAW,UAAU,oBAAoB;AACvC,YAAQ,OAAO,MAAM;AAAA,EACvB;AACF;AAZS;AAcT,eAAe,mBAAmB,MAG/B;AACD,QAAM,SAAS,KAAK,UAAU;AAC9B,QAAM,WAAyB,CAAC;AAChC,MAAI,QAAQ;AACZ,MAAI;AACF,WAAO,QAAQ,iBAAiB,YAAY;AAC1C,YAAM,EAAE,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK;AAC1C,UAAI,KAAM;AACV,UAAI,CAAC,SAAS,MAAM,eAAe,EAAG;AACtC,eAAS,KAAK,KAAK;AACnB,eAAS,MAAM;AAAA,IACjB;AAAA,EACF,QAAQ;AAAA,EAGR;AACA,QAAM,YAAY,YAAY,QAAQ;AACtC,QAAM,UAAU,CAAC,yBAAyB,SAAS;AACnD,QAAM,UAAU,IAAI,eAA2B;AAAA,IAC7C,MAAM,YAAY;AAChB,UAAI,UAAU,aAAa,EAAG,YAAW,QAAQ,SAAS;AAAA,IAC5D;AAAA,IACA,MAAM,KAAK,YAAY;AACrB,UAAI;AACF,cAAM,EAAE,OAAO,KAAK,IAAI,MAAM,OAAO,KAAK;AAC1C,YAAI,MAAM;AACR,qBAAW,MAAM;AACjB;AAAA,QACF;AACA,mBAAW,QAAQ,SAAS,IAAI,WAAW,CAAC;AAAA,MAC9C,SAAS,OAAO;AACd,mBAAW,MAAM,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,IACA,OAAO,QAAQ;AACb,aAAO,OAAO,MAAM,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACtC;AAAA,EACF,CAAC;AACD,SAAO,EAAE,SAAS,MAAM,QAAQ;AAClC;AA1Ce;AA4Cf,SAAS,YAAY,QAAkC;AACrD,MAAI,OAAO,WAAW,EAAG,QAAO,IAAI,WAAW,CAAC;AAChD,MAAI,OAAO,WAAW,EAAG,QAAO,OAAO,CAAC;AACxC,QAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,YAAY,CAAC;AACrE,QAAM,SAAS,IAAI,WAAW,KAAK;AACnC,MAAI,SAAS;AACb,aAAW,SAAS,QAAQ;AAC1B,WAAO,IAAI,OAAO,MAAM;AACxB,cAAU,MAAM;AAAA,EAClB;AACA,SAAO;AACT;AAXS;AAaT,SAAS,yBAAyB,QAA6B;AAC7D,MAAI,OAAO,aAAa,iBAAiB,WAAY,QAAO;AAC5D,MAAI,kBAAkB;AACtB,WAAS,QAAQ,GAAG,QAAQ,iBAAiB,YAAY,SAAS;AAChE,QAAI,OAAO,KAAK,MAAM,iBAAiB,KAAK,GAAG;AAC7C,wBAAkB;AAClB;AAAA,IACF;AAAA,EACF;AACA,MAAI,gBAAiB,QAAO;AAO5B,SACE,OAAO,CAAC,KAAK,MACb,OAAO,CAAC,KAAK,MACb,OAAO,CAAC,MAAM,MACd,OAAO,CAAC,MAAM,MACd,OAAO,CAAC,MAAM;AAElB;AAvBS;AAyBT,SAAS,qBACP,SACA,gBACA,gBACM;AACN,QAAM,WAAW,QAAQ,IAAI,UAAU;AACvC,MAAI,CAAC,SAAU;AAEf,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,UAAU,cAAc;AAC5C,QAAI,IAAI,WAAW,gBAAgB;AACjC,cAAQ,IAAI,YAAY,GAAG,cAAc,GAAG,IAAI,QAAQ,GAAG,IAAI,MAAM,GAAG,IAAI,IAAI,EAAE;AAAA,IACpF;AAAA,EACF,QAAQ;AAAA,EAER;AACF;AAhBS;AAkBT,SAAS,aAAa,OAAyB;AAC7C,SAAO,iBAAiB,SAAS,MAAM,SAAS;AAClD;AAFS;AAIT,eAAe,oBACb,QACA,YACA,WACA,OACe;AACf,QAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,QAAM,YAAY,IAAI,IAAI,cAAc,KAAK,MAAM;AAEnD,SAAO,KAAK,IAAI,IAAI,UAAU;AAC5B,QAAI,MAAM,aAAa,QAAQ,MAAM,eAAe,MAAM;AACxD,YAAM,IAAI,MAAM,qEAAqE;AAAA,IACvF;AAEA,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,QAAQ,WAAW,MAAM,WAAW,MAAM,GAAG,GAAG;AACtD,QAAI;AACF,YAAM,MAAM,WAAW;AAAA,QACrB,QAAQ,WAAW;AAAA,QACnB,UAAU;AAAA,MACZ,CAAC;AACD;AAAA,IACF,QAAQ;AACN,YAAM,MAAM,GAAG;AAAA,IACjB,UAAE;AACA,mBAAa,KAAK;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,IAAI,MAAM,oBAAoB,MAAM,6CAA6C;AACzF;AA9Be;AAgCf,SAAS,kBACP,MACA,QACA,UACM;AACN,MAAI,CAAC,SAAU;AACf,aAAW,QAAQ,KAAK,MAAM,OAAO,GAAG;AACtC,UAAM,QAAQ,KAAK,QAAQ;AAC3B,QAAI,MAAO,UAAS,OAAO,MAAM;AAAA,EACnC;AACF;AAVS;AAYT,SAAS,eAAe,OAA2B;AACjD,MAAI,MAAM,aAAa,QAAQ,MAAM,eAAe,MAAM;AACxD,UAAM,KAAK,SAAS;AAAA,EACtB;AACF;AAJS;AAMT,eAAe,iBAAiB,OAAqB,WAAqC;AACxF,MAAI,MAAM,aAAa,QAAQ,MAAM,eAAe,KAAM,QAAO;AACjE,SAAO,MAAM,IAAI,QAAiB,CAAC,gBAAgB;AACjD,UAAM,QAAQ,WAAW,MAAM;AAC7B,YAAM,IAAI,QAAQ,MAAM;AACxB,kBAAY,KAAK;AAAA,IACnB,GAAG,SAAS;AACZ,UAAM,SAAS,6BAAM;AACnB,mBAAa,KAAK;AAClB,kBAAY,IAAI;AAAA,IAClB,GAHe;AAIf,UAAM,KAAK,QAAQ,MAAM;AAAA,EAC3B,CAAC;AACH;AAbe;AAef,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,iBAAiB,WAAW,cAAc,EAAE,CAAC;AACnE;AAFS;","names":[]}