{"version":3,"file":"index.base.mjs","sources":["../src/error.ts","../src/print.ts","../src/utils.ts","../src/ajv.ts","../src/resolve.ts","../src/generate.ts"],"sourcesContent":["import {\n  isRecord,\n  getManifestMeta,\n  type ManifestMeta\n} from \"@kosko/common-utils\";\nimport extractStack from \"extract-stack\";\nimport type { ManifestPosition } from \"./base\";\n\nconst STACK_INDENT = \"    \";\n\nfunction decorateErrorStack(err: Error, values: Record<string, string>) {\n  const origStack = extractStack(err.stack);\n  err.stack = `${err.name}: ${err.message}`;\n\n  for (const [key, value] of Object.entries(values)) {\n    err.stack += `\\n${STACK_INDENT}${key}: ${value}`;\n  }\n\n  if (origStack) err.stack += \"\\n\" + origStack;\n}\n\nfunction generateCauseMessage(cause: unknown) {\n  if (typeof cause === \"string\") return cause;\n\n  if (isRecord(cause)) {\n    const { name, message, stack } = cause;\n\n    if (typeof message !== \"string\") {\n      return;\n    }\n\n    let result = `${(typeof name === \"string\" && name) || \"Error\"}: ${message}`;\n\n    if (typeof stack === \"string\") {\n      const extracted = extractStack(stack);\n\n      if (extracted) {\n        result +=\n          \"\\n\" +\n          extracted\n            .split(\"\\n\")\n            .map((line) => STACK_INDENT + line)\n            .join(\"\\n\");\n      }\n    }\n\n    return result;\n  }\n}\n\n/**\n * @public\n */\nexport interface ResolveErrorOptions {\n  position?: ManifestPosition;\n  cause?: unknown;\n  value?: unknown;\n}\n\n/**\n * @public\n */\nexport class ResolveError extends Error {\n  public readonly position?: ManifestPosition;\n  public readonly metadata?: ManifestMeta;\n  public readonly cause?: unknown;\n  public readonly value?: unknown;\n\n  public constructor(message: string, options: ResolveErrorOptions = {}) {\n    super(message);\n\n    this.position = options.position;\n    this.cause = options.cause;\n    this.value = options.value;\n    this.metadata = getManifestMeta(this.value);\n\n    const cause = generateCauseMessage(this.cause);\n\n    decorateErrorStack(this, {\n      ...(this.position && {\n        Path: this.position.path,\n        ...(this.position.index.length && {\n          Index: `[${this.position.index.join(\", \")}]`\n        })\n      }),\n      ...(this.metadata && {\n        Kind: `${this.metadata.apiVersion}/${this.metadata.kind}`,\n        ...(this.metadata.namespace && {\n          Namespace: this.metadata.namespace\n        }),\n        Name: this.metadata.name\n      }),\n      ...(cause && { Cause: cause })\n    });\n  }\n}\n\nResolveError.prototype.name = \"ResolveError\";\n\n/**\n * @public\n */\nexport interface GenerateErrorOptions {\n  path?: string;\n  cause?: unknown;\n}\n\n/**\n * @public\n */\nexport class GenerateError extends Error {\n  public readonly path?: string;\n  public readonly cause?: unknown;\n\n  constructor(message: string, options: GenerateErrorOptions = {}) {\n    super(message);\n\n    this.path = options.path;\n    this.cause = options.cause;\n\n    const cause = generateCauseMessage(this.cause);\n\n    decorateErrorStack(this, {\n      ...(this.path && { Path: this.path }),\n      ...(cause && { Cause: cause })\n    });\n  }\n}\n\nGenerateError.prototype.name = \"GenerateError\";\n","import yaml from \"js-yaml\";\nimport stringify from \"fast-safe-stringify\";\nimport { Result } from \"./base\";\n\n/**\n * @public\n */\nexport interface Writer {\n  write(data: string): void;\n}\n\n/**\n * @public\n */\nexport enum PrintFormat {\n  YAML = \"yaml\",\n  JSON = \"json\"\n}\n\n/**\n * @public\n */\nexport interface PrintOptions {\n  format: PrintFormat;\n  writer: Writer;\n}\n\ntype Printer<T> = (writer: Writer, data: T) => void;\ntype PrinterMap<T> = Record<PrintFormat, Printer<T>>;\n\nfunction stringifyYAML(data: unknown): string {\n  return yaml.dump(data, { noRefs: true });\n}\n\nfunction stringifyJSON(data: unknown): string {\n  return stringify(data, undefined, \"  \");\n}\n\nconst printers: PrinterMap<unknown> = {\n  [PrintFormat.YAML](writer, data) {\n    writer.write(stringifyYAML(data));\n  },\n  [PrintFormat.JSON](writer, data) {\n    writer.write(stringifyJSON(data));\n  }\n};\n\nconst arrPrinters: PrinterMap<unknown[]> = {\n  [PrintFormat.YAML](writer, data) {\n    for (const item of data) {\n      writer.write(\"---\\n\" + stringifyYAML(item));\n    }\n  },\n  [PrintFormat.JSON](writer, data) {\n    const list = { apiVersion: \"v1\", kind: \"List\", items: data };\n    writer.write(stringifyJSON(list));\n  }\n};\n\n/**\n * Prints `result` to a {@link Writer}.\n *\n * @public\n */\nexport function print(result: Result, { format, writer }: PrintOptions): void {\n  const data = result.manifests.map((manifest) => manifest.data);\n  if (!data.length) return;\n\n  if (data.length > 1) {\n    arrPrinters[format](writer, data);\n  } else {\n    printers[format](writer, data[0]);\n  }\n}\n","export function validateConcurrency(value = 10): number {\n  if (value < 1) {\n    throw new Error(\"Concurrency must be greater than 0\");\n  }\n\n  return value;\n}\n","import { isRecord } from \"@kosko/common-utils\";\nimport stringify from \"fast-safe-stringify\";\nimport { Issue } from \"./base\";\n\n// https://github.com/ajv-validator/ajv/blob/v8.11.0/lib/types/index.ts#L85\nexport interface AjvErrorObject {\n  instancePath: string;\n  message?: string;\n  params: unknown;\n  keyword: \"type\" | \"enum\" | \"oneOf\";\n}\n\n// https://github.com/ajv-validator/ajv/blob/v8.11.0/lib/runtime/validation_error.ts\nexport interface AjvValidationError {\n  errors: readonly AjvErrorObject[];\n}\n\nexport function isAjvValidationError(\n  value: unknown\n): value is AjvValidationError {\n  return (\n    isRecord(value) &&\n    value.ajv === true &&\n    value.validation === true &&\n    Array.isArray(value.errors)\n  );\n}\n\nfunction stringifyAjvErrorObject(err: AjvErrorObject) {\n  let msg = err.instancePath;\n\n  if (err.message) {\n    msg += ` ${err.message}`;\n  }\n\n  if (\n    err.keyword === \"enum\" &&\n    isRecord(err.params) &&\n    Array.isArray(err.params.allowedValues)\n  ) {\n    msg += `: ${stringify(err.params.allowedValues)}`;\n  }\n\n  return msg;\n}\n\nexport function ajvValidationErrorToIssues(err: AjvValidationError): Issue[] {\n  return err.errors.map((error) => ({\n    message: stringifyAjvErrorObject(error),\n    severity: \"error\"\n  }));\n}\n","import type { Issue, Manifest } from \"./base\";\nimport logger, { LogLevel } from \"@kosko/log\";\nimport { ResolveError } from \"./error\";\nimport { isRecord, getManifestMeta } from \"@kosko/common-utils\";\nimport pLimit from \"p-limit\";\nimport { validateConcurrency } from \"./utils\";\nimport { ajvValidationErrorToIssues, isAjvValidationError } from \"./ajv\";\n\ninterface Validator {\n  validate(): void | Promise<void>;\n}\n\nfunction isValidator(value: unknown): value is Validator {\n  return !!value && typeof (value as any).validate === \"function\";\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n  if (value instanceof Promise) return true;\n\n  return (\n    !!value &&\n    (typeof value === \"function\" || typeof value === \"object\") &&\n    typeof (value as any).then === \"function\"\n  );\n}\n\nfunction isIterable(value: unknown): value is Iterable<unknown> {\n  return (\n    typeof value === \"object\" &&\n    value != null &&\n    typeof (value as any)[Symbol.iterator] === \"function\"\n  );\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n  return isRecord(value) && typeof value[Symbol.asyncIterator] === \"function\";\n}\n\nexport class ReportInterrupt {\n  constructor(public readonly manifest: Manifest) {}\n}\n\ntype ResolvePromiseResult =\n  | {\n      ok: true;\n      manifests: Manifest[];\n    }\n  | {\n      ok: false;\n      error: unknown;\n    };\n\nexport async function handleResolvePromises(\n  promises: readonly Promise<Manifest[]>[],\n  bail?: boolean\n): Promise<Manifest[]> {\n  // Use a map to avoid sparse array\n  const resultMap = new Map<number, ResolvePromiseResult>();\n\n  try {\n    await Promise.all(\n      promises.map(async (promise, index) => {\n        try {\n          resultMap.set(index, { ok: true, manifests: await promise });\n        } catch (err) {\n          if (err instanceof ReportInterrupt) {\n            resultMap.set(index, { ok: true, manifests: [err.manifest] });\n\n            // Propagate ValidationInterrupt\n            throw err;\n          }\n\n          // Throw the error to stop the loop\n          if (bail) throw err;\n\n          resultMap.set(index, { ok: false, error: err });\n        }\n      })\n    );\n  } catch (err) {\n    // Propagate errors\n    if (!(err instanceof ReportInterrupt)) throw err;\n  }\n\n  const resultArr = [...resultMap.entries()]\n    // Sort by index\n    .sort((a, b) => a[0] - b[0])\n    .map(([, value]) => value);\n\n  const manifests: Manifest[] = [];\n  const errors: unknown[] = [];\n\n  for (const result of resultArr) {\n    if (result.ok) {\n      manifests.push(...result.manifests);\n    } else {\n      errors.push(result.error);\n    }\n  }\n\n  if (errors.length === 1) {\n    throw errors[0];\n  } else if (errors.length) {\n    throw new AggregateError(errors);\n  }\n\n  return manifests;\n}\n\nexport function createManifest({\n  position,\n  data,\n  bail,\n  throwOnError\n}: Pick<Manifest, \"position\" | \"data\"> &\n  Pick<ResolveOptions, \"bail\" | \"throwOnError\">): Manifest {\n  const issues: Issue[] = [];\n\n  return {\n    position,\n    data,\n    metadata: getManifestMeta(data),\n    issues,\n    report(issue) {\n      const isError = issue.severity === \"error\";\n\n      if (isError && throwOnError) {\n        if (issue.cause instanceof ResolveError) throw issue.cause;\n\n        throw new ResolveError(issue.message, {\n          position: this.position,\n          value: this.data,\n          cause: issue.cause\n        });\n      }\n\n      issues.push(issue);\n\n      // Throw to stop validation\n      if (isError && bail) {\n        throw new ReportInterrupt(this);\n      }\n    }\n  };\n}\n\n/**\n * @public\n */\nexport interface ResolveOptions {\n  /**\n   * Enable validation.\n   *\n   * @defaultValue `true`\n   */\n  validate?: boolean;\n\n  /**\n   * Source path of a manifest.\n   *\n   * @defaultValue `\"\"`\n   */\n  path?: string;\n\n  /**\n   * Source index of a manifest.\n   *\n   * @defaultValue `[]`\n   */\n  index?: number[];\n\n  /**\n   * Stop immediately when an error occurred.\n   */\n  bail?: boolean;\n\n  /**\n   * Maximum number of concurrent tasks.\n   *\n   * @defaultValue `10`\n   */\n  concurrency?: number;\n\n  /**\n   * Transform a manifest. This function is called when a new manifest is found,\n   * and before the validation. The return value will override the data of the\n   * manifest. If the return value is `undefined` or `null`, the manifest will\n   * be removed from the result.\n   */\n  transform?(manifest: Manifest): unknown;\n\n  /**\n   * Throw an error when an issue with `error` severity is found.\n   */\n  throwOnError?: boolean;\n\n  /**\n   * Validate a manifest. This function is called after `validate` method of\n   * a manifest. No matter `validate` method exists or not, this function will\n   * be called.\n   *\n   * If the `bail` option is `true`, and `validate` method failed, this function\n   * will not be called.\n   */\n  validateManifest?(manifest: Manifest): void | Promise<void>;\n\n  /**\n   * Do not transform Ajv errors to issues.\n   */\n  keepAjvErrors?: boolean;\n}\n\nasync function doResolve(\n  value: unknown,\n  options: ResolveOptions\n): Promise<Manifest[]> {\n  const {\n    validate = true,\n    index = [],\n    path = \"\",\n    bail,\n    concurrency,\n    transform,\n    throwOnError,\n    validateManifest,\n    keepAjvErrors\n  } = options;\n  const limit = pLimit(validateConcurrency(concurrency));\n  const manifest = createManifest({\n    position: { path, index },\n    data: value,\n    bail,\n    throwOnError\n  });\n\n  if (typeof value === \"function\") {\n    let val: unknown;\n\n    try {\n      val = await value();\n    } catch (err) {\n      manifest.report({\n        severity: \"error\",\n        message: \"Input function value threw an error\",\n        cause: err\n      });\n      return [manifest];\n    }\n\n    return doResolve(val, options);\n  }\n\n  if (isPromiseLike(value)) {\n    let val: unknown;\n\n    try {\n      val = await value;\n    } catch (err) {\n      manifest.report({\n        severity: \"error\",\n        message: \"Input promise value rejected\",\n        cause: err\n      });\n      return [manifest];\n    }\n\n    return doResolve(val, options);\n  }\n\n  if (isIterable(value)) {\n    const promises: Promise<Manifest[]>[] = [];\n    let i = 0;\n\n    try {\n      for (const entry of value) {\n        promises.push(\n          limit(() => doResolve(entry, { ...options, index: [...index, i++] }))\n        );\n      }\n    } catch (err) {\n      manifest.report({\n        severity: \"error\",\n        message: \"Input iterable value threw an error\",\n        cause: err\n      });\n      return [manifest];\n    }\n\n    return handleResolvePromises(promises, bail);\n  }\n\n  if (isAsyncIterable(value)) {\n    const promises: Promise<Manifest[]>[] = [];\n    let i = 0;\n\n    try {\n      for await (const entry of value) {\n        promises.push(\n          limit(() => doResolve(entry, { ...options, index: [...index, i++] }))\n        );\n      }\n    } catch (err) {\n      manifest.report({\n        severity: \"error\",\n        message: \"Input async iterable value threw an error\",\n        cause: err\n      });\n      return [manifest];\n    }\n\n    return handleResolvePromises(promises, bail);\n  }\n\n  manifest.metadata = getManifestMeta(manifest.data);\n\n  if (typeof transform === \"function\") {\n    try {\n      const newValue = await transform(manifest);\n\n      // Remove the manifest if the return value is undefined or null\n      if (newValue == null) return [];\n\n      manifest.data = newValue;\n      manifest.metadata = getManifestMeta(newValue);\n    } catch (err) {\n      manifest.report({\n        severity: \"error\",\n        message: \"An error occurred in transform function\",\n        cause: err\n      });\n      return [manifest];\n    }\n  }\n\n  if (validate) {\n    logger.log(\n      LogLevel.Debug,\n      `Validating manifests ${index.join(\".\")} in ${path}`\n    );\n\n    if (isValidator(manifest.data)) {\n      try {\n        await manifest.data.validate();\n      } catch (err) {\n        if (!keepAjvErrors && isAjvValidationError(err)) {\n          for (const issue of ajvValidationErrorToIssues(err)) {\n            manifest.report(issue);\n          }\n        } else {\n          manifest.report({\n            severity: \"error\",\n            message: \"Validation error\",\n            cause: err\n          });\n        }\n      }\n    }\n\n    if (typeof validateManifest === \"function\") {\n      try {\n        await validateManifest(manifest);\n      } catch (err) {\n        // Propagate ValidationInterrupt thrown by reportIssue\n        if (err instanceof ReportInterrupt) throw err;\n\n        manifest.report({\n          severity: \"error\",\n          message: \"An error occurred in validateManifest function\",\n          cause: err\n        });\n      }\n    }\n  }\n\n  return [manifest];\n}\n\n/**\n * Flattens the input value and validate each values.\n *\n * @remarks\n * The `value` can be an object, an array, a `Promise`, a function, an async\n * function, an iterable, or an async iterable.\n *\n * @throws {@link ResolveError}\n * Thrown if an error occurred.\n *\n * @throws AggregateError\n * Thrown if multiple errors occurred.\n *\n * @public\n */\nexport async function resolve(\n  value: unknown,\n  options: ResolveOptions = {}\n): Promise<Manifest[]> {\n  try {\n    return await doResolve(value, options);\n  } catch (err) {\n    if (err instanceof ReportInterrupt) return [err.manifest];\n    throw err;\n  }\n}\n","import { importPath, resolvePath, getRequireExtensions } from \"@kosko/require\";\nimport type { Manifest, Result } from \"./base\";\nimport logger, { LogLevel } from \"@kosko/log\";\nimport {\n  ResolveOptions,\n  ReportInterrupt,\n  handleResolvePromises,\n  resolve,\n  createManifest\n} from \"./resolve\";\nimport { GenerateError, ResolveError } from \"./error\";\nimport { glob, GlobResult } from \"./glob\";\nimport pLimit from \"p-limit\";\nimport { validateConcurrency } from \"./utils\";\nimport { BUILD_TARGET } from \"@kosko/build-scripts\";\n\n/**\n * @public\n */\nexport interface GenerateOptions\n  extends Omit<ResolveOptions, \"path\" | \"index\"> {\n  /**\n   * Path of the component folder.\n   */\n  path: string;\n\n  /**\n   * Glob patterns of component names.\n   *\n   * @example\n   * ```js\n   * [\"*\"]\n   * ```\n   *\n   * @see {@link https://en.wikipedia.org/wiki/Glob_(programming) | glob pattern}\n   */\n  components: readonly string[];\n\n  /**\n   * File extensions of components.\n   *\n   * @example\n   * ```js\n   * [\"js\", \"json\"]\n   * ```\n   */\n  extensions?: readonly string[];\n\n  /**\n   * Validate all manifests after resolving.\n   */\n  validateAllManifests?(manifests: readonly Manifest[]): void | Promise<void>;\n}\n\nfunction validateExtensions(\n  extensions: readonly string[] = getRequireExtensions().map((ext) =>\n    ext.substring(1)\n  )\n) {\n  if (!extensions.length) {\n    throw new GenerateError(\"extensions must not be empty\");\n  }\n\n  for (const ext of extensions) {\n    if (ext.startsWith(\".\")) {\n      throw new GenerateError(\n        `extension must not be started with \".\": \"${ext}\"`\n      );\n    }\n  }\n\n  return extensions;\n}\n\n/**\n * Finds components with glob patterns in the specified path and returns exported\n * values from each components.\n *\n * @remarks\n * Extension names is optional in `options.components` because it's appended\n * automatically. (e.g. `foo` =\\> `foo?(.{js,json})`)\n *\n * Extensions are from `require.extensions`. You can require `ts-node/register`\n * to add support for `.ts` extension.\n *\n * Note that this function currently is only available on Node.js.\n *\n * @throws {@link GenerateError}\n * Thrown if an error occurred.\n *\n * @throws {@link ResolveError}\n * Propagated from {@link resolve} function.\n *\n * @throws AggregateError\n * Thrown if multiple errors occurred.\n *\n * @public\n * @see {@link resolve}\n */\nexport async function generate(options: GenerateOptions): Promise<Result> {\n  if (BUILD_TARGET === \"browser\") {\n    throw new Error(\"generate is only supported on Node.js\");\n  }\n\n  if (!options.components.length) {\n    throw new GenerateError(\"components must not be empty\");\n  }\n\n  const concurrency = validateConcurrency(options.concurrency);\n  const extensions = validateExtensions(options.extensions);\n  const extensionsWithDot = extensions.map((ext) => \".\" + ext);\n  const promises: Promise<Manifest[]>[] = [];\n  const limit = pLimit(concurrency);\n\n  function reportResolveError({\n    path,\n    message,\n    cause\n  }: {\n    path: string;\n    message: string;\n    cause: unknown;\n  }): Manifest[] {\n    const manifest = createManifest({\n      position: { path, index: [] },\n      data: undefined,\n      bail: options.bail,\n      throwOnError: options.throwOnError\n    });\n\n    manifest.report({\n      severity: \"error\",\n      message,\n      cause\n    });\n\n    return [manifest];\n  }\n\n  async function resolveFile(file: GlobResult): Promise<Manifest[]> {\n    logger.log(LogLevel.Debug, `Found component \"${file.relativePath}\"`);\n\n    let path: string | undefined;\n\n    try {\n      path = await resolvePath(file.absolutePath, {\n        extensions: extensionsWithDot\n      });\n    } catch (err) {\n      return reportResolveError({\n        path: file.absolutePath,\n        message: \"Module path resolve failed\",\n        cause: err\n      });\n    }\n\n    if (!path) {\n      logger.log(LogLevel.Debug, \"Module not found\", {\n        data: {\n          path: file.absolutePath,\n          extensions: extensionsWithDot\n        }\n      });\n\n      return [];\n    }\n\n    let value: unknown;\n\n    try {\n      const mod = await importPath(path);\n      value = mod.default;\n    } catch (err) {\n      return reportResolveError({\n        path,\n        message: \"Component value resolve failed\",\n        cause: err\n      });\n    }\n\n    return resolve(value, {\n      validate: options.validate,\n      bail: options.bail,\n      concurrency,\n      transform: options.transform,\n      throwOnError: options.throwOnError,\n      validateManifest: options.validateManifest,\n      keepAjvErrors: options.keepAjvErrors,\n      index: [],\n      path\n    });\n  }\n\n  for await (const file of glob({\n    path: options.path,\n    extensions,\n    patterns: options.components\n  })) {\n    promises.push(limit(() => resolveFile(file)));\n  }\n\n  const manifests = await handleResolvePromises(promises, options.bail);\n  const validateEnabled = options.validate ?? true;\n\n  if (validateEnabled && typeof options.validateAllManifests === \"function\") {\n    logger.log(LogLevel.Debug, \"Validating all manifests\");\n\n    try {\n      await options.validateAllManifests(manifests);\n    } catch (err) {\n      // Propagate ResolveError\n      if (err instanceof ResolveError) {\n        throw err;\n      }\n\n      if (!(err instanceof ReportInterrupt)) {\n        throw new GenerateError(\n          \"An error occurred in validateAllManifests function\",\n          { cause: err }\n        );\n      }\n    }\n  }\n\n  return { manifests };\n}\n"],"names":["STACK_INDENT","decorateErrorStack","err","values","origStack","extractStack","stack","key","value","name","message","Object","entries","generateCauseMessage","cause","isRecord","result","extracted","split","map","line","join","ResolveError","Error","options","position","metadata","getManifestMeta","Path","path","index","length","Index","Kind","apiVersion","kind","namespace","Namespace","Name","Cause","prototype","GenerateError","constructor","PrintFormat","stringifyYAML","data","yaml","dump","noRefs","stringifyJSON","stringify","undefined","printers","writer","write","arrPrinters","item","items","print","format","manifests","manifest","validateConcurrency","isAjvValidationError","ajv","validation","Array","isArray","errors","ajvValidationErrorToIssues","error","msg","instancePath","keyword","params","allowedValues","severity","ReportInterrupt","handleResolvePromises","promises","bail","resultMap","Map","Promise","all","promise","set","ok","resultArr","sort","a","b","push","createManifest","throwOnError","issues","report","issue","isError","doResolve","validate","concurrency","transform","validateManifest","keepAjvErrors","limit","pLimit","val","then","Symbol","iterator","i","entry","asyncIterator","newValue","logger","log","LogLevel","Debug","resolve","generate"],"mappings":";;;;;;;AAQA,IAAMA,YAAe,GAAA,MAAA,CAAA;AAErB,SAASC,kBAAAA,CAAmBC,GAAU,EAAEC,MAA8B,EAAA;IACpE,IAAMC,SAAAA,GAAYC,YAAaH,CAAAA,GAAAA,CAAII,KAAK,CAAA,CAAA;AAGxC,IAAA,KAAK,IAAM,CAACC,GAAAA,EAAKC,KAAM,CAAA,KAFvBN,IAAII,KAAK,GAAG,CAAC,EAAEJ,IAAIO,IAAI,CAAC,EAAE,EAAEP,IAAIQ,OAAO,CAAC,CAAC,EAEdC,OAAOC,OAAO,CAACT,MACxCD,CAAAA,EAAAA,GAAAA,CAAII,KAAK,IAAI,CAAC,EAAE,EAAEN,aAAa,EAAEO,GAAAA,CAAI,EAAE,EAAEC,MAAM,CAAC,CAAA;AAG9CJ,IAAAA,SAAAA,KAAWF,GAAAA,CAAII,KAAK,IAAI,OAAOF,SAAQ,CAAA,CAAA;AAC7C,CAAA;AAEA,SAASS,qBAAqBC,KAAc,EAAA;AAC1C,IAAA,IAAI,QAAiB,IAAjB,OAAOA,KAAAA,EAAoB,OAAOA,KAAAA,CAAAA;AAEtC,IAAA,IAAIC,SAASD,KAAQ,CAAA,EAAA;AACnB,QAAA,IAAM,EAAEL,IAAI,EAAEC,OAAO,EAAEJ,KAAK,EAAE,GAAGQ,KAAAA,CAAAA;QAEjC,IAAuB,QAAnB,IAAA,OAAOJ,OACT,EAAA,OAAA;AAGF,QAAA,IAAIM,MAAS,GAAA,CAAC,EAAmB,QAAhB,IAAA,OAAOP,IAAqBA,IAAAA,IAAAA,IAAS,OAAQ,CAAA,EAAE,EAAEC,OAAAA,CAAQ,CAAC,CAAA;QAE3E,IAAqB,QAAjB,IAAA,OAAOJ,KAAoB,EAAA;AAC7B,YAAA,IAAMW,YAAYZ,YAAaC,CAAAA,KAAAA,CAAAA,CAAAA;AAE3BW,YAAAA,SAAAA,KACFD,MAAAA,IACE,IACAC,GAAAA,SAAAA,CACGC,KAAK,CAAC,IAAA,CAAA,CACNC,GAAG,CAAC,CAACC,IAASpB,GAAAA,YAAAA,GAAeoB,IAC7BC,CAAAA,CAAAA,IAAI,CAAC,IAAI,CAAA,CAAA,CAAA;AAElB,SAAA;QAEA,OAAOL,MAAAA,CAAAA;AACT,KAAA;AACF,CAAA;AAcO,MAAMM,YAAqBC,SAAAA,KAAAA,CAAAA;AAMhC,IAAA,WAAA,CAAmBb,OAAe,EAAEc,OAA+B,GAAA,EAAE,CAAE;AACrE,QAAA,KAAK,CAACd,OAAAA,CAAAA,EAEN,IAAI,CAACe,QAAQ,GAAGD,OAAQC,CAAAA,QAAQ,EAChC,IAAI,CAACX,KAAK,GAAGU,OAAQV,CAAAA,KAAK,EAC1B,IAAI,CAACN,KAAK,GAAGgB,OAAAA,CAAQhB,KAAK,EAC1B,IAAI,CAACkB,QAAQ,GAAGC,eAAgB,CAAA,IAAI,CAACnB,KAAK,CAAA,CAAA;AAE1C,QAAA,IAAMM,KAAQD,GAAAA,oBAAAA,CAAqB,IAAI,CAACC,KAAK,CAAA,CAAA;AAE7Cb,QAAAA,kBAAAA,CAAmB,IAAI,EAAE;YACvB,GAAI,IAAI,CAACwB,QAAQ,IAAI;AACnBG,gBAAAA,IAAAA,EAAM,IAAI,CAACH,QAAQ,CAACI,IAAI;AACxB,gBAAA,GAAI,IAAI,CAACJ,QAAQ,CAACK,KAAK,CAACC,MAAM,IAAI;AAChCC,oBAAAA,KAAAA,EAAO,CAAC,CAAC,EAAE,IAAI,CAACP,QAAQ,CAACK,KAAK,CAACT,IAAI,CAAC,IAAA,CAAA,CAAM,CAAC,CAAC;iBAC7C;aACF;YACD,GAAI,IAAI,CAACK,QAAQ,IAAI;AACnBO,gBAAAA,IAAAA,EAAM,CAAC,EAAE,IAAI,CAACP,QAAQ,CAACQ,UAAU,CAAC,CAAC,EAAE,IAAI,CAACR,QAAQ,CAACS,IAAI,CAAC,CAAC;AACzD,gBAAA,GAAI,IAAI,CAACT,QAAQ,CAACU,SAAS,IAAI;AAC7BC,oBAAAA,SAAAA,EAAW,IAAI,CAACX,QAAQ,CAACU,SAAS;iBACnC;AACDE,gBAAAA,IAAAA,EAAM,IAAI,CAACZ,QAAQ,CAACjB,IAAI;aACzB;AACD,YAAA,GAAIK,KAAS,IAAA;gBAAEyB,KAAOzB,EAAAA,KAAAA;aAAO;AAC/B,SAAA,CAAA,CAAA;AACF,KAAA;AACF,CAAA;AAEAQ,YAAakB,CAAAA,SAAS,CAAC/B,IAAI,GAAG,cAAA,CAAA;AAavB,MAAMgC,aAAsBlB,SAAAA,KAAAA,CAAAA;AAIjCmB,IAAAA,WAAAA,CAAYhC,OAAe,EAAEc,OAAgC,GAAA,EAAE,CAAE;AAC/D,QAAA,KAAK,CAACd,OAAAA,CAAAA,EAEN,IAAI,CAACmB,IAAI,GAAGL,OAAAA,CAAQK,IAAI,EACxB,IAAI,CAACf,KAAK,GAAGU,QAAQV,KAAK,CAAA;AAE1B,QAAA,IAAMA,KAAQD,GAAAA,oBAAAA,CAAqB,IAAI,CAACC,KAAK,CAAA,CAAA;AAE7Cb,QAAAA,kBAAAA,CAAmB,IAAI,EAAE;YACvB,GAAI,IAAI,CAAC4B,IAAI,IAAI;gBAAED,IAAM,EAAA,IAAI,CAACC,IAAI;aAAE;AACpC,YAAA,GAAIf,KAAS,IAAA;gBAAEyB,KAAOzB,EAAAA,KAAAA;aAAO;AAC/B,SAAA,CAAA,CAAA;AACF,KAAA;AACF,CAAA;AAEA2B,aAAcD,CAAAA,SAAS,CAAC/B,IAAI,GAAG,eAAA;;ACnHnBkC,IAAAA,WAAAA,CAAAA;;AAgBZ,SAASC,cAAcC,IAAa,EAAA;IAClC,OAAOC,IAAAA,CAAKC,IAAI,CAACF,IAAM,EAAA;AAAEG,QAAAA,MAAAA,EAAQ,CAAA,CAAA;AAAK,KAAA,CAAA,CAAA;AACxC,CAAA;AAEA,SAASC,cAAcJ,IAAa,EAAA;IAClC,OAAOK,SAAAA,CAAUL,IAAMM,EAAAA,KAAAA,CAAW,EAAA,IAAA,CAAA,CAAA;AACpC,CAAA;AAtBYR,CAAAA,WAAAA,GAAAA,YAAAA,KAAAA,YAAAA,GAAAA,EAAAA,CAAAA,EAAAA,IAAAA,GAAAA,MAAAA,EAAAA,WAAAA,CAAAA,IAAAA,GAAAA,MAAAA,CAAAA;AAwBZ,IAAMS,QAAgC,GAAA;IACpC,IAAmBC,CAAAA,CAAAA,MAAM,EAAER,IAAI,EAAA;QAC7BQ,MAAOC,CAAAA,KAAK,CAACV,aAAcC,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA;AAC7B,KAAA;IACA,IAAmBQ,CAAAA,CAAAA,MAAM,EAAER,IAAI,EAAA;QAC7BQ,MAAOC,CAAAA,KAAK,CAACL,aAAcJ,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA;AAC7B,KAAA;AACF,CAAA,EAEMU,WAAqC,GAAA;IACzC,IAAmBF,CAAAA,CAAAA,MAAM,EAAER,IAAI,EAAA;AAC7B,QAAA,KAAK,IAAMW,IAAQX,IAAAA,IAAAA,CACjBQ,OAAOC,KAAK,CAAC,UAAUV,aAAcY,CAAAA,IAAAA,CAAAA,CAAAA,CAAAA;AAEzC,KAAA;IACA,IAAmBH,CAAAA,CAAAA,MAAM,EAAER,IAAI,EAAA;QAE7BQ,MAAOC,CAAAA,KAAK,CAACL,aADA,CAAA;YAAEf,UAAY,EAAA,IAAA;YAAMC,IAAM,EAAA,MAAA;YAAQsB,KAAOZ,EAAAA,IAAAA;AAAK,SAAA,CAAA,CAAA,CAAA;AAE7D,KAAA;AACF,CAAA,CAAA;AAOO,SAASa,MAAM1C,MAAc,EAAE,EAAE2C,MAAM,EAAEN,MAAM,EAAgB,EAAA;IACpE,IAAMR,IAAAA,GAAO7B,OAAO4C,SAAS,CAACzC,GAAG,CAAC,CAAC0C,QAAaA,GAAAA,QAAAA,CAAShB,IAAI,CAAA,CAAA;AACxDA,IAAAA,IAAAA,CAAKd,MAAM,KAEZc,IAAAA,CAAKd,MAAM,GAAG,CAAA,GAChBwB,WAAW,CAACI,MAAAA,CAAO,CAACN,MAAQR,EAAAA,IAAAA,CAAAA,GAE5BO,QAAQ,CAACO,MAAAA,CAAO,CAACN,MAAQR,EAAAA,IAAI,CAAC,CAAE,CAAA,CAAA,CAAA,CAAA;AAEpC;;ACzEO,SAASiB,mBAAoBtD,CAAAA,KAAAA,GAAQ,EAAE,EAAA;AAC5C,IAAA,IAAIA,KAAQ,GAAA,CAAA,EACV,MAAUe,KAAM,CAAA,oCAAA,CAAA,CAAA;IAGlB,OAAOf,KAAAA,CAAAA;AACT;;ACWO,SAASuD,qBACdvD,KAAc,EAAA;AAEd,IAAA,OACEO,SAASP,KACTA,CAAAA,IAAc,CAAA,CAAdA,KAAAA,KAAAA,CAAMwD,GAAG,IACY,CAAA,CAAA,KAArBxD,MAAMyD,UAAU,IAChBC,MAAMC,OAAO,CAAC3D,MAAM4D,MAAM,CAAA,CAAA;AAE9B,CAAA;AAoBO,SAASC,2BAA2BnE,GAAuB,EAAA;AAChE,IAAA,OAAOA,GAAIkE,CAAAA,MAAM,CAACjD,GAAG,CAAC,CAACmD,KAAAA,GAAAA;AAlBnBC,QAAAA,IAAAA,GAAAA,CAAAA;AAkB8B,QAAA,OAAA;YAChC7D,OAAO,GAnBL6D,GAAMrE,GAmByBoE,KAnBrBE,CAAAA,YAAY,EAEtBtE,KAiB+BoE,CAjB3B5D,OAAO,KACb6D,GAAAA,IAAO,CAAC,CAAC,EAAErE,KAgBsBoE,CAhBlB5D,OAAO,CAAC,CAAA,CAIP,EAAA,MAAA,KAAhBR,KAYiCoE,CAZ7BG,OAAO,IACX1D,SAASb,KAWwBoE,CAXpBI,MAAM,CAAA,IACnBR,KAAMC,CAAAA,OAAO,CAUoBG,KAVfI,CAAAA,MAAM,CAACC,aAAa,CAEtCJ,KAAAA,OAAO,CAAC,EAAE,EAAErB,SAAAA,CAAUhD,KAQWoE,CARPI,MAAM,CAACC,aAAa,CAAA,CAAE,CAAA,CAG3CJ,EAAAA,GAAAA,CAAAA;YAMLK,QAAU,EAAA,OAAA;AACZ,SAAA,CAAA;;AACF;;ACbO,MAAMC,eAAAA,CAAAA;IACXnC,WAAY,CAAgBmB,QAAkB,CAAE;aAApBA,QAAAA,GAAAA,QAAAA,CAAAA;AAAqB,KAAA;AACnD,CAAA;AAYO,eAAeiB,qBAAAA,CACpBC,QAAwC,EACxCC,IAAc,EAAA;AAGd,IAAA,IAAMC,YAAY,IAAIC,GAAAA,EAAAA,CAAAA;IAEtB,IAAI;AACF,QAAA,MAAMC,QAAQC,GAAG,CACfL,SAAS5D,GAAG,CAAC,OAAOkE,OAASvD,EAAAA,KAAAA,GAAAA;YAC3B,IAAI;gBACFmD,SAAUK,CAAAA,GAAG,CAACxD,KAAO,EAAA;AAAEyD,oBAAAA,EAAAA,EAAI,CAAA,CAAA;AAAM3B,oBAAAA,SAAAA,EAAW,MAAMyB,OAAAA;AAAQ,iBAAA,CAAA,CAAA;AAC5D,aAAA,CAAE,OAAOnF,GAAK,EAAA;AACZ,gBAAA,IAAIA,eAAe2E,eAIjB,EAAA,MAHAI,SAAUK,CAAAA,GAAG,CAACxD,KAAO,EAAA;AAAEyD,oBAAAA,EAAAA,EAAI,CAAA,CAAA;oBAAM3B,SAAW,EAAA;AAAC1D,wBAAAA,GAAAA,CAAI2D,QAAQ;AAAC,qBAAA;iBAGpD3D,CAAAA,EAAAA,GAAAA,CAAAA;AAIR,gBAAA,IAAI8E,MAAM,MAAM9E,GAAAA,CAAAA;gBAEhB+E,SAAUK,CAAAA,GAAG,CAACxD,KAAO,EAAA;AAAEyD,oBAAAA,EAAAA,EAAI,CAAA,CAAA;oBAAOjB,KAAOpE,EAAAA,GAAAA;AAAI,iBAAA,CAAA,CAAA;AAC/C,aAAA;AACF,SAAA,CAAA,CAAA,CAAA;AAEJ,KAAA,CAAE,OAAOA,GAAK,EAAA;AAEZ,QAAA,IAAI,EAAEA,GAAe2E,YAAAA,eAAc,GAAI,MAAM3E,GAAAA,CAAAA;AAC/C,KAAA;AAEA,IAAA,IAAMsF,SAAY,GAAA;AAAIP,QAAAA,GAAAA,SAAAA,CAAUrE,OAAO,EAAA;KAAG,CAEvC6E,IAAI,CAAC,CAACC,CAAGC,EAAAA,CAAAA,GAAMD,CAAC,CAAC,CAAA,CAAE,GAAGC,CAAC,CAAC,CAAA,CAAE,EAC1BxE,GAAG,CAAC,CAAC,GAAGX,KAAM,CAAA,GAAKA,QAEhBoD,SAAwB,GAAA,EAAE,EAC1BQ,MAAAA,GAAoB,EAAE,CAAA;AAE5B,IAAA,KAAK,IAAMpD,MAAUwE,IAAAA,SAAAA,CACfxE,MAAOuE,CAAAA,EAAE,GACX3B,SAAUgC,CAAAA,IAAI,CAAI5E,GAAAA,MAAAA,CAAO4C,SAAS,CAElCQ,GAAAA,MAAAA,CAAOwB,IAAI,CAAC5E,OAAOsD,KAAK,CAAA,CAAA;IAI5B,IAAsB,MAAlBF,MAAOrC,CAAAA,MAAM,EACf,MAAMqC,MAAM,CAAC,CAAE,CAAA,CAAA;AACV,IAAA,IAAIA,MAAOrC,CAAAA,MAAM,EACtB,MAAM,cAAmBqC,CAAAA,MAAAA,CAAAA,CAAAA;IAG3B,OAAOR,SAAAA,CAAAA;AACT,CAAA;AAEO,SAASiC,cAAe,CAAA,EAC7BpE,QAAQ,EACRoB,IAAI,EACJmC,IAAI,EACJc,YAAY,EAEiC,EAAA;AAC7C,IAAA,IAAMC,SAAkB,EAAE,CAAA;IAE1B,OAAO;AACLtE,QAAAA,QAAAA;AACAoB,QAAAA,IAAAA;AACAnB,QAAAA,QAAAA,EAAUC,eAAgBkB,CAAAA,IAAAA,CAAAA;AAC1BkD,QAAAA,MAAAA;AACAC,QAAAA,MAAAA,CAAAA,CAAOC,KAAK,EAAA;AACV,YAAA,IAAMC,OAAUD,GAAmB,OAAnBA,KAAAA,KAAAA,CAAMrB,QAAQ,CAAA;AAE9B,YAAA,IAAIsB,WAAWJ,YAAc,EAAA;AAC3B,gBAAA,IAAIG,MAAMnF,KAAK,YAAYQ,YAAc,EAAA,MAAM2E,MAAMnF,KAAK,CAAA;AAE1D,gBAAA,MAAM,IAAIQ,YAAAA,CAAa2E,KAAMvF,CAAAA,OAAO,EAAE;oBACpCe,QAAU,EAAA,IAAI,CAACA,QAAQ;oBACvBjB,KAAO,EAAA,IAAI,CAACqC,IAAI;AAChB/B,oBAAAA,KAAAA,EAAOmF,MAAMnF,KAAK;AACpB,iBAAA,CAAA,CAAA;AACF,aAAA;YAKA,IAHAiF,MAAAA,CAAOH,IAAI,CAACK,KAAAA,CAAAA,EAGRC,WAAWlB,IACb,EAAA,MAAM,IAAIH,eAAAA,CAAgB,IAAI,CAAA,CAAA;AAElC,SAAA;AACF,KAAA,CAAA;AACF,CAAA;AAoEA,eAAesB,SAAAA,CACb3F,KAAc,EACdgB,OAAuB,EAAA;AA1MJhB,IAAAA,IAAAA,MAAAA,CAAAA;AA4MnB,IAAA,IAAM,EACJ4F,QAAAA,GAAW,CAAA,CAAI,EACftE,KAAAA,GAAQ,EAAE,EACVD,IAAO,GAAA,EAAE,EACTmD,IAAI,EACJqB,WAAW,EACXC,SAAS,EACTR,YAAY,EACZS,gBAAgB,EAChBC,aAAa,EACd,GAAGhF,OAAAA,EACEiF,KAAQC,GAAAA,MAAAA,CAAO5C,mBAAoBuC,CAAAA,WAAAA,CAAAA,CAAAA,EACnCxC,WAAWgC,cAAe,CAAA;QAC9BpE,QAAU,EAAA;AAAEI,YAAAA,IAAAA;AAAMC,YAAAA,KAAAA;AAAM,SAAA;QACxBe,IAAMrC,EAAAA,KAAAA;AACNwE,QAAAA,IAAAA;AACAc,QAAAA,YAAAA;AACF,KAAA,CAAA,CAAA;IAEA,IAAqB,UAAjB,IAAA,OAAOtF,KAAsB,EAAA;QAC/B,IAAImG,GAAAA,CAAAA;QAEJ,IAAI;AACFA,YAAAA,GAAAA,GAAM,MAAMnG,KAAAA,EAAAA,CAAAA;AACd,SAAA,CAAE,OAAON,GAAK,EAAA;YAMZ,OALA2D,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,qCAAA;gBACTI,KAAOZ,EAAAA,GAAAA;aAEF,CAAA,EAAA;AAAC2D,gBAAAA,QAAAA;AAAS,aAAA,CAAA;AACnB,SAAA;AAEA,QAAA,OAAOsC,UAAUQ,GAAKnF,EAAAA,OAAAA,CAAAA,CAAAA;AACxB,KAAA;IAEA,IAAkBhB,iBA3OG2E,OAGnB,IAwOgB3E,UAvOE,cAAjB,OAuOeA,KAAAA,IAvOgB,QAAA,IAAA,OAuOhBA,KAvOwC,CACxD,IAA+B,cAA/B,OAsOgBA,KAtOMoG,CAAAA,IAAI,EAsOF;QACxB,IAAID,GAAAA,CAAAA;QAEJ,IAAI;AACFA,YAAAA,GAAAA,GAAM,MAAMnG,KAAAA,CAAAA;AACd,SAAA,CAAE,OAAON,GAAK,EAAA;YAMZ,OALA2D,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,8BAAA;gBACTI,KAAOZ,EAAAA,GAAAA;aAEF,CAAA,EAAA;AAAC2D,gBAAAA,QAAAA;AAAS,aAAA,CAAA;AACnB,SAAA;AAEA,QAAA,OAAOsC,UAAUQ,GAAKnF,EAAAA,OAAAA,CAAAA,CAAAA;AACxB,KAAA;AAEA,IAAA,IAjPE,QAAA,IAAA,OAiPahB,KAhPbA,IAAS,QAgPIA,KA/Ob,IAA2C,UAA3C,IAAA,OAAO,KAAc,CAACqG,MAAOC,CAAAA,QAAQ,CAAC,EA+OjB;QACrB,IAAM/B,QAAAA,GAAkC,EAAE,EACtCgC,CAAI,GAAA,CAAA,CAAA;QAER,IAAI;YACF,KAAK,IAAMC,SAASxG,KAClBuE,CAAAA,QAAAA,CAASa,IAAI,CACXa,KAAAA,CAAM,IAAMN,SAAAA,CAAUa,KAAO,EAAA;AAAE,oBAAA,GAAGxF,OAAO;oBAAEM,KAAO,EAAA;AAAIA,wBAAAA,GAAAA,KAAAA;AAAOiF,wBAAAA,CAAAA,EAAAA;AAAI,qBAAA;AAAC,iBAAA,CAAA,CAAA,CAAA,CAAA;AAGxE,SAAA,CAAE,OAAO7G,GAAK,EAAA;YAMZ,OALA2D,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,qCAAA;gBACTI,KAAOZ,EAAAA,GAAAA;aAEF,CAAA,EAAA;AAAC2D,gBAAAA,QAAAA;AAAS,aAAA,CAAA;AACnB,SAAA;AAEA,QAAA,OAAOiB,sBAAsBC,QAAUC,EAAAA,IAAAA,CAAAA,CAAAA;AACzC,KAAA;IAEA,IAhQOjE,QAAAA,CAgQaP,KAhQM,CAAA,IAAuC,UAAvC,IAAA,OAAOA,KAAK,CAACqG,MAAAA,CAAOI,aAAa,CAAC,EAgQhC;QAC1B,IAAMlC,QAAAA,GAAkC,EAAE,EACtCgC,CAAI,GAAA,CAAA,CAAA;QAER,IAAI;YACF,WAAW,IAAMC,SAASxG,KACxBuE,CAAAA,QAAAA,CAASa,IAAI,CACXa,KAAAA,CAAM,IAAMN,SAAAA,CAAUa,KAAO,EAAA;AAAE,oBAAA,GAAGxF,OAAO;oBAAEM,KAAO,EAAA;AAAIA,wBAAAA,GAAAA,KAAAA;AAAOiF,wBAAAA,CAAAA,EAAAA;AAAI,qBAAA;AAAC,iBAAA,CAAA,CAAA,CAAA,CAAA;AAGxE,SAAA,CAAE,OAAO7G,GAAK,EAAA;YAMZ,OALA2D,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,2CAAA;gBACTI,KAAOZ,EAAAA,GAAAA;aAEF,CAAA,EAAA;AAAC2D,gBAAAA,QAAAA;AAAS,aAAA,CAAA;AACnB,SAAA;AAEA,QAAA,OAAOiB,sBAAsBC,QAAUC,EAAAA,IAAAA,CAAAA,CAAAA;AACzC,KAAA;IAIA,IAFAnB,QAAAA,CAASnC,QAAQ,GAAGC,eAAgBkC,CAAAA,QAAAA,CAAShB,IAAI,CAAA,EAE7C,UAAqB,IAArB,OAAOyD,SAAAA,EACT,IAAI;QACF,IAAMY,QAAAA,GAAW,MAAMZ,SAAUzC,CAAAA,QAAAA,CAAAA,CAAAA;AAGjC,QAAA,IAAIqD,IAAY,IAAZA,QAAkB,EAAA,OAAO,EAAE,CAAA;AAE/BrD,QAAAA,QAAAA,CAAShB,IAAI,GAAGqE,QAAAA,EAChBrD,QAASnC,CAAAA,QAAQ,GAAGC,eAAgBuF,CAAAA,QAAAA,CAAAA,CAAAA;AACtC,KAAA,CAAE,OAAOhH,GAAK,EAAA;QAMZ,OALA2D,QAAAA,CAASmC,MAAM,CAAC;YACdpB,QAAU,EAAA,OAAA;YACVlE,OAAS,EAAA,yCAAA;YACTI,KAAOZ,EAAAA,GAAAA;SAEF,CAAA,EAAA;AAAC2D,YAAAA,QAAAA;AAAS,SAAA,CAAA;AACnB,KAAA;AAGF,IAAA,IAAIuC,QAAU,EAAA;AAMZ,QAAA,IALAe,MAAOC,CAAAA,GAAG,CACRC,QAAAA,CAASC,KAAK,EACd,CAAC,qBAAqB,EAAExF,KAAAA,CAAMT,IAAI,CAAC,KAAK,IAAI,EAAEQ,IAAK,CAAA,CAAC,CApUjD,EAAA,CADYrB,MAwUDqD,GAAAA,QAAAA,CAAShB,IAAI,KAvUb,UAAmC,IAAnC,OAAQrC,MAAc4F,CAAAA,QAAQ,EAwU5C,IAAI;YACF,MAAMvC,QAAAA,CAAShB,IAAI,CAACuD,QAAQ,EAAA,CAAA;AAC9B,SAAA,CAAE,OAAOlG,GAAK,EAAA;YACZ,IAAI,CAACsG,aAAiBzC,IAAAA,oBAAAA,CAAqB7D,GACzC,CAAA,EAAA,KAAK,IAAM+F,KAAAA,IAAS5B,0BAA2BnE,CAAAA,GAAAA,CAAAA,CAC7C2D,QAASmC,CAAAA,MAAM,CAACC,KAAAA,CAAAA,CAAAA;AAGlBpC,iBAAAA,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,kBAAA;gBACTI,KAAOZ,EAAAA,GAAAA;AACT,aAAA,CAAA,CAAA;AAEJ,SAAA;AAGF,QAAA,IAAI,UAA4B,IAA5B,OAAOqG,gBAAAA,EACT,IAAI;AACF,YAAA,MAAMA,gBAAiB1C,CAAAA,QAAAA,CAAAA,CAAAA;AACzB,SAAA,CAAE,OAAO3D,GAAK,EAAA;YAEZ,IAAIA,GAAAA,YAAe2E,iBAAiB,MAAM3E,GAAAA,CAAAA;AAE1C2D,YAAAA,QAAAA,CAASmC,MAAM,CAAC;gBACdpB,QAAU,EAAA,OAAA;gBACVlE,OAAS,EAAA,gDAAA;gBACTI,KAAOZ,EAAAA,GAAAA;AACT,aAAA,CAAA,CAAA;AACF,SAAA;AAEJ,KAAA;IAEA,OAAO;AAAC2D,QAAAA,QAAAA;AAAS,KAAA,CAAA;AACnB,CAAA;AAiBO,eAAe0D,OACpB/G,CAAAA,KAAc,EACdgB,OAAAA,GAA0B,EAAE,EAAA;IAE5B,IAAI;QACF,OAAO,MAAM2E,UAAU3F,KAAOgB,EAAAA,OAAAA,CAAAA,CAAAA;AAChC,KAAA,CAAE,OAAOtB,GAAK,EAAA;QACZ,IAAIA,GAAAA,YAAe2E,iBAAiB,OAAO;AAAC3E,YAAAA,GAAAA,CAAI2D,QAAQ;AAAC,SAAA,CAAA;QACzD,MAAM3D,GAAAA,CAAAA;AACR,KAAA;AACF;;AC/SO,eAAesH,SAAShG,OAAwB,EAAA;AACrD,IACE,MAAM,KAAU,CAAA,uCAAA,CAAA,CAAA;AA4HpB;;;;"}