{"version":3,"sources":["../shared/deep-clone.ts","../telemetry/helpers/zod.ts","../agent/client/config.ts","../transport/providers/livekit/browser.ts","../transport/providers/base.ts","../transport/config/browser.ts","../shared/async-queue.ts"],"sourcesContent":["// @ts-nocheck\n\n// biome-ignore-start lint/style: reason\n// biome-ignore-start lint/suspicious: reason\n// biome-ignore-start lint/complexity: reason\n// biome-ignore-start lint/correctness: reason\n\n/**\n * This function deep copies a given object, with higher performances than the\n * native structuredClone() function, and more flexibility (e.g., supports objects\n * containing functions).\n *\n * Source: Klona (https://github.com/lukeed/klona/blob/master/src/full.js)\n */\nexport function deepClone<T>(x: T): T {\n  if (typeof x !== \"object\") return x;\n\n  var i = 0,\n    k,\n    list,\n    tmp,\n    str = Object.prototype.toString.call(x);\n\n  if (str === \"[object Object]\") {\n    tmp = Object.create(x.__proto__ || null);\n  } else if (str === \"[object Array]\") {\n    tmp = Array(x.length);\n  } else if (str === \"[object Set]\") {\n    tmp = new Set();\n    x.forEach(function (val) {\n      tmp.add(deepClone(val));\n    });\n  } else if (str === \"[object Map]\") {\n    tmp = new Map();\n    x.forEach(function (val, key) {\n      tmp.set(deepClone(key), deepClone(val));\n    });\n  } else if (str === \"[object Date]\") {\n    tmp = new Date(+x);\n  } else if (str === \"[object RegExp]\") {\n    tmp = new RegExp(x.source, x.flags);\n  } else if (str === \"[object DataView]\") {\n    tmp = new x.constructor(deepClone(x.buffer));\n  } else if (str === \"[object ArrayBuffer]\") {\n    tmp = x.slice(0);\n  } else if (str.slice(-6) === \"Array]\") {\n    // ArrayBuffer.isView(x)\n    // ~> `new` bcuz `Buffer.slice` => ref\n    tmp = new x.constructor(x);\n  }\n\n  if (tmp) {\n    for (list = Object.getOwnPropertySymbols(x); i < list.length; i++) {\n      set(tmp, list[i], Object.getOwnPropertyDescriptor(x, list[i]));\n    }\n\n    for (i = 0, list = Object.getOwnPropertyNames(x); i < list.length; i++) {\n      if (Object.hasOwnProperty.call(tmp, (k = list[i])) && tmp[k] === x[k]) continue;\n      set(tmp, k, Object.getOwnPropertyDescriptor(x, k));\n    }\n  }\n\n  return tmp || x;\n}\n\nfunction set(obj, key, val) {\n  if (typeof val.value === \"object\") val.value = deepClone(val.value);\n  if (\n    !val.enumerable ||\n    val.get ||\n    val.set ||\n    !val.configurable ||\n    !val.writable ||\n    key === \"__proto__\"\n  ) {\n    Object.defineProperty(obj, key, val);\n  } else obj[key] = val.value;\n}\n\n// biome-ignore-end lint/style: reason\n// biome-ignore-end lint/suspicious: reason\n// biome-ignore-end lint/complexity: reason\n// biome-ignore-end lint/correctness: reason\n","import z from \"zod\";\n\ntype DeeplyEditable<T> = T extends Record<string, unknown>\n  ? { [K in keyof T]: DeeplyEditable<T[K]> } & Record<string, unknown>\n  : T;\n\n// Zod Object With Telemetry\nexport type ZodObjectWithTelemetry<Schema extends z.ZodObject, D extends \"input\" | \"output\"> = {\n  schema: Schema;\n} & (D extends \"input\"\n  ? {\n      toTelemetry?: (data: DeeplyEditable<z.output<Schema>>) => Record<string, unknown>;\n    }\n  : {\n      toTelemetry: (data: Record<string, unknown>) => Record<string, unknown>;\n    });\n\n/**\n * Creates a ZodObject schema alongside a `toTelemetry()` function responsible for sanitizing\n * the data parsed by the schema when this data needs to be included into a telemetry signal.\n *\n * @param schema - The Zod schema\n * @param toTelemetry - The sanitizing function.\n * @returns The schema prepared for telemetry.\n */\nexport const zodObjectWithTelemetry = <const Schema extends z.ZodObject>({\n  schema,\n  toTelemetry,\n}: ZodObjectWithTelemetry<Schema, \"input\">): ZodObjectWithTelemetry<Schema, \"output\"> => ({\n  schema,\n  toTelemetry: (data: Record<string, unknown>) => (toTelemetry ? toTelemetry(data as never) : data),\n});\n\n// Zod Union With Telemetry\nexport interface ZodUnionWithTelemetry<\n  Discriminator extends string,\n  Objects extends readonly ZodObjectWithTelemetry<\n    z.ZodObject<z.ZodRawShape & { [K in Discriminator]: z.ZodTypeAny }>,\n    \"output\"\n  >[],\n  Schema = z.ZodDiscriminatedUnion<\n    Objects[number] extends ZodObjectWithTelemetry<infer S extends z.ZodObject, \"output\">\n      ? S[]\n      : never,\n    Discriminator\n  >,\n> {\n  schema: Schema;\n  toTelemetry: (data: DeeplyEditable<z.output<Schema>>) => Record<string, unknown>;\n}\n\n/**\n * Creates a union of ZodObjectWithTelemetry instances discriminated by a given key.\n * The returned `toTelemetry()` function will apply the `toTelemetry()` function of\n * matched ZodObjectWithTelemetry instance.\n *\n * @param discriminator - The field to discriminate by.\n * @param objects - Array of ZodObjectWithTelemetry instances.\n * @returns A unified ZodObjectWithTelemetry with a discriminated union schema.\n */\nexport const zodUnionWithTelemetry = <\n  const Discriminator extends string,\n  const Objects extends readonly ZodObjectWithTelemetry<\n    z.ZodObject<z.ZodRawShape & { [K in Discriminator]: z.ZodTypeAny }>,\n    \"output\"\n  >[],\n>(\n  discriminator: Discriminator,\n  objects: Objects,\n): ZodUnionWithTelemetry<Discriminator, Objects> => ({\n  schema: z.discriminatedUnion(discriminator, objects.map((s) => s.schema) as never),\n  toTelemetry: (data: Record<string, unknown>) => {\n    // Find the schema that matches the discriminator\n    const object = objects.find((s) => {\n      const discriminatorSchema = s.schema.shape[discriminator];\n      if (discriminatorSchema instanceof z.ZodLiteral)\n        return discriminatorSchema.def.values[0] === data[discriminator];\n      return false;\n    });\n\n    // Apply the telemetry transformation (if any)\n    return object?.toTelemetry ? object.toTelemetry(data as never) : data;\n  },\n});\n","import { z } from \"zod\";\nimport { zodObjectWithTelemetry } from \"@/telemetry/helpers/zod\";\nimport { transportBrowserConfig } from \"@/transport/config/browser\";\n\nexport const agentClientConfig = zodObjectWithTelemetry({\n  schema: z.object({\n    transport: transportBrowserConfig.schema.prefault({ provider: \"livekit\" }),\n    experimental: z.object().prefault({}),\n  }),\n  toTelemetry: (config) => {\n    config.transport = transportBrowserConfig.toTelemetry(config.transport) as never;\n    return config;\n  },\n});\n","import { type RemoteTrack, Room, RoomEvent } from \"livekit-client\";\nimport z from \"zod\";\nimport type { LifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\nimport type { MaybePromise } from \"@/shared/types\";\nimport { zodObjectWithTelemetry } from \"@/telemetry/helpers/zod\";\nimport { TransportProviderClientBase } from \"../base\";\n\n// Config\nexport const livekitBrowserConfig = zodObjectWithTelemetry({\n  schema: z.object({\n    provider: z.literal(\"livekit\"),\n    serverUrl: z\n      .url()\n      .prefault(globalThis.process?.env?.LIVEKIT_SERVER_URL ?? \"ws://localhost:7880\"),\n  }),\n  toTelemetry: (config) => {\n    // Remember if the server is a dev server\n    config.isDevServer = Boolean(config.serverUrl?.includes(\"localhost\"));\n\n    // Redact sensitive fields\n    config.serverUrl = \"redacted\" as never;\n\n    return config;\n  },\n});\n\n// Client\nexport class LiveKitBrowserClient extends TransportProviderClientBase<\n  typeof livekitBrowserConfig.schema\n> {\n  isConnected = false;\n  room: Room | null = null;\n\n  constructor(config: z.input<typeof livekitBrowserConfig.schema>) {\n    super(livekitBrowserConfig.schema, config);\n  }\n\n  ensureConnected(name: string, connector: LiveKitBrowserClient) {\n    if (!(this.isConnected && this.room?.localParticipant))\n      return op.failure({\n        code: \"Conflict\",\n        message: `Calling this code (${name}) requires a connected room. Call joinRoom() first.`,\n      });\n    return op.success(\n      connector as LiveKitBrowserClient & {\n        room: Room & { localParticipant: NonNullable<Room[\"localParticipant\"]> };\n      },\n    );\n  }\n\n  #initializeListeners(room: Room) {\n    // audio-chunk\n    room.on(RoomEvent.TrackSubscribed, (track) => {\n      if (track.kind !== \"audio\") return;\n\n      // Listen for unsubscribing\n      let _isUnsubscribed = false;\n      const unsubscribeHandler = (unsubscribedTrack: RemoteTrack) => {\n        if (unsubscribedTrack.sid === track.sid) _isUnsubscribed = true;\n        room.off(RoomEvent.TrackUnsubscribed, unsubscribeHandler);\n      };\n      room.on(RoomEvent.TrackUnsubscribed, unsubscribeHandler);\n\n      // Stream audio chunks until the track is unsubscribed\n      // TODO: Implement\n    });\n  }\n\n  async joinRoom(roomName: string, token: string) {\n    try {\n      // If we are already connected to this room, do nothing\n      if (roomName === this.room?.name) return op.success();\n      // If we are already connected to a room, leave it before\n      if (this.isConnected) {\n        const [errLeave] = await this.leaveRoom();\n        if (errLeave) return op.failure(errLeave);\n      }\n\n      // Create the room and set up event listeners\n      this.room = new Room({\n        adaptiveStream: true,\n        dynacast: true,\n        disconnectOnPageLeave: true,\n        publishDefaults: {\n          dtx: true,\n          red: true,\n        },\n      });\n      this.room.on(RoomEvent.TrackSubscribed, (track) => {\n        const element = track.attach();\n        document.body.appendChild(element);\n      });\n\n      // Initialize listeners\n      this.#initializeListeners(this.room);\n\n      // Connect to the room and auto-subscribe to tracks\n      await this.room.connect(this.config.serverUrl, token, { autoSubscribe: true });\n      this.isConnected = true;\n\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async leaveRoom() {\n    try {\n      const [errEnsure, connector] = this.ensureConnected(\"leaveRoom\", this);\n      if (errEnsure) return op.failure(errEnsure);\n      await connector.room.disconnect();\n      this.isConnected = false;\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async streamText(topic: string) {\n    try {\n      const [errEnsure, connector] = this.ensureConnected(\"streamText\", this);\n      if (errEnsure) return op.failure(errEnsure);\n      return op.success(await connector.room.localParticipant.streamText({ topic }));\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  receiveStreamText(\n    topic: string,\n    callback: (iterator: AsyncIterable<string>, participantId: string) => MaybePromise<void>,\n    onError?: (error: LifeError) => void,\n  ) {\n    try {\n      const [errEnsure, connector] = this.ensureConnected(\"receiveText\", this);\n      if (errEnsure) return op.failure(errEnsure);\n      connector.room.registerTextStreamHandler(topic, async (iterator, participantInfo) => {\n        const [err] = await op.attempt(async () => {\n          await callback(iterator, participantInfo.identity);\n        });\n        if (err) onError?.(err);\n      });\n      return op.success(() => {\n        connector.room.unregisterTextStreamHandler(topic);\n      });\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async enableMicrophone() {\n    try {\n      const [errEnsure, connector] = this.ensureConnected(\"enableMicrophone\", this);\n      if (errEnsure) return op.failure(errEnsure);\n      await connector.room.localParticipant.setMicrophoneEnabled(true, {\n        echoCancellation: true,\n        noiseSuppression: false,\n        voiceIsolation: false,\n      });\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async playAudio() {\n    try {\n      const [errEnsure, connector] = this.ensureConnected(\"playAudio\", this);\n      if (errEnsure) return op.failure(errEnsure);\n      await connector.room.startAudio();\n      return op.success();\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  async streamAudioChunk(chunk: Int16Array) {\n    try {\n      await chunk;\n      throw new Error(\n        \"streamAudioChunk() is not available for browser client, use enableMicrophone() instead.\",\n      );\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n}\n","import type { z } from \"zod\";\nimport type { LifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\n\nexport type TransportEvent = {\n  type: \"audio-chunk\";\n  chunk: Int16Array;\n};\n\nexport abstract class TransportProviderClientBase<ConfigSchema extends z.ZodObject> {\n  config: z.infer<ConfigSchema>;\n  listeners: Partial<Record<TransportEvent[\"type\"], ((event: TransportEvent) => void)[]>> = {};\n\n  constructor(configSchema: ConfigSchema, config: Partial<z.infer<ConfigSchema>>) {\n    this.config = configSchema.parse({ ...config });\n  }\n\n  on<EventType extends TransportEvent[\"type\"]>(\n    type: EventType,\n    callback: (data: Extract<TransportEvent, { type: EventType }>) => void,\n  ) {\n    try {\n      if (!this.listeners[type]) this.listeners[type] = [];\n      this.listeners[type].push(callback as (event: TransportEvent) => void);\n      return op.success(() => {\n        this.listeners[type] = this.listeners[type]?.filter((listener) => listener !== callback);\n      });\n    } catch (error) {\n      return op.failure({ code: \"Unknown\", cause: error });\n    }\n  }\n\n  abstract joinRoom(roomName: string, token: string): Promise<op.OperationResult<void>>;\n  abstract leaveRoom(): Promise<op.OperationResult<void>>;\n  abstract streamText(\n    topic: string,\n  ): Promise<\n    op.OperationResult<\n      Omit<\n        WritableStreamDefaultWriter<string>,\n        \"desiredSize\" | \"closed\" | \"ready\" | \"abort\" | \"releaseLock\"\n      >\n    >\n  >;\n  abstract receiveStreamText(\n    topic: string,\n    callback: (iterator: AsyncIterable<string>, participantId: string) => void | Promise<void>,\n    onError?: (error: LifeError) => void,\n  ): op.OperationResult<() => void>;\n  abstract enableMicrophone(): Promise<op.OperationResult<void>>;\n  abstract playAudio(): Promise<op.OperationResult<void>>;\n  abstract streamAudioChunk(chunk: Int16Array): Promise<op.OperationResult<void>>;\n}\n","import { zodUnionWithTelemetry } from \"@/telemetry/helpers/zod\";\nimport { livekitBrowserConfig } from \"../providers/livekit/browser\";\n\nexport const transportBrowserConfig = zodUnionWithTelemetry(\"provider\", [livekitBrowserConfig]);\n","export class AsyncQueue<T> implements AsyncIterator<T>, AsyncIterable<T> {\n  readonly #buf: T[] = [];\n  #wakeUp?: () => void;\n  #closed = false;\n  #totalLength = 0;\n\n  push(v: T) {\n    if (this.#closed) return;\n    this.#buf.push(v);\n    this.#totalLength++;\n    this.#wakeUp?.();\n  }\n\n  pushFirst(v: T) {\n    if (this.#closed) return;\n    this.#buf.unshift(v);\n    this.#totalLength++;\n    this.#wakeUp?.();\n  }\n\n  stop() {\n    if (this.#closed) return;\n    this.#closed = true;\n    this.#wakeUp?.();\n  }\n\n  some(predicate: (value: T) => boolean) {\n    return this.#buf.some(predicate);\n  }\n\n  length() {\n    return this.#buf.length;\n  }\n\n  totalLength() {\n    return this.#totalLength;\n  }\n\n  async next(): Promise<IteratorResult<T>> {\n    while (true) {\n      const value = this.#buf.shift();\n      if (value !== undefined) return { value, done: false };\n      if (this.#closed) return { value: undefined, done: true };\n      // biome-ignore lint/performance/noAwaitInLoops: sequential execution required here\n      await new Promise<void>((res) => (this.#wakeUp = res)); // sleep until push/stop\n      this.#wakeUp = undefined;\n    }\n  }\n\n  [Symbol.asyncIterator]() {\n    return this;\n  }\n}\n"],"mappings":";;;;;;;;;;AAcO,SAAS,UAAa,GAAS;AACpC,MAAI,OAAO,MAAM,SAAU,QAAO;AAElC,MAAI,IAAI,GACN,GACA,MACA,KACA,MAAM,OAAO,UAAU,SAAS,KAAK,CAAC;AAExC,MAAI,QAAQ,mBAAmB;AAC7B,UAAM,OAAO,OAAO,EAAE,aAAa,IAAI;AAAA,EACzC,WAAW,QAAQ,kBAAkB;AACnC,UAAM,MAAM,EAAE,MAAM;AAAA,EACtB,WAAW,QAAQ,gBAAgB;AACjC,UAAM,oBAAI,IAAI;AACd,MAAE,QAAQ,SAAU,KAAK;AACvB,UAAI,IAAI,UAAU,GAAG,CAAC;AAAA,IACxB,CAAC;AAAA,EACH,WAAW,QAAQ,gBAAgB;AACjC,UAAM,oBAAI,IAAI;AACd,MAAE,QAAQ,SAAU,KAAK,KAAK;AAC5B,UAAI,IAAI,UAAU,GAAG,GAAG,UAAU,GAAG,CAAC;AAAA,IACxC,CAAC;AAAA,EACH,WAAW,QAAQ,iBAAiB;AAClC,UAAM,oBAAI,KAAK,CAAC,CAAC;AAAA,EACnB,WAAW,QAAQ,mBAAmB;AACpC,UAAM,IAAI,OAAO,EAAE,QAAQ,EAAE,KAAK;AAAA,EACpC,WAAW,QAAQ,qBAAqB;AACtC,UAAM,IAAI,EAAE,YAAY,UAAU,EAAE,MAAM,CAAC;AAAA,EAC7C,WAAW,QAAQ,wBAAwB;AACzC,UAAM,EAAE,MAAM,CAAC;AAAA,EACjB,WAAW,IAAI,MAAM,EAAE,MAAM,UAAU;AAGrC,UAAM,IAAI,EAAE,YAAY,CAAC;AAAA,EAC3B;AAEA,MAAI,KAAK;AACP,SAAK,OAAO,OAAO,sBAAsB,CAAC,GAAG,IAAI,KAAK,QAAQ,KAAK;AACjE,UAAI,KAAK,KAAK,CAAC,GAAG,OAAO,yBAAyB,GAAG,KAAK,CAAC,CAAC,CAAC;AAAA,IAC/D;AAEA,SAAK,IAAI,GAAG,OAAO,OAAO,oBAAoB,CAAC,GAAG,IAAI,KAAK,QAAQ,KAAK;AACtE,UAAI,OAAO,eAAe,KAAK,KAAM,IAAI,KAAK,CAAC,CAAE,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,EAAG;AACvE,UAAI,KAAK,GAAG,OAAO,yBAAyB,GAAG,CAAC,CAAC;AAAA,IACnD;AAAA,EACF;AAEA,SAAO,OAAO;AAChB;AAjDgB;AAmDhB,SAAS,IAAI,KAAK,KAAK,KAAK;AAC1B,MAAI,OAAO,IAAI,UAAU,SAAU,KAAI,QAAQ,UAAU,IAAI,KAAK;AAClE,MACE,CAAC,IAAI,cACL,IAAI,OACJ,IAAI,OACJ,CAAC,IAAI,gBACL,CAAC,IAAI,YACL,QAAQ,aACR;AACA,WAAO,eAAe,KAAK,KAAK,GAAG;AAAA,EACrC,MAAO,KAAI,GAAG,IAAI,IAAI;AACxB;AAZS;;;ACjET,OAAO,OAAO;AAyBP,IAAM,yBAAyB,wBAAmC;AAAA,EACvE;AAAA,EACA;AACF,OAA0F;AAAA,EACxF;AAAA,EACA,aAAa,wBAAC,SAAmC,cAAc,YAAY,IAAa,IAAI,MAA/E;AACf,IANsC;AAmC/B,IAAM,wBAAwB,wBAOnC,eACA,aACmD;AAAA,EACnD,QAAQ,EAAE,mBAAmB,eAAe,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAU;AAAA,EACjF,aAAa,wBAAC,SAAkC;AAE9C,UAAM,SAAS,QAAQ,KAAK,CAAC,MAAM;AACjC,YAAM,sBAAsB,EAAE,OAAO,MAAM,aAAa;AACxD,UAAI,+BAA+B,EAAE;AACnC,eAAO,oBAAoB,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa;AACjE,aAAO;AAAA,IACT,CAAC;AAGD,WAAO,QAAQ,cAAc,OAAO,YAAY,IAAa,IAAI;AAAA,EACnE,GAXa;AAYf,IAvBqC;;;AC5DrC,SAAS,KAAAA,UAAS;;;ACAlB,SAA2B,MAAM,iBAAiB;AAClD,OAAOC,QAAO;;;ACQP,IAAe,8BAAf,MAA6E;AAAA,EATpF,OASoF;AAAA;AAAA;AAAA,EAClF;AAAA,EACA,YAA0F,CAAC;AAAA,EAE3F,YAAY,cAA4B,QAAwC;AAC9E,SAAK,SAAS,aAAa,MAAM,EAAE,GAAG,OAAO,CAAC;AAAA,EAChD;AAAA,EAEA,GACE,MACA,UACA;AACA,QAAI;AACF,UAAI,CAAC,KAAK,UAAU,IAAI,EAAG,MAAK,UAAU,IAAI,IAAI,CAAC;AACnD,WAAK,UAAU,IAAI,EAAE,KAAK,QAA2C;AACrE,aAAU,QAAQ,MAAM;AACtB,aAAK,UAAU,IAAI,IAAI,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,aAAa,aAAa,QAAQ;AAAA,MACzF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAsBF;;;AD3CO,IAAM,uBAAuB,uBAAuB;AAAA,EACzD,QAAQC,GAAE,OAAO;AAAA,IACf,UAAUA,GAAE,QAAQ,SAAS;AAAA,IAC7B,WAAWA,GACR,IAAI,EACJ,SAAS,WAAW,SAAS,KAAK,sBAAsB,qBAAqB;AAAA,EAClF,CAAC;AAAA,EACD,aAAa,wBAAC,WAAW;AAEvB,WAAO,cAAc,QAAQ,OAAO,WAAW,SAAS,WAAW,CAAC;AAGpE,WAAO,YAAY;AAEnB,WAAO;AAAA,EACT,GARa;AASf,CAAC;AAGM,IAAM,uBAAN,cAAmC,4BAExC;AAAA,EA9BF,OA8BE;AAAA;AAAA;AAAA,EACA,cAAc;AAAA,EACd,OAAoB;AAAA,EAEpB,YAAY,QAAqD;AAC/D,UAAM,qBAAqB,QAAQ,MAAM;AAAA,EAC3C;AAAA,EAEA,gBAAgB,MAAc,WAAiC;AAC7D,QAAI,EAAE,KAAK,eAAe,KAAK,MAAM;AACnC,aAAU,QAAQ;AAAA,QAChB,MAAM;AAAA,QACN,SAAS,sBAAsB,IAAI;AAAA,MACrC,CAAC;AACH,WAAU;AAAA,MACR;AAAA,IAGF;AAAA,EACF;AAAA,EAEA,qBAAqB,MAAY;AAE/B,SAAK,GAAG,UAAU,iBAAiB,CAAC,UAAU;AAC5C,UAAI,MAAM,SAAS,QAAS;AAG5B,UAAI,kBAAkB;AACtB,YAAM,qBAAqB,wBAAC,sBAAmC;AAC7D,YAAI,kBAAkB,QAAQ,MAAM,IAAK,mBAAkB;AAC3D,aAAK,IAAI,UAAU,mBAAmB,kBAAkB;AAAA,MAC1D,GAH2B;AAI3B,WAAK,GAAG,UAAU,mBAAmB,kBAAkB;AAAA,IAIzD,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,UAAkB,OAAe;AAC9C,QAAI;AAEF,UAAI,aAAa,KAAK,MAAM,KAAM,QAAU,QAAQ;AAEpD,UAAI,KAAK,aAAa;AACpB,cAAM,CAAC,QAAQ,IAAI,MAAM,KAAK,UAAU;AACxC,YAAI,SAAU,QAAU,QAAQ,QAAQ;AAAA,MAC1C;AAGA,WAAK,OAAO,IAAI,KAAK;AAAA,QACnB,gBAAgB;AAAA,QAChB,UAAU;AAAA,QACV,uBAAuB;AAAA,QACvB,iBAAiB;AAAA,UACf,KAAK;AAAA,UACL,KAAK;AAAA,QACP;AAAA,MACF,CAAC;AACD,WAAK,KAAK,GAAG,UAAU,iBAAiB,CAAC,UAAU;AACjD,cAAM,UAAU,MAAM,OAAO;AAC7B,iBAAS,KAAK,YAAY,OAAO;AAAA,MACnC,CAAC;AAGD,WAAK,qBAAqB,KAAK,IAAI;AAGnC,YAAM,KAAK,KAAK,QAAQ,KAAK,OAAO,WAAW,OAAO,EAAE,eAAe,KAAK,CAAC;AAC7E,WAAK,cAAc;AAEnB,aAAU,QAAQ;AAAA,IACpB,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,YAAY;AAChB,QAAI;AACF,YAAM,CAAC,WAAW,SAAS,IAAI,KAAK,gBAAgB,aAAa,IAAI;AACrE,UAAI,UAAW,QAAU,QAAQ,SAAS;AAC1C,YAAM,UAAU,KAAK,WAAW;AAChC,WAAK,cAAc;AACnB,aAAU,QAAQ;AAAA,IACpB,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,OAAe;AAC9B,QAAI;AACF,YAAM,CAAC,WAAW,SAAS,IAAI,KAAK,gBAAgB,cAAc,IAAI;AACtE,UAAI,UAAW,QAAU,QAAQ,SAAS;AAC1C,aAAU,QAAQ,MAAM,UAAU,KAAK,iBAAiB,WAAW,EAAE,MAAM,CAAC,CAAC;AAAA,IAC/E,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,kBACE,OACA,UACA,SACA;AACA,QAAI;AACF,YAAM,CAAC,WAAW,SAAS,IAAI,KAAK,gBAAgB,eAAe,IAAI;AACvE,UAAI,UAAW,QAAU,QAAQ,SAAS;AAC1C,gBAAU,KAAK,0BAA0B,OAAO,OAAO,UAAU,oBAAoB;AACnF,cAAM,CAAC,GAAG,IAAI,MAAS,QAAQ,YAAY;AACzC,gBAAM,SAAS,UAAU,gBAAgB,QAAQ;AAAA,QACnD,CAAC;AACD,YAAI,IAAK,WAAU,GAAG;AAAA,MACxB,CAAC;AACD,aAAU,QAAQ,MAAM;AACtB,kBAAU,KAAK,4BAA4B,KAAK;AAAA,MAClD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB;AACvB,QAAI;AACF,YAAM,CAAC,WAAW,SAAS,IAAI,KAAK,gBAAgB,oBAAoB,IAAI;AAC5E,UAAI,UAAW,QAAU,QAAQ,SAAS;AAC1C,YAAM,UAAU,KAAK,iBAAiB,qBAAqB,MAAM;AAAA,QAC/D,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,gBAAgB;AAAA,MAClB,CAAC;AACD,aAAU,QAAQ;AAAA,IACpB,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,YAAY;AAChB,QAAI;AACF,YAAM,CAAC,WAAW,SAAS,IAAI,KAAK,gBAAgB,aAAa,IAAI;AACrE,UAAI,UAAW,QAAU,QAAQ,SAAS;AAC1C,YAAM,UAAU,KAAK,WAAW;AAChC,aAAU,QAAQ;AAAA,IACpB,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,OAAmB;AACxC,QAAI;AACF,YAAM;AACN,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAU,QAAQ,EAAE,MAAM,WAAW,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AACF;;;AExLO,IAAM,yBAAyB,sBAAsB,YAAY,CAAC,oBAAoB,CAAC;;;AHCvF,IAAM,oBAAoB,uBAAuB;AAAA,EACtD,QAAQC,GAAE,OAAO;AAAA,IACf,WAAW,uBAAuB,OAAO,SAAS,EAAE,UAAU,UAAU,CAAC;AAAA,IACzE,cAAcA,GAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAAA,EACtC,CAAC;AAAA,EACD,aAAa,wBAAC,WAAW;AACvB,WAAO,YAAY,uBAAuB,YAAY,OAAO,SAAS;AACtE,WAAO;AAAA,EACT,GAHa;AAIf,CAAC;;;AIbM,IAAM,aAAN,MAAkE;AAAA,EAAzE,OAAyE;AAAA;AAAA;AAAA,EAC9D,OAAY,CAAC;AAAA,EACtB;AAAA,EACA,UAAU;AAAA,EACV,eAAe;AAAA,EAEf,KAAK,GAAM;AACT,QAAI,KAAK,QAAS;AAClB,SAAK,KAAK,KAAK,CAAC;AAChB,SAAK;AACL,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,UAAU,GAAM;AACd,QAAI,KAAK,QAAS;AAClB,SAAK,KAAK,QAAQ,CAAC;AACnB,SAAK;AACL,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,OAAO;AACL,QAAI,KAAK,QAAS;AAClB,SAAK,UAAU;AACf,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,KAAK,WAAkC;AACrC,WAAO,KAAK,KAAK,KAAK,SAAS;AAAA,EACjC;AAAA,EAEA,SAAS;AACP,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,cAAc;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,OAAmC;AACvC,WAAO,MAAM;AACX,YAAM,QAAQ,KAAK,KAAK,MAAM;AAC9B,UAAI,UAAU,OAAW,QAAO,EAAE,OAAO,MAAM,MAAM;AACrD,UAAI,KAAK,QAAS,QAAO,EAAE,OAAO,QAAW,MAAM,KAAK;AAExD,YAAM,IAAI,QAAc,CAAC,QAAS,KAAK,UAAU,GAAI;AACrD,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,CAAC,OAAO,aAAa,IAAI;AACvB,WAAO;AAAA,EACT;AACF;","names":["z","z","z","z"]}