{"version":3,"file":"index.cjs","sources":["../../src/typeGuards.ts","../../src/sanitization/base64_recognizer.ts","../../src/sanitization/media_type_context.ts","../../src/sanitization/binary_content_redactor.ts","../../src/sanitization.ts","../../src/utils.ts","../../src/serializeError.ts","../../src/gatewayWarning.ts","../../src/captureAiGeneration.ts","../../src/openai/utils.ts","../../src/openai/azure.ts","../../src/openai/index.ts"],"sourcesContent":["// Type guards for safer type checking\n\nexport const isString = (value: unknown): value is string => {\n  return typeof value === 'string'\n}\n\nexport const isObject = (value: unknown): value is Record<string, unknown> => {\n  return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","const DATA_URL_PREFIX_RE = /^data:([^;,\\s]+)(?:;[^;,\\s]+)*;base64,/i\nconst BASE64_ALPHABET_RE = /^[A-Za-z0-9+/_=-]+$/\n\nexport type Base64Recognition = { kind: 'data-url'; mediaType: string } | { kind: 'raw' } | { kind: 'none' }\n\nexport class Base64Recognizer {\n  recognize(value: string, minLength: number): Base64Recognition {\n    const dataUrl = DATA_URL_PREFIX_RE.exec(value)\n    if (dataUrl) return { kind: 'data-url', mediaType: dataUrl[1] }\n\n    if (value.length < minLength) return { kind: 'none' }\n\n    const confidencePrefix = value.slice(0, minLength)\n    if (BASE64_ALPHABET_RE.test(confidencePrefix)) {\n      return { kind: 'raw' }\n    } else {\n      return { kind: 'none' }\n    }\n  }\n}\n","const MIME_HINT_KEYS = ['mediaType', 'media_type', 'mimeType', 'mime_type'] as const\n\nconst STRONG_CONTEXT_KEYS = new Set([\n  'data',\n  'file_data',\n  'fileData',\n  'image_url',\n  'imageUrl',\n  'video_url',\n  'videoUrl',\n  'audio',\n  'audio_data',\n  'audioData',\n  'inline_data',\n  'inlineData',\n  'source',\n  'result',\n])\n\nconst STRONG_CONTEXT_TYPES = new Set([\n  'image',\n  'image_url',\n  'input_image',\n  'audio',\n  'input_audio',\n  'video',\n  'video_url',\n  'file',\n  'input_file',\n  'document',\n  'media',\n  'file-data',\n])\n\nconst FILE_FAMILY_TYPES = new Set(['file', 'input_file', 'document', 'media', 'file-data'])\n\nconst KNOWN_AUDIO_FORMATS = new Set(['wav', 'mp3', 'ogg', 'flac', 'm4a', 'aac', 'webm'])\n\nexport class MediaTypeContext {\n  static readonly EMPTY = new MediaTypeContext(undefined, undefined)\n\n  constructor(\n    private readonly parent: Record<string, unknown> | undefined,\n    private readonly key: string | undefined\n  ) {}\n\n  inferMediaType(): string | undefined {\n    return (\n      this.inferFromSiblingMime() ?? this.inferFromSiblingFormat() ?? this.inferFromParentType() ?? this.inferFromKey()\n    )\n  }\n\n  inferFromSiblingMime(): string | undefined {\n    if (!this.parent) return undefined\n    for (const hint of MIME_HINT_KEYS) {\n      const v = this.parent[hint]\n      if (typeof v === 'string') return v\n    }\n    return undefined\n  }\n\n  inferFromSiblingFormat(): string | undefined {\n    if (!this.parent) return undefined\n    const fmt = this.parent.format\n    if (typeof fmt === 'string' && KNOWN_AUDIO_FORMATS.has(fmt.toLowerCase())) {\n      return `audio/${fmt.toLowerCase()}`\n    }\n    return undefined\n  }\n\n  inferFromParentType(): string | undefined {\n    if (!this.parent) return undefined\n    const t = this.parent.type\n    if (typeof t !== 'string') return undefined\n    if (t === 'image' || t === 'image_url' || t === 'input_image') return 'image'\n    if (t === 'audio' || t === 'input_audio') return 'audio'\n    if (t === 'video' || t === 'video_url') return 'video'\n    if (FILE_FAMILY_TYPES.has(t)) return 'application/octet-stream'\n    return undefined\n  }\n\n  inferFromKey(): string | undefined {\n    if (!this.key) return undefined\n    const key = this.key.toLowerCase()\n    if (key.includes('audio')) return 'audio'\n    if (key.includes('video')) return 'video'\n    if (key.includes('image')) return 'image'\n    if (key.includes('file') || key.includes('document')) return 'application/octet-stream'\n    return undefined\n  }\n\n  signalsBinary(): boolean {\n    if (this.parent) {\n      for (const hint of MIME_HINT_KEYS) {\n        if (typeof this.parent[hint] === 'string') return true\n      }\n      const fmt = this.parent.format\n      if (typeof fmt === 'string' && KNOWN_AUDIO_FORMATS.has(fmt.toLowerCase())) return true\n      const t = this.parent.type\n      if (typeof t === 'string' && STRONG_CONTEXT_TYPES.has(t)) return true\n    }\n    if (this.key && STRONG_CONTEXT_KEYS.has(this.key)) return true\n    return false\n  }\n}\n","import { Base64Recognizer } from './base64_recognizer'\nimport { MediaTypeContext } from './media_type_context'\n\nconst STRONG_CONTEXT_MIN_LENGTH = 64\nconst WEAK_CONTEXT_MIN_LENGTH = 1024\n\nexport class BinaryContentRedactor {\n  private visited: WeakSet<object> = new WeakSet()\n\n  constructor(private readonly recognizer: Base64Recognizer = new Base64Recognizer()) {}\n\n  redact<T>(value: T): T\n  redact(value: unknown): unknown {\n    if (this.isMultimodalEnabled()) return value\n    this.visited = new WeakSet()\n    return this.walk(value, MediaTypeContext.EMPTY)\n  }\n\n  private walk(value: unknown, ctx: MediaTypeContext): unknown {\n    if (value === null || value === undefined) return value\n    if (typeof value === 'string') return this.redactString(value, ctx)\n    if (typeof value !== 'object') return value\n\n    // Buffer extends Uint8Array, so this branch catches both.\n    if (typeof Uint8Array !== 'undefined' && value instanceof Uint8Array) {\n      return this.placeholderFor(ctx.inferMediaType())\n    }\n\n    if (this.visited.has(value)) return null\n    this.visited.add(value)\n\n    if (Array.isArray(value)) {\n      return value.map((item) => this.walk(item, ctx))\n    }\n\n    const obj = value as Record<string, unknown>\n    const out: Record<string, unknown> = {}\n    for (const k of Object.keys(obj)) {\n      out[k] = this.walk(obj[k], new MediaTypeContext(obj, k))\n    }\n    return out\n  }\n\n  private redactString(value: string, ctx: MediaTypeContext): string {\n    const minLength = ctx.signalsBinary() ? STRONG_CONTEXT_MIN_LENGTH : WEAK_CONTEXT_MIN_LENGTH\n    const recognition = this.recognizer.recognize(value, minLength)\n    switch (recognition.kind) {\n      case 'data-url':\n        return this.placeholderFor(recognition.mediaType)\n      case 'raw':\n        return this.placeholderFor(ctx.inferMediaType())\n      case 'none':\n        return value\n    }\n  }\n\n  private placeholderFor(mediaType?: string): string {\n    if (!mediaType) return '[base64 redacted]'\n    if (mediaType === 'application/octet-stream') return '[base64 file redacted]'\n    return `[base64 ${mediaType} redacted]`\n  }\n\n  private isMultimodalEnabled(): boolean {\n    const val = process.env._INTERNAL_LLMA_MULTIMODAL || ''\n    return val.toLowerCase() === 'true' || val === '1' || val.toLowerCase() === 'yes'\n  }\n}\n","import { BinaryContentRedactor } from './sanitization/binary_content_redactor'\n\nconst redactor = new BinaryContentRedactor()\n\nexport function redactBase64DataUrl(str: string): string\nexport function redactBase64DataUrl(str: unknown): unknown\nexport function redactBase64DataUrl(str: unknown): unknown {\n  return redactor.redact(str)\n}\n\nexport const sanitizeOpenAI = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeOpenAIResponse = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeAnthropic = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeGemini = (data: unknown): unknown => redactor.redact(data)\nexport const sanitizeLangChain = (data: unknown): unknown => redactor.redact(data)\n","import { PostHog } from 'posthog-node'\nimport type OpenAIOrignal from 'openai'\nimport type AnthropicOriginal from '@anthropic-ai/sdk'\nimport type { ResponseCreateParamsWithTools } from 'openai/lib/ResponsesParser'\nimport type {\n  FormattedMessage,\n  FormattedContent,\n  FormattedAudioContent,\n  FormattedImageContent,\n  FormattedDocumentContent,\n} from './types'\nimport { v4 as uuidv4 } from 'uuid'\nimport { isString } from './typeGuards'\nimport { redactBase64DataUrl } from './sanitization'\n\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype MessageCreateParams = AnthropicOriginal.Messages.MessageCreateParams\ntype ResponseCreateParams = OpenAIOrignal.Responses.ResponseCreateParams\ntype EmbeddingCreateParams = OpenAIOrignal.EmbeddingCreateParams\ntype TranscriptionCreateParams = OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams\n\nconst TOKEN_PROPERTY_KEYS = new Set([\n  '$ai_input_tokens',\n  '$ai_output_tokens',\n  '$ai_cache_read_input_tokens',\n  '$ai_cache_creation_input_tokens',\n  '$ai_total_tokens',\n  '$ai_reasoning_tokens',\n])\n\nexport function getTokensSource(posthogProperties?: Record<string, unknown>): string {\n  if (posthogProperties && Object.keys(posthogProperties).some((key) => TOKEN_PROPERTY_KEYS.has(key))) {\n    return 'passthrough'\n  }\n  return 'sdk'\n}\n\n// limit large outputs by truncating to 200kb (approx 200k bytes)\nexport const MAX_OUTPUT_SIZE = 200000\nconst STRING_FORMAT = 'utf8'\n\n// Reused across calls to avoid per-invocation allocation; truncate() runs\n// hundreds of times for prompts with many parts.\nconst sharedTextEncoder = new TextEncoder()\nconst sharedTextDecoder = new TextDecoder(STRING_FORMAT, { fatal: false })\n\nexport const utf8ByteLength = (str: string): number => sharedTextEncoder.encode(str).byteLength\n\n/**\n * Safely converts content to a string, preserving structure for objects/arrays.\n * - If content is already a string, returns it as-is\n * - If content is an object or array, stringifies it with JSON.stringify to preserve structure\n * - Otherwise, converts to string with String()\n *\n * This prevents the \"[object Object]\" bug when objects are naively converted to strings.\n *\n * @param content - The content to convert to a string\n * @returns A string representation that preserves structure for complex types\n */\nexport function toContentString(content: unknown): string {\n  if (typeof content === 'string') {\n    return content\n  }\n  if (content !== undefined && content !== null && typeof content === 'object') {\n    try {\n      return JSON.stringify(content)\n    } catch {\n      // Fallback for circular refs, BigInt, or objects with throwing toJSON\n      return String(content)\n    }\n  }\n  return String(content)\n}\n\nexport interface MonitoringEventPropertiesWithDefaults {\n  distinctId?: string\n  traceId: string\n  properties?: Record<string, any>\n  privacyMode: boolean\n  groups?: Record<string, any>\n  modelOverride?: string\n  providerOverride?: string\n  costOverride?: CostOverride\n  captureImmediate?: boolean\n}\n\nexport type MonitoringEventProperties = Partial<MonitoringEventPropertiesWithDefaults>\n\nexport type MonitoringParams = {\n  [K in keyof MonitoringEventProperties as `posthog${Capitalize<string & K>}`]: MonitoringEventProperties[K]\n}\n\nexport interface CostOverride {\n  inputCost: number\n  outputCost: number\n}\n\nexport const getModelParams = (\n  params:\n    | ((\n        | ChatCompletionCreateParamsBase\n        | MessageCreateParams\n        | ResponseCreateParams\n        | ResponseCreateParamsWithTools\n        | EmbeddingCreateParams\n        | TranscriptionCreateParams\n      ) &\n        MonitoringParams)\n    | null\n): Record<string, any> => {\n  if (!params) {\n    return {}\n  }\n  const modelParams: Record<string, any> = {}\n  const paramKeys = [\n    'temperature',\n    'max_tokens',\n    'max_completion_tokens',\n    'top_p',\n    'frequency_penalty',\n    'presence_penalty',\n    'n',\n    'stop',\n    'stream',\n    'streaming',\n    'language',\n    'response_format',\n    'timestamp_granularities',\n  ] as const\n\n  for (const key of paramKeys) {\n    if (key in params && (params as any)[key] !== undefined) {\n      modelParams[key] = (params as any)[key]\n    }\n  }\n  return modelParams\n}\n\n/**\n * Helper to format responses (non-streaming) for consumption\n */\nexport const formatResponse = (response: any, provider: string): FormattedMessage[] => {\n  if (!response) {\n    return []\n  }\n  if (provider === 'anthropic') {\n    return formatResponseAnthropic(response)\n  } else if (provider === 'openai') {\n    return formatResponseOpenAI(response)\n  } else if (provider === 'gemini') {\n    return formatResponseGemini(response)\n  }\n  return []\n}\n\nexport const formatResponseAnthropic = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n  const content: FormattedContent = []\n\n  for (const choice of response.content ?? []) {\n    if (choice?.type === 'text' && choice?.text) {\n      content.push({ type: 'text', text: choice.text })\n    } else if (choice?.type === 'tool_use' && choice?.name && choice?.id) {\n      content.push({\n        type: 'function',\n        id: choice.id,\n        function: {\n          name: choice.name,\n          arguments: choice.input || {},\n        },\n      })\n    }\n  }\n\n  if (content.length > 0) {\n    output.push({\n      role: 'assistant',\n      content,\n    })\n  }\n\n  return output\n}\n\nexport const formatResponseOpenAI = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n\n  if (response.choices) {\n    for (const choice of response.choices) {\n      const content: FormattedContent = []\n      let role = 'assistant'\n\n      if (choice.message) {\n        if (choice.message.role) {\n          role = choice.message.role\n        }\n\n        if (choice.message.content) {\n          content.push({ type: 'text', text: choice.message.content })\n        }\n\n        if (choice.message.tool_calls) {\n          for (const toolCall of choice.message.tool_calls) {\n            content.push({\n              type: 'function',\n              id: toolCall.id,\n              function: {\n                name: toolCall.function.name,\n                arguments: toolCall.function.arguments,\n              },\n            })\n          }\n        }\n\n        // Handle audio output (gpt-4o-audio-preview)\n        if (choice.message.audio) {\n          content.push({\n            type: 'audio',\n            ...choice.message.audio,\n          })\n        }\n      }\n\n      if (content.length > 0) {\n        output.push({\n          role,\n          content,\n        })\n      }\n    }\n  }\n\n  // Handle Responses API format\n  if (response.output) {\n    const content: FormattedContent = []\n    let role = 'assistant'\n\n    for (const item of response.output) {\n      if (item.type === 'message') {\n        role = item.role\n\n        if (item.content && Array.isArray(item.content)) {\n          for (const contentItem of item.content) {\n            if (contentItem.type === 'output_text' && contentItem.text) {\n              content.push({ type: 'text', text: contentItem.text })\n            } else if (contentItem.text) {\n              content.push({ type: 'text', text: contentItem.text })\n            } else if (contentItem.type === 'input_image' && contentItem.image_url) {\n              content.push({\n                type: 'image',\n                image: contentItem.image_url,\n              })\n            }\n          }\n        } else if (item.content) {\n          content.push({ type: 'text', text: String(item.content) })\n        }\n      } else if (item.type === 'function_call') {\n        content.push({\n          type: 'function',\n          id: item.call_id || item.id || '',\n          function: {\n            name: item.name,\n            arguments: item.arguments || {},\n          },\n        })\n      }\n    }\n\n    if (content.length > 0) {\n      output.push({\n        role,\n        content,\n      })\n    }\n  }\n\n  return output\n}\n\nexport const buildInlineDataBlock = (\n  mimeType: string,\n  data: string\n): FormattedAudioContent | FormattedImageContent | FormattedDocumentContent => {\n  if (mimeType.startsWith('audio/')) {\n    return { type: 'audio', mime_type: mimeType, data }\n  }\n  if (mimeType.startsWith('image/')) {\n    return { type: 'image', inline_data: { mime_type: mimeType, data } }\n  }\n  return { type: 'document', inline_data: { mime_type: mimeType, data } }\n}\n\nexport const formatResponseGemini = (response: any): FormattedMessage[] => {\n  const output: FormattedMessage[] = []\n\n  if (response.candidates && Array.isArray(response.candidates)) {\n    for (const candidate of response.candidates) {\n      if (candidate.content && candidate.content.parts) {\n        const content: FormattedContent = []\n\n        for (const part of candidate.content.parts) {\n          if (part.text) {\n            content.push({ type: 'text', text: part.text })\n          } else if (part.functionCall) {\n            content.push({\n              type: 'function',\n              function: {\n                name: part.functionCall.name,\n                arguments: part.functionCall.args,\n              },\n            })\n          } else if (part.inlineData) {\n            // Handle inline data (images, audio, documents)\n            const mimeType = part.inlineData.mimeType || part.inlineData.mime_type || 'application/octet-stream'\n            let data = part.inlineData.data\n\n            // Handle binary data (Uint8Array/Buffer -> base64)\n            if (data instanceof Uint8Array) {\n              if (typeof Buffer !== 'undefined') {\n                data = Buffer.from(data).toString('base64')\n              } else {\n                let binary = ''\n                for (let i = 0; i < data.length; i++) {\n                  binary += String.fromCharCode(data[i])\n                }\n                data = btoa(binary)\n              }\n            }\n\n            // Sanitize base64 data for images and other large inline data\n            data = redactBase64DataUrl(data)\n\n            content.push(buildInlineDataBlock(mimeType, data))\n          }\n        }\n\n        if (content.length > 0) {\n          output.push({\n            role: 'assistant',\n            content,\n          })\n        }\n      } else if (candidate.text) {\n        output.push({\n          role: 'assistant',\n          content: [{ type: 'text', text: candidate.text }],\n        })\n      }\n    }\n  } else if (response.text) {\n    output.push({\n      role: 'assistant',\n      content: [{ type: 'text', text: response.text }],\n    })\n  }\n\n  return output\n}\n\nexport const mergeSystemPrompt = (params: MessageCreateParams & MonitoringParams, provider: string): any => {\n  if (provider == 'anthropic') {\n    const messages = params.messages || []\n    if (!(params as any).system) {\n      return messages\n    }\n    const systemMessage = (params as any).system\n    return [{ role: 'system', content: systemMessage }, ...messages]\n  }\n  return params.messages\n}\n\nexport const withPrivacyMode = (client: PostHog, privacyMode: boolean, input: any): any => {\n  return (client as any).privacy_mode || privacyMode ? null : input\n}\n\nfunction toSafeString(input: unknown): string {\n  if (input === undefined || input === null) {\n    return ''\n  }\n  if (typeof input === 'string') {\n    return input\n  }\n  try {\n    return JSON.stringify(input)\n  } catch {\n    console.warn('Failed to stringify input', input)\n    return ''\n  }\n}\n\nexport const truncate = (input: unknown): string => {\n  const str = toSafeString(input)\n  if (str === '') {\n    return ''\n  }\n\n  // Check if we need to truncate and ensure STRING_FORMAT is respected\n  const buffer = sharedTextEncoder.encode(str)\n  if (buffer.length <= MAX_OUTPUT_SIZE) {\n    // Ensure STRING_FORMAT is respected\n    return sharedTextDecoder.decode(buffer)\n  }\n\n  // Truncate the buffer and ensure a valid string is returned.\n  // fatal: false means we get U+FFFD at the end if truncation broke the encoding.\n  const truncatedBuffer = buffer.slice(0, MAX_OUTPUT_SIZE)\n  let truncatedStr = sharedTextDecoder.decode(truncatedBuffer)\n  if (truncatedStr.endsWith('\\uFFFD')) {\n    truncatedStr = truncatedStr.slice(0, -1)\n  }\n  return `${truncatedStr}... [truncated]`\n}\n\n/**\n * Calculate web search count from raw API response.\n *\n * Uses a two-tier detection strategy:\n * Priority 1 (Exact Count): Count actual web search calls when available\n * Priority 2 (Binary Detection): Return 1 if web search indicators are present, 0 otherwise\n *\n * @param result - Raw API response from any provider (OpenAI, Perplexity, OpenRouter, Gemini, etc.)\n * @returns Number of web searches performed (exact count or binary 1/0)\n */\nexport function calculateWebSearchCount(result: unknown): number {\n  if (!result || typeof result !== 'object') {\n    return 0\n  }\n\n  // Priority 1: Exact Count\n  // Check for OpenAI Responses API web_search_call items\n  if ('output' in result && Array.isArray(result.output)) {\n    let count = 0\n\n    for (const item of result.output) {\n      if (typeof item === 'object' && item !== null && 'type' in item && item.type === 'web_search_call') {\n        count++\n      }\n    }\n\n    if (count > 0) {\n      return count\n    }\n  }\n\n  // Priority 2: Binary Detection (1 or 0)\n\n  // Check for citations at root level (Perplexity)\n  if ('citations' in result && Array.isArray(result.citations) && result.citations.length > 0) {\n    return 1\n  }\n\n  // Check for search_results at root level (Perplexity via OpenRouter)\n  if ('search_results' in result && Array.isArray(result.search_results) && result.search_results.length > 0) {\n    return 1\n  }\n\n  // Check for usage.search_context_size (Perplexity via OpenRouter)\n  if ('usage' in result && typeof result.usage === 'object' && result.usage !== null) {\n    if ('search_context_size' in result.usage && result.usage.search_context_size) {\n      return 1\n    }\n  }\n\n  // Check for annotations with url_citation in choices[].message or choices[].delta (OpenAI/Perplexity)\n  if ('choices' in result && Array.isArray(result.choices)) {\n    for (const choice of result.choices) {\n      if (typeof choice === 'object' && choice !== null) {\n        // Check both message (non-streaming) and delta (streaming) for annotations\n        const content = ('message' in choice ? choice.message : null) || ('delta' in choice ? choice.delta : null)\n\n        if (typeof content === 'object' && content !== null && 'annotations' in content) {\n          const annotations = content.annotations\n\n          if (Array.isArray(annotations)) {\n            const hasUrlCitation = annotations.some((ann: unknown) => {\n              return typeof ann === 'object' && ann !== null && 'type' in ann && ann.type === 'url_citation'\n            })\n\n            if (hasUrlCitation) {\n              return 1\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Check for annotations in output[].content[] (OpenAI Responses API)\n  if ('output' in result && Array.isArray(result.output)) {\n    for (const item of result.output) {\n      if (typeof item === 'object' && item !== null && 'content' in item) {\n        const content = item.content\n\n        if (Array.isArray(content)) {\n          for (const contentItem of content) {\n            if (typeof contentItem === 'object' && contentItem !== null && 'annotations' in contentItem) {\n              const annotations = contentItem.annotations\n\n              if (Array.isArray(annotations)) {\n                const hasUrlCitation = annotations.some((ann: unknown) => {\n                  return typeof ann === 'object' && ann !== null && 'type' in ann && ann.type === 'url_citation'\n                })\n\n                if (hasUrlCitation) {\n                  return 1\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n\n  // Check for grounding_metadata (Gemini)\n  if ('candidates' in result && Array.isArray(result.candidates)) {\n    for (const candidate of result.candidates) {\n      if (\n        typeof candidate === 'object' &&\n        candidate !== null &&\n        'grounding_metadata' in candidate &&\n        candidate.grounding_metadata\n      ) {\n        return 1\n      }\n    }\n  }\n\n  return 0\n}\n\n/**\n * Extract available tool calls from the request parameters.\n * These are the tools provided to the LLM, not the tool calls in the response.\n */\nexport const extractAvailableToolCalls = (provider: string, params: any): unknown[] | null => {\n  if (provider === 'anthropic') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  } else if (provider === 'gemini') {\n    if (params.config && params.config.tools) {\n      return params.config.tools\n    }\n\n    return null\n  } else if (provider === 'openai') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  } else if (provider === 'vercel') {\n    if (params.tools) {\n      return params.tools\n    }\n\n    return null\n  }\n\n  return null\n}\n\nexport enum AIEvent {\n  Generation = '$ai_generation',\n  Embedding = '$ai_embedding',\n}\n\nexport function sanitizeValues(obj: any): any {\n  if (obj === undefined || obj === null) {\n    return obj\n  }\n  const jsonSafe = JSON.parse(JSON.stringify(obj))\n  if (typeof jsonSafe === 'string') {\n    // Sanitize lone surrogates by round-tripping through UTF-8\n    return new TextDecoder().decode(new TextEncoder().encode(jsonSafe))\n  } else if (Array.isArray(jsonSafe)) {\n    return jsonSafe.map(sanitizeValues)\n  } else if (jsonSafe && typeof jsonSafe === 'object') {\n    return Object.fromEntries(Object.entries(jsonSafe).map(([k, v]) => [k, sanitizeValues(v)]))\n  }\n  return jsonSafe\n}\n\nconst POSTHOG_PARAMS_MAP: Record<keyof MonitoringParams, string> = {\n  posthogDistinctId: 'distinctId',\n  posthogTraceId: 'traceId',\n  posthogProperties: 'properties',\n  posthogPrivacyMode: 'privacyMode',\n  posthogGroups: 'groups',\n  posthogModelOverride: 'modelOverride',\n  posthogProviderOverride: 'providerOverride',\n  posthogCostOverride: 'costOverride',\n  posthogCaptureImmediate: 'captureImmediate',\n}\n\nexport function extractPosthogParams<T>(body: T & MonitoringParams): {\n  providerParams: T\n  posthogParams: MonitoringEventPropertiesWithDefaults\n} {\n  const providerParams: Record<string, unknown> = {}\n  const posthogParams: Record<string, unknown> = {}\n\n  for (const [key, value] of Object.entries(body)) {\n    if (POSTHOG_PARAMS_MAP[key as keyof MonitoringParams]) {\n      posthogParams[POSTHOG_PARAMS_MAP[key as keyof MonitoringParams]] = value\n    } else if (key.startsWith('posthog')) {\n      console.warn(`Unknown Posthog parameter ${key}`)\n    } else {\n      providerParams[key] = value\n    }\n  }\n\n  return {\n    providerParams: providerParams as T,\n    posthogParams: addDefaults(posthogParams),\n  }\n}\n\nfunction addDefaults(params: MonitoringEventProperties): MonitoringEventPropertiesWithDefaults {\n  return {\n    ...params,\n    privacyMode: params.privacyMode ?? false,\n    traceId: params.traceId ?? uuidv4(),\n  }\n}\n\nexport function formatOpenAIResponsesInput(input: unknown, instructions?: string | null): FormattedMessage[] {\n  const messages: FormattedMessage[] = []\n\n  if (instructions) {\n    messages.push({\n      role: 'system',\n      content: instructions,\n    })\n  }\n\n  if (Array.isArray(input)) {\n    for (const item of input) {\n      if (typeof item === 'string') {\n        messages.push({ role: 'user', content: item })\n      } else if (item && typeof item === 'object') {\n        const obj = item as Record<string, unknown>\n        const role = isString(obj.role) ? obj.role : 'user'\n\n        // Handle content properly - preserve structure for objects/arrays\n        const content = obj.content ?? obj.text ?? item\n        messages.push({ role, content: toContentString(content) })\n      } else {\n        messages.push({ role: 'user', content: toContentString(item) })\n      }\n    }\n  } else if (typeof input === 'string') {\n    messages.push({ role: 'user', content: input })\n  } else if (input) {\n    messages.push({ role: 'user', content: toContentString(input) })\n  }\n\n  return messages\n}\n","import { sanitizeValues } from './utils'\n\nconst DEFAULT_MAX_DEPTH = 3\nconst MAX_STACK_LINES = 20\n\nexport function serializeError(value: unknown, depth = DEFAULT_MAX_DEPTH): unknown {\n  if (depth < 0 || value === null || typeof value !== 'object') {\n    return value\n  }\n  if (value instanceof Error) {\n    const out: Record<string, unknown> = {\n      name: value.name,\n      message: value.message,\n      stack: truncateStack(value.stack),\n    }\n    for (const key of Object.keys(value)) {\n      out[key] = serializeError((value as unknown as Record<string, unknown>)[key], depth - 1)\n    }\n    if (value.cause !== undefined) {\n      out.cause = serializeError(value.cause, depth - 1)\n    }\n    return out\n  }\n  if (Array.isArray(value)) {\n    return value.map((item) => serializeError(item, depth - 1))\n  }\n  return value\n}\n\nexport function stringifyError(error: unknown): string {\n  try {\n    return JSON.stringify(sanitizeValues(serializeError(error)))\n  } catch {\n    if (error instanceof Error) {\n      return JSON.stringify({ name: error.name, message: error.message })\n    }\n    return JSON.stringify({ message: String(error) })\n  }\n}\n\nfunction truncateStack(stack: string | undefined): string | undefined {\n  if (!stack) {\n    return stack\n  }\n  const lines = stack.split('\\n')\n  if (lines.length <= MAX_STACK_LINES) {\n    return stack\n  }\n  return [...lines.slice(0, MAX_STACK_LINES), '... (truncated)'].join('\\n')\n}\n","// Warn when a wrapper's base_url points at the PostHog AI Gateway: the gateway\n// emits its own $ai_generation, so each call would be captured (and, for billable\n// products, billed) twice. We only warn — the wrapper's event carries data the\n// gateway never sees (groups, custom properties, trace hierarchy).\n\n// Keep in sync with the gateway's deployed hosts (see services/llm-gateway in the\n// main repo). gateway.us.posthog.com is live today; the rest are listed ahead of\n// any traffic moving to them.\nexport const POSTHOG_AI_GATEWAY_HOSTS: readonly string[] = [\n  'gateway.posthog.com',\n  'gateway.us.posthog.com',\n  'gateway.eu.posthog.com',\n  'ai-gateway.us.posthog.com',\n  'ai-gateway.eu.posthog.com',\n]\n\n// Swap for the dedicated AI Gateway page once it ships.\nconst GATEWAY_DOCS_URL = 'https://posthog.com/docs/ai-observability'\n\nconst extractHost = (baseURL: string): string | undefined => {\n  try {\n    // Tolerate bare hosts that omit a scheme, e.g. \"gateway.us.posthog.com/v1\".\n    const hasScheme = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(baseURL)\n    return new URL(hasScheme ? baseURL : `https://${baseURL}`).hostname.toLowerCase()\n  } catch {\n    return undefined\n  }\n}\n\nexport const isPostHogAiGatewayUrl = (baseURL: string | undefined | null): boolean => {\n  if (!baseURL) {\n    return false\n  }\n  const host = extractHost(baseURL)\n  return host !== undefined && POSTHOG_AI_GATEWAY_HOSTS.includes(host)\n}\n\n// Warns on every gateway call by design: the misconfiguration is impossible to\n// miss that way, and a doubled bill is worse than noisy logs.\nexport const warnIfPostHogAiGateway = (baseURL: string | undefined | null): void => {\n  if (!isPostHogAiGatewayUrl(baseURL)) {\n    return\n  }\n  console.warn(\n    '[PostHog] The PostHog AI wrapper is pointed at the PostHog AI Gateway. ' +\n      'Both capture $ai_generation, so every call is double-counted and double-billed. ' +\n      `Use one or the other — see ${GATEWAY_DOCS_URL}.`\n  )\n}\n\n// OTel spans don't pass through captureAiGeneration, so detect the gateway from\n// the span's host/URL attributes instead. These follow the GenAI / HTTP semantic\n// conventions: `server.address` is a bare host, `url.full` a full URL, both of\n// which isPostHogAiGatewayUrl accepts.\nconst OTEL_GATEWAY_URL_ATTRIBUTES = ['server.address', 'url.full'] as const\n\nexport const warnIfPostHogAiGatewayOtelAttributes = (attributes: Record<string, unknown> | undefined): void => {\n  if (!attributes) {\n    return\n  }\n  for (const key of OTEL_GATEWAY_URL_ATTRIBUTES) {\n    const value = attributes[key]\n    if (typeof value === 'string' && isPostHogAiGatewayUrl(value)) {\n      warnIfPostHogAiGateway(value)\n      return\n    }\n  }\n}\n","import { EventMessage, PostHog } from 'posthog-node'\nimport { v4 as uuidv4 } from 'uuid'\nimport { uuidv7, ErrorTracking as CoreErrorTracking } from '@posthog/core'\nimport { version } from '../package.json'\nimport type { TokenUsage } from './types'\nimport { stringifyError } from './serializeError'\nimport { AIEvent, CostOverride, getTokensSource, sanitizeValues, withPrivacyMode } from './utils'\nimport { warnIfPostHogAiGateway } from './gatewayWarning'\n\n/**\n * Options for `captureAiGeneration`. Mirrors the `$ai_generation` event shape\n * directly so that any caller — first-party SDK wrappers and external code\n * alike — produces an identical event.\n */\nexport interface CaptureAiGenerationOptions {\n  distinctId?: string\n  /** Auto-generated when omitted. */\n  traceId?: string\n  /** Defaults to `$ai_generation`. */\n  eventType?: AIEvent\n\n  /** Required for the event to be useful, but accepted as optional so SDK wrappers can pass through whatever they detect. */\n  model?: string\n  provider: string\n  input: unknown\n  output: unknown\n\n  /** Maps to `$ai_model_parameters` (temperature, max_tokens, top_p, …). */\n  modelParameters?: Record<string, unknown>\n\n  baseURL?: string\n  httpStatus?: number\n  /** Wall-clock latency in seconds. */\n  latency?: number\n  /** Time from request start to the first streamed token, in seconds. */\n  timeToFirstToken?: number\n\n  usage?: TokenUsage\n\n  /** Extra event properties merged into the captured event. */\n  properties?: Record<string, unknown>\n  /** Mapping of group type to group id, matching `EventMessage.groups`. */\n  groups?: Record<string, string | number>\n  privacyMode?: boolean\n\n  /**\n   * For SDK wrappers: overrides the auto-detected model. External callers\n   * should pass `model` directly instead.\n   */\n  modelOverride?: string\n  /**\n   * For SDK wrappers: overrides the auto-detected provider. External callers\n   * should pass `provider` directly instead.\n   */\n  providerOverride?: string\n  costOverride?: CostOverride\n\n  tools?: unknown[] | null\n  stopReason?: string\n\n  /**\n   * Provider-assigned ID for the generation (e.g. OpenAI's `chatcmpl-…` /\n   * `resp_…`). Maps to `$ai_completion_id`. Response IDs generalize across\n   * providers, so this lives in the shared schema rather than under\n   * `providerMetadata`.\n   */\n  completionId?: string\n  /**\n   * Provider-specific response metadata that has no place in the shared,\n   * provider-agnostic `$ai_*` schema (e.g. OpenAI's `system_fingerprint` and\n   * `request_id`). Maps to `$ai_provider_metadata`; omitted when empty.\n   */\n  providerMetadata?: Record<string, unknown>\n\n  /** When set, the event is captured as an error. */\n  error?: unknown\n\n  /** Awaits delivery instead of batching. Useful in serverless environments. */\n  captureImmediate?: boolean\n}\n\n/**\n * Capture an `$ai_generation` (or `$ai_embedding`) event to PostHog.\n *\n * This is the canonical primitive that every `@posthog/ai` wrapper\n * (`withTracing`, `OpenAI`, `Anthropic`, `GoogleGenAI`, …) funnels through, so\n * external code can use it directly to instrument LLM calls made through\n * arbitrary clients (Cloudflare Workers AI, custom HTTP, etc.) and get the\n * same events the SDK wrappers produce.\n *\n * When `error` is set, the event is captured as an error. If the error is an\n * object, it is mutated in place to set `__posthog_previously_captured_error`\n * so callers can re-throw the original error reference safely.\n */\nexport const captureAiGeneration = async (client: PostHog, options: CaptureAiGenerationOptions): Promise<void> => {\n  if (!client.capture) {\n    return\n  }\n\n  warnIfPostHogAiGateway(options.baseURL)\n\n  const traceId = options.traceId ?? uuidv4()\n  const eventType = options.eventType ?? AIEvent.Generation\n  const privacyMode = options.privacyMode ?? false\n  const usage = options.usage ?? {}\n\n  const safeInput = sanitizeValues(options.input)\n  const safeOutput = sanitizeValues(options.output)\n\n  let httpStatus = options.httpStatus\n  let errorData: Record<string, unknown> = {}\n  if (options.error) {\n    if (httpStatus === undefined) {\n      if (typeof options.error === 'object' && 'status' in options.error && typeof options.error.status === 'number') {\n        httpStatus = options.error.status\n      } else {\n        httpStatus = 500\n      }\n    }\n\n    let exceptionId: string | undefined\n    if (client.options?.enableExceptionAutocapture) {\n      exceptionId = uuidv7()\n      client.captureException(options.error, undefined, { $ai_trace_id: traceId }, exceptionId)\n      if (typeof options.error === 'object') {\n        ;(options.error as CoreErrorTracking.PreviouslyCapturedError).__posthog_previously_captured_error = true\n      }\n    }\n\n    errorData = {\n      $ai_is_error: true,\n      $ai_error: stringifyError(options.error),\n      $exception_event_id: exceptionId,\n    }\n  }\n  httpStatus = httpStatus ?? 200\n\n  let costOverrideData: Record<string, number> = {}\n  if (options.costOverride) {\n    const inputCostUSD = (options.costOverride.inputCost ?? 0) * (usage.inputTokens ?? 0)\n    const outputCostUSD = (options.costOverride.outputCost ?? 0) * (usage.outputTokens ?? 0)\n    costOverrideData = {\n      $ai_input_cost_usd: inputCostUSD,\n      $ai_output_cost_usd: outputCostUSD,\n      $ai_total_cost_usd: inputCostUSD + outputCostUSD,\n    }\n  }\n\n  const additionalTokenValues = {\n    ...(usage.reasoningTokens ? { $ai_reasoning_tokens: usage.reasoningTokens } : {}),\n    ...(usage.cacheReadInputTokens ? { $ai_cache_read_input_tokens: usage.cacheReadInputTokens } : {}),\n    ...(usage.cacheCreationInputTokens ? { $ai_cache_creation_input_tokens: usage.cacheCreationInputTokens } : {}),\n    ...(usage.webSearchCount ? { $ai_web_search_count: usage.webSearchCount } : {}),\n    ...(usage.rawUsage ? { $ai_usage: usage.rawUsage } : {}),\n  }\n\n  const properties: Record<string, unknown> = {\n    $ai_lib: 'posthog-ai',\n    $ai_lib_version: version,\n    $ai_provider: options.providerOverride ?? options.provider,\n    $ai_model: options.modelOverride ?? options.model,\n    $ai_model_parameters: options.modelParameters ?? {},\n    $ai_input: withPrivacyMode(client, privacyMode, safeInput),\n    $ai_output_choices: withPrivacyMode(client, privacyMode, safeOutput),\n    $ai_http_status: httpStatus,\n    $ai_input_tokens: usage.inputTokens ?? 0,\n    ...(usage.outputTokens !== undefined ? { $ai_output_tokens: usage.outputTokens } : {}),\n    ...additionalTokenValues,\n    $ai_latency: options.latency ?? 0,\n    ...(options.timeToFirstToken !== undefined ? { $ai_time_to_first_token: options.timeToFirstToken } : {}),\n    $ai_trace_id: traceId,\n    $ai_base_url: options.baseURL ?? '',\n    ...options.properties,\n    $ai_tokens_source: getTokensSource(options.properties),\n    ...(options.distinctId ? {} : { $process_person_profile: false }),\n    ...(options.stopReason ? { $ai_stop_reason: options.stopReason } : {}),\n    ...(options.tools ? { $ai_tools: options.tools } : {}),\n    ...(options.completionId ? { $ai_completion_id: options.completionId } : {}),\n    ...(options.providerMetadata && Object.keys(options.providerMetadata).length > 0\n      ? { $ai_provider_metadata: options.providerMetadata }\n      : {}),\n    ...errorData,\n    ...costOverrideData,\n  }\n\n  const event: EventMessage = {\n    distinctId: options.distinctId ?? traceId,\n    event: eventType,\n    properties,\n    groups: options.groups,\n  }\n\n  if (options.captureImmediate) {\n    await client.captureImmediate(event)\n  } else {\n    client.capture(event)\n  }\n}\n","import type OpenAI from 'openai'\n\n/**\n * Checks if a ResponseStreamEvent chunk represents the first token/content from the model.\n * This includes various content types like text, reasoning, audio, and refusals.\n */\nexport function isResponseTokenChunk(chunk: OpenAI.Responses.ResponseStreamEvent): boolean {\n  return (\n    chunk.type === 'response.output_item.added' ||\n    chunk.type === 'response.content_part.added' ||\n    chunk.type === 'response.output_text.delta' ||\n    chunk.type === 'response.reasoning_text.delta' ||\n    chunk.type === 'response.reasoning_summary_text.delta' ||\n    chunk.type === 'response.audio.delta' ||\n    chunk.type === 'response.audio.transcript.delta' ||\n    chunk.type === 'response.refusal.delta'\n  )\n}\n\n/**\n * Reads the OpenAI SDK's `_request_id` field from a response object. The SDK\n * attaches the `x-request-id` response header here, but it is not part of the\n * public response types, so it has to be read through a cast. Used to populate\n * `$ai_provider_metadata.request_id`.\n */\nexport function extractRequestId(result: unknown): string | undefined {\n  return (result as { _request_id?: string | null } | null | undefined)?._request_id ?? undefined\n}\n\n/**\n * Assembles the `$ai_provider_metadata` blob for OpenAI / Azure OpenAI events.\n * Provider-specific fields (system fingerprint, request id) live here rather\n * than in the shared, provider-agnostic `$ai_*` namespace. Only keys with a\n * truthy value are included, and `undefined` is returned when there is nothing\n * to report so the property can be omitted from the event entirely.\n */\nexport function buildProviderMetadata(fields: {\n  systemFingerprint?: string | null\n  requestId?: string | null\n}): Record<string, string> | undefined {\n  const metadata: Record<string, string> = {}\n  if (fields.systemFingerprint) {\n    metadata.system_fingerprint = fields.systemFingerprint\n  }\n  if (fields.requestId) {\n    metadata.request_id = fields.requestId\n  }\n  return Object.keys(metadata).length > 0 ? metadata : undefined\n}\n","import OpenAIOrignal, { AzureOpenAI } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport {\n  AIEvent,\n  formatResponseOpenAI,\n  getModelParams,\n  MonitoringParams,\n  withPrivacyMode,\n  formatOpenAIResponsesInput,\n} from '../utils'\nimport { captureAiGeneration } from '../captureAiGeneration'\nimport type { APIPromise } from 'openai'\nimport type { Stream } from 'openai/streaming'\nimport type { ParsedResponse } from 'openai/resources/responses/responses'\nimport type { ResponseCreateParamsWithTools, ExtractParsedContentFromParams } from 'openai/lib/ResponsesParser'\nimport type { FormattedMessage, FormattedContent, FormattedFunctionCall } from '../types'\nimport { sanitizeOpenAI } from '../sanitization'\nimport { extractPosthogParams } from '../utils'\nimport { isResponseTokenChunk, extractRequestId, buildProviderMetadata } from './utils'\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\ntype ResponsesCreateParamsBase = OpenAIOrignal.Responses.ResponseCreateParams\ntype ResponsesCreateParamsNonStreaming = OpenAIOrignal.Responses.ResponseCreateParamsNonStreaming\ntype ResponsesCreateParamsStreaming = OpenAIOrignal.Responses.ResponseCreateParamsStreaming\ntype CreateEmbeddingResponse = OpenAIOrignal.CreateEmbeddingResponse\ntype EmbeddingCreateParams = OpenAIOrignal.EmbeddingCreateParams\n\ninterface MonitoringOpenAIConfig {\n  apiKey: string\n  posthog: PostHog\n  baseURL?: string\n}\n\ntype RequestOptions = Record<string, any>\n\nexport class PostHogAzureOpenAI extends AzureOpenAI {\n  private readonly phClient: PostHog\n  public chat: WrappedChat\n  public responses: WrappedResponses\n  public embeddings: WrappedEmbeddings\n\n  constructor(config: MonitoringOpenAIConfig) {\n    const { posthog, ...openAIConfig } = config\n    super(openAIConfig)\n    this.phClient = posthog\n    this.chat = new WrappedChat(this, this.phClient)\n    this.responses = new WrappedResponses(this, this.phClient)\n    this.embeddings = new WrappedEmbeddings(this, this.phClient)\n  }\n}\n\nexport class WrappedChat extends AzureOpenAI.Chat {\n  constructor(parentClient: PostHogAzureOpenAI, phClient: PostHog) {\n    super(parentClient)\n    this.completions = new WrappedCompletions(parentClient, phClient)\n  }\n\n  public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends AzureOpenAI.Chat.Completions {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: AzureOpenAI, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<ChatCompletionChunk>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n  // --- Implementation Signature\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      return parentPromise.then((value) => {\n        if ('tee' in value) {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            // Hoisted so the catch block can surface whatever was accumulated\n            // from the streamed chunks before the failure.\n            let completionIdFromResponse: string | undefined\n            let systemFingerprintFromResponse: string | undefined\n            try {\n              const contentBlocks: FormattedContent = []\n              let accumulatedContent = ''\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n              }\n\n              // Map to track in-progress tool calls\n              const toolCallsInProgress = new Map<\n                number,\n                {\n                  id: string\n                  name: string\n                  arguments: string\n                }\n              >()\n\n              for await (const chunk of stream1) {\n                // Extract model and completion metadata from chunk (Chat Completions chunks carry these fields)\n                if (!modelFromResponse && chunk.model) {\n                  modelFromResponse = chunk.model\n                }\n                if (!completionIdFromResponse && chunk.id) {\n                  completionIdFromResponse = chunk.id\n                }\n                if (!systemFingerprintFromResponse && chunk.system_fingerprint) {\n                  systemFingerprintFromResponse = chunk.system_fingerprint\n                }\n\n                const choice = chunk?.choices?.[0]\n\n                // Handle text content\n                const deltaContent = choice?.delta?.content\n                if (deltaContent) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  accumulatedContent += deltaContent\n                }\n\n                // Handle tool calls\n                const deltaToolCalls = choice?.delta?.tool_calls\n                if (deltaToolCalls && Array.isArray(deltaToolCalls)) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  for (const toolCall of deltaToolCalls) {\n                    const index = toolCall.index\n\n                    if (index !== undefined) {\n                      if (!toolCallsInProgress.has(index)) {\n                        // New tool call\n                        toolCallsInProgress.set(index, {\n                          id: toolCall.id || '',\n                          name: toolCall.function?.name || '',\n                          arguments: '',\n                        })\n                      }\n\n                      const inProgressCall = toolCallsInProgress.get(index)\n                      if (inProgressCall) {\n                        // Update tool call data\n                        if (toolCall.id) {\n                          inProgressCall.id = toolCall.id\n                        }\n                        if (toolCall.function?.name) {\n                          inProgressCall.name = toolCall.function.name\n                        }\n                        if (toolCall.function?.arguments) {\n                          inProgressCall.arguments += toolCall.function.arguments\n                        }\n                      }\n                    }\n                  }\n                }\n\n                // Handle usage information\n                if (chunk.usage) {\n                  usage = {\n                    inputTokens: chunk.usage.prompt_tokens ?? 0,\n                    outputTokens: chunk.usage.completion_tokens ?? 0,\n                    reasoningTokens: chunk.usage.completion_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.usage.prompt_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              // Build final content blocks\n              if (accumulatedContent) {\n                contentBlocks.push({ type: 'text', text: accumulatedContent })\n              }\n\n              // Add completed tool calls to content blocks\n              for (const toolCall of toolCallsInProgress.values()) {\n                if (toolCall.name) {\n                  contentBlocks.push({\n                    type: 'function',\n                    id: toolCall.id,\n                    function: {\n                      name: toolCall.name,\n                      arguments: toolCall.arguments,\n                    },\n                  } as FormattedFunctionCall)\n                }\n              }\n\n              // Format output to match non-streaming version\n              const formattedOutput: FormattedMessage[] =\n                contentBlocks.length > 0\n                  ? [\n                      {\n                        role: 'assistant',\n                        content: contentBlocks,\n                      },\n                    ]\n                  : [\n                      {\n                        role: 'assistant',\n                        content: [{ type: 'text', text: '' }],\n                      },\n                    ]\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'azure',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: formattedOutput,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage,\n                completionId: completionIdFromResponse,\n                providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'azure',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                // If the stream fails mid-flight, surface whatever completion\n                // metadata the consumed chunks already provided so the error\n                // event can still be correlated to OpenAI's Logs dashboard.\n                completionId: completionIdFromResponse,\n                providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\n                error: error,\n              })\n              throw error\n            }\n          })().catch(() => {\n            // Swallow: analytics must never crash the host process. The caller\n            // already receives this error via their own tee of the stream.\n          })\n\n          // Return the other stream to the user\n          return stream2\n        }\n        return value\n      }) as APIPromise<Stream<ChatCompletionChunk>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('choices' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'azure',\n              input: openAIParams.messages,\n              output: formatResponseOpenAI(result),\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.prompt_tokens ?? 0,\n                outputTokens: result.usage?.completion_tokens ?? 0,\n                reasoningTokens: result.usage?.completion_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.prompt_tokens_details?.cached_tokens ?? 0,\n              },\n              completionId: result.id,\n              providerMetadata: buildProviderMetadata({\n                systemFingerprint: result.system_fingerprint,\n                requestId: extractRequestId(result),\n              }),\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'azure',\n            input: openAIParams.messages,\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      ) as APIPromise<ChatCompletion>\n\n      return wrappedPromise\n    }\n  }\n}\n\nexport class WrappedResponses extends AzureOpenAI.Responses {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: AzureOpenAI, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ResponsesCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ResponsesCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Implementation Signature\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      return parentPromise.then((value) => {\n        if ('tee' in value && typeof (value as any).tee === 'function') {\n          const [stream1, stream2] = (value as any).tee()\n          ;(async () => {\n            // Hoisted so the catch block can surface the completion ID that\n            // was accumulated from the streamed chunks before the failure.\n            let completionIdFromResponse: string | undefined\n            try {\n              let finalContent: any[] = []\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n              }\n\n              for await (const chunk of stream1) {\n                // Track first token time on content delta events\n                if (firstTokenTime === undefined && isResponseTokenChunk(chunk)) {\n                  firstTokenTime = Date.now()\n                }\n\n                if ('response' in chunk && chunk.response) {\n                  // Extract model and completion ID from the response object in the chunk (for stored prompts)\n                  if (!modelFromResponse && chunk.response.model) {\n                    modelFromResponse = chunk.response.model\n                  }\n                  if (!completionIdFromResponse && chunk.response.id) {\n                    completionIdFromResponse = chunk.response.id\n                  }\n                }\n                if (\n                  chunk.type === 'response.completed' &&\n                  'response' in chunk &&\n                  chunk.response?.output &&\n                  chunk.response.output.length > 0\n                ) {\n                  finalContent = chunk.response.output\n                }\n                if ('usage' in chunk && chunk.usage) {\n                  usage = {\n                    inputTokens: chunk.usage.input_tokens ?? 0,\n                    outputTokens: chunk.usage.output_tokens ?? 0,\n                    reasoningTokens: chunk.usage.output_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.usage.input_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'azure',\n                input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n                output: finalContent,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage,\n                completionId: completionIdFromResponse,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'azure',\n                input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                // Surface the completion ID from any chunks consumed before\n                // the stream failed so the error event remains correlatable.\n                completionId: completionIdFromResponse,\n                error: error,\n              })\n              throw error\n            }\n          })().catch(() => {\n            // Swallow: analytics must never crash the host process. The caller\n            // already receives this error via their own tee of the stream.\n          })\n\n          return stream2\n        }\n        return value\n      }) as APIPromise<Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('output' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            await captureAiGeneration(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'azure',\n              input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n              output: result.output,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.input_tokens ?? 0,\n                outputTokens: result.usage?.output_tokens ?? 0,\n                reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n              },\n              completionId: result.id,\n              providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'azure',\n            input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      ) as APIPromise<OpenAIOrignal.Responses.Response>\n\n      return wrappedPromise\n    }\n  }\n\n  public parse<Params extends ResponseCreateParamsWithTools, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ParsedResponse<ParsedT>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.parse(openAIParams, options)\n\n    const wrappedPromise = parentPromise.then(\n      async (result) => {\n        const latency = (Date.now() - startTime) / 1000\n        await captureAiGeneration(this.phClient, {\n          ...posthogParams,\n          model: openAIParams.model ?? result.model,\n          provider: 'azure',\n          input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n          output: result.output,\n          latency,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus: 200,\n          usage: {\n            inputTokens: result.usage?.input_tokens ?? 0,\n            outputTokens: result.usage?.output_tokens ?? 0,\n            reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n            cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n          },\n          completionId: result.id,\n          providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\n        })\n        return result\n      },\n      async (error: any) => {\n        await captureAiGeneration(this.phClient, {\n          ...posthogParams,\n          model: openAIParams.model,\n          provider: 'azure',\n          input: formatOpenAIResponsesInput(openAIParams.input, openAIParams.instructions),\n          output: [],\n          latency: 0,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus: error?.status ? error.status : 500,\n          usage: {\n            inputTokens: 0,\n            outputTokens: 0,\n          },\n          error,\n        })\n        throw error\n      }\n    )\n\n    return wrappedPromise as APIPromise<ParsedResponse<ParsedT>>\n  }\n}\n\nexport class WrappedEmbeddings extends AzureOpenAI.Embeddings {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: AzureOpenAI, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  public create(\n    body: EmbeddingCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<CreateEmbeddingResponse> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n    const wrappedPromise = parentPromise.then(\n      async (result) => {\n        const latency = (Date.now() - startTime) / 1000\n        await captureAiGeneration(this.phClient, {\n          eventType: AIEvent.Embedding,\n          ...posthogParams,\n          model: openAIParams.model,\n          provider: 'azure',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null, // Embeddings don't have output content\n          latency,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus: 200,\n          usage: {\n            inputTokens: result.usage?.prompt_tokens ?? 0,\n          },\n        })\n        return result\n      },\n      async (error: unknown) => {\n        const httpStatus =\n          error && typeof error === 'object' && 'status' in error ? ((error as { status?: number }).status ?? 500) : 500\n\n        await captureAiGeneration(this.phClient, {\n          eventType: AIEvent.Embedding,\n          ...posthogParams,\n          model: openAIParams.model,\n          provider: 'azure',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null,\n          latency: 0,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus,\n          usage: {\n            inputTokens: 0,\n          },\n          error,\n        })\n        throw error\n      }\n    ) as APIPromise<CreateEmbeddingResponse>\n\n    return wrappedPromise\n  }\n}\n\nexport default PostHogAzureOpenAI\n\nexport { PostHogAzureOpenAI as OpenAI }\n","import { OpenAI as OpenAIOrignal, ClientOptions } from 'openai'\nimport { PostHog } from 'posthog-node'\nimport {\n  formatResponseOpenAI,\n  MonitoringParams,\n  extractAvailableToolCalls,\n  withPrivacyMode,\n  AIEvent,\n  formatOpenAIResponsesInput,\n  calculateWebSearchCount,\n  getModelParams,\n} from '../utils'\nimport { captureAiGeneration } from '../captureAiGeneration'\nimport type { APIPromise } from 'openai'\nimport type { Stream } from 'openai/streaming'\nimport type { ParsedResponse } from 'openai/resources/responses/responses'\nimport type { ResponseCreateParamsWithTools, ExtractParsedContentFromParams } from 'openai/lib/ResponsesParser'\nimport type { FormattedMessage, FormattedContent, FormattedFunctionCall } from '../types'\nimport { sanitizeOpenAI, sanitizeOpenAIResponse } from '../sanitization'\nimport { extractPosthogParams } from '../utils'\nimport { isResponseTokenChunk, extractRequestId, buildProviderMetadata } from './utils'\n\nconst Chat = OpenAIOrignal.Chat\nconst Completions = Chat.Completions\nconst Responses = OpenAIOrignal.Responses\nconst Embeddings = OpenAIOrignal.Embeddings\nconst Audio = OpenAIOrignal.Audio\nconst Transcriptions = OpenAIOrignal.Audio.Transcriptions\n\ntype ChatCompletion = OpenAIOrignal.ChatCompletion\ntype ChatCompletionChunk = OpenAIOrignal.ChatCompletionChunk\ntype ChatCompletionCreateParamsBase = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParams\ntype ChatCompletionCreateParamsNonStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsNonStreaming\ntype ChatCompletionCreateParamsStreaming = OpenAIOrignal.Chat.Completions.ChatCompletionCreateParamsStreaming\ntype ResponsesCreateParamsBase = OpenAIOrignal.Responses.ResponseCreateParams\ntype ResponsesCreateParamsNonStreaming = OpenAIOrignal.Responses.ResponseCreateParamsNonStreaming\ntype ResponsesCreateParamsStreaming = OpenAIOrignal.Responses.ResponseCreateParamsStreaming\ntype CreateEmbeddingResponse = OpenAIOrignal.CreateEmbeddingResponse\ntype EmbeddingCreateParams = OpenAIOrignal.EmbeddingCreateParams\n\ninterface MonitoringOpenAIConfig extends ClientOptions {\n  apiKey: string\n  posthog: PostHog\n  baseURL?: string\n}\n\ntype RequestOptions = Record<string, unknown>\ntype APIPromiseWithResponse<T> = Awaited<ReturnType<APIPromise<T>['withResponse']>>\n\nfunction captureAiGenerationInBackground(...args: Parameters<typeof captureAiGeneration>): void {\n  void captureAiGeneration(...args).catch(() => undefined)\n}\n\nasync function captureAiGenerationAfterSuccess(...args: Parameters<typeof captureAiGeneration>): Promise<void> {\n  const [, options] = args\n\n  if (options.captureImmediate) {\n    await captureAiGeneration(...args)\n  } else {\n    captureAiGenerationInBackground(...args)\n  }\n}\n\nfunction preserveAPIPromiseHelpers<Input, Output>(\n  parentPromise: APIPromise<Input>,\n  wrappedPromise: Promise<Output>\n): APIPromise<Output> {\n  const apiPromise = wrappedPromise as APIPromise<Output>\n\n  if (typeof parentPromise.asResponse === 'function') {\n    apiPromise.asResponse = () => parentPromise.asResponse()\n  }\n\n  if (typeof parentPromise.withResponse === 'function') {\n    apiPromise.withResponse = async () => {\n      const [response, data] = await Promise.all([parentPromise.withResponse(), wrappedPromise])\n      return { ...response, data } as APIPromiseWithResponse<Output>\n    }\n  }\n\n  return apiPromise\n}\n\nconst TERMINAL_RESPONSE_STATUSES = new Set(['completed', 'failed', 'cancelled', 'incomplete'])\n\nfunction isPendingBackgroundResponse(\n  params: { background?: boolean | null },\n  response: { status?: string | null; usage?: unknown | null }\n): boolean {\n  return (\n    params.background === true &&\n    !response.usage &&\n    !!response.status &&\n    !TERMINAL_RESPONSE_STATUSES.has(response.status)\n  )\n}\n\nexport class PostHogOpenAI extends OpenAIOrignal {\n  private readonly phClient: PostHog\n  public chat: WrappedChat\n  public responses: WrappedResponses\n  public embeddings: WrappedEmbeddings\n  public audio: WrappedAudio\n\n  constructor(config: MonitoringOpenAIConfig) {\n    const { posthog, ...openAIConfig } = config\n    super(openAIConfig)\n    this.phClient = posthog\n    this.chat = new WrappedChat(this, this.phClient)\n    this.responses = new WrappedResponses(this, this.phClient)\n    this.embeddings = new WrappedEmbeddings(this, this.phClient)\n    this.audio = new WrappedAudio(this, this.phClient)\n  }\n}\n\nexport class WrappedChat extends Chat {\n  constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n    super(parentClient)\n    this.completions = new WrappedCompletions(parentClient, phClient)\n  }\n\n  public completions: WrappedCompletions\n}\n\nexport class WrappedCompletions extends Completions {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ChatCompletionCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ChatCompletionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<ChatCompletionChunk>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>>\n\n  // --- Implementation Signature\n  public create(\n    body: ChatCompletionCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ChatCompletion | Stream<ChatCompletionChunk>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      const wrappedPromise = parentPromise.then((value) => {\n        if ('tee' in value) {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            // Hoisted so the catch block can surface whatever was accumulated\n            // from the streamed chunks before the failure.\n            let completionIdFromResponse: string | undefined\n            let systemFingerprintFromResponse: string | undefined\n            try {\n              const contentBlocks: FormattedContent = []\n              let accumulatedContent = ''\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let stopReason: string | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n                webSearchCount?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n                webSearchCount: 0,\n              }\n\n              // Map to track in-progress tool calls\n              const toolCallsInProgress = new Map<\n                number,\n                {\n                  id: string\n                  name: string\n                  arguments: string\n                }\n              >()\n              let rawUsageData: unknown\n\n              for await (const chunk of stream1) {\n                // Extract model and completion metadata from chunk (Chat Completions chunks carry these fields)\n                if (!modelFromResponse && chunk.model) {\n                  modelFromResponse = chunk.model\n                }\n                if (!completionIdFromResponse && chunk.id) {\n                  completionIdFromResponse = chunk.id\n                }\n                if (!systemFingerprintFromResponse && chunk.system_fingerprint) {\n                  systemFingerprintFromResponse = chunk.system_fingerprint\n                }\n\n                const choice = chunk?.choices?.[0]\n\n                if (choice?.finish_reason) {\n                  stopReason = choice.finish_reason\n                }\n\n                const chunkWebSearchCount = calculateWebSearchCount(chunk)\n                if (chunkWebSearchCount > 0 && chunkWebSearchCount > (usage.webSearchCount ?? 0)) {\n                  usage.webSearchCount = chunkWebSearchCount\n                }\n\n                // Handle text content\n                const deltaContent = choice?.delta?.content\n                if (deltaContent) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  accumulatedContent += deltaContent\n                }\n\n                // Handle tool calls\n                const deltaToolCalls = choice?.delta?.tool_calls\n                if (deltaToolCalls && Array.isArray(deltaToolCalls)) {\n                  if (firstTokenTime === undefined) {\n                    firstTokenTime = Date.now()\n                  }\n                  for (const toolCall of deltaToolCalls) {\n                    const index = toolCall.index\n\n                    if (index !== undefined) {\n                      if (!toolCallsInProgress.has(index)) {\n                        // New tool call\n                        toolCallsInProgress.set(index, {\n                          id: toolCall.id || '',\n                          name: toolCall.function?.name || '',\n                          arguments: '',\n                        })\n                      }\n\n                      const inProgressCall = toolCallsInProgress.get(index)\n                      if (inProgressCall) {\n                        // Update tool call data\n                        if (toolCall.id) {\n                          inProgressCall.id = toolCall.id\n                        }\n                        if (toolCall.function?.name) {\n                          inProgressCall.name = toolCall.function.name\n                        }\n                        if (toolCall.function?.arguments) {\n                          inProgressCall.arguments += toolCall.function.arguments\n                        }\n                      }\n                    }\n                  }\n                }\n\n                // Handle usage information\n                if (chunk.usage) {\n                  rawUsageData = chunk.usage\n                  usage = {\n                    ...usage,\n                    inputTokens: chunk.usage.prompt_tokens ?? 0,\n                    outputTokens: chunk.usage.completion_tokens ?? 0,\n                    reasoningTokens: chunk.usage.completion_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.usage.prompt_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              // Build final content blocks\n              if (accumulatedContent) {\n                contentBlocks.push({ type: 'text', text: accumulatedContent })\n              }\n\n              // Add completed tool calls to content blocks\n              for (const toolCall of toolCallsInProgress.values()) {\n                if (toolCall.name) {\n                  contentBlocks.push({\n                    type: 'function',\n                    id: toolCall.id,\n                    function: {\n                      name: toolCall.name,\n                      arguments: toolCall.arguments,\n                    },\n                  } as FormattedFunctionCall)\n                }\n              }\n\n              // Format output to match non-streaming version\n              const formattedOutput: FormattedMessage[] =\n                contentBlocks.length > 0\n                  ? [\n                      {\n                        role: 'assistant',\n                        content: contentBlocks,\n                      },\n                    ]\n                  : [\n                      {\n                        role: 'assistant',\n                        content: [{ type: 'text', text: '' }],\n                      },\n                    ]\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'openai',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: formattedOutput,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage: {\n                  inputTokens: usage.inputTokens,\n                  outputTokens: usage.outputTokens,\n                  reasoningTokens: usage.reasoningTokens,\n                  cacheReadInputTokens: usage.cacheReadInputTokens,\n                  webSearchCount: usage.webSearchCount,\n                  rawUsage: rawUsageData,\n                },\n                stopReason,\n                tools: availableTools,\n                completionId: completionIdFromResponse,\n                providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: sanitizeOpenAI(openAIParams.messages),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                // If the stream fails mid-flight, surface whatever completion\n                // metadata the consumed chunks already provided so the error\n                // event can still be correlated to OpenAI's Logs dashboard.\n                completionId: completionIdFromResponse,\n                providerMetadata: buildProviderMetadata({ systemFingerprint: systemFingerprintFromResponse }),\n                error,\n              })\n              throw error\n            }\n          })().catch(() => {\n            // Swallow: analytics must never crash the host process. The caller\n            // already receives this error via their own tee of the stream.\n          })\n\n          // Return the other stream to the user\n          return stream2\n        }\n        return value\n      })\n\n      return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('choices' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            const availableTools = extractAvailableToolCalls('openai', openAIParams)\n            const formattedOutput = formatResponseOpenAI(result)\n            await captureAiGenerationAfterSuccess(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'openai',\n              input: sanitizeOpenAI(openAIParams.messages),\n              output: formattedOutput,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.prompt_tokens ?? 0,\n                outputTokens: result.usage?.completion_tokens ?? 0,\n                reasoningTokens: result.usage?.completion_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.prompt_tokens_details?.cached_tokens ?? 0,\n                webSearchCount: calculateWebSearchCount(result),\n                rawUsage: result.usage,\n              },\n              stopReason: result.choices[0]?.finish_reason ?? undefined,\n              tools: availableTools,\n              completionId: result.id,\n              providerMetadata: buildProviderMetadata({\n                systemFingerprint: result.system_fingerprint,\n                requestId: extractRequestId(result),\n              }),\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: sanitizeOpenAI(openAIParams.messages),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      )\n\n      return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\n    }\n  }\n}\n\nexport class WrappedResponses extends Responses {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: ResponsesCreateParamsNonStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response>\n\n  // --- Overload #2: Streaming\n  public create(\n    body: ResponsesCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Overload #3: Generic base\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>>\n\n  // --- Implementation Signature\n  public create(\n    body: ResponsesCreateParamsBase & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Responses.Response | Stream<OpenAIOrignal.Responses.ResponseStreamEvent>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      const wrappedPromise = parentPromise.then((value) => {\n        if ('tee' in value && typeof value.tee === 'function') {\n          const [stream1, stream2] = value.tee()\n          ;(async () => {\n            // Hoisted so the catch block can surface the completion ID that\n            // was accumulated from the streamed chunks before the failure.\n            let completionIdFromResponse: string | undefined\n            try {\n              let finalContent: unknown[] = []\n              let modelFromResponse: string | undefined\n              let firstTokenTime: number | undefined\n              let stopReason: string | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                reasoningTokens?: number\n                cacheReadInputTokens?: number\n                webSearchCount?: number\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n                webSearchCount: 0,\n              }\n              let rawUsageData: unknown\n\n              for await (const chunk of stream1) {\n                // Track first token time on content delta events\n                if (firstTokenTime === undefined && isResponseTokenChunk(chunk)) {\n                  firstTokenTime = Date.now()\n                }\n\n                if ('response' in chunk && chunk.response) {\n                  // Extract model and completion ID from the response object in the chunk (for stored prompts)\n                  if (!modelFromResponse && chunk.response.model) {\n                    modelFromResponse = chunk.response.model\n                  }\n                  if (!completionIdFromResponse && chunk.response.id) {\n                    completionIdFromResponse = chunk.response.id\n                  }\n\n                  const chunkWebSearchCount = calculateWebSearchCount(chunk.response)\n                  if (chunkWebSearchCount > 0 && chunkWebSearchCount > (usage.webSearchCount ?? 0)) {\n                    usage.webSearchCount = chunkWebSearchCount\n                  }\n                }\n\n                if (\n                  chunk.type === 'response.completed' &&\n                  'response' in chunk &&\n                  chunk.response?.output &&\n                  chunk.response.output.length > 0\n                ) {\n                  finalContent = chunk.response.output\n                  if (chunk.response.status) {\n                    stopReason = chunk.response.status\n                  }\n                }\n                if ('response' in chunk && chunk.response?.usage) {\n                  rawUsageData = chunk.response.usage\n                  usage = {\n                    ...usage,\n                    inputTokens: chunk.response.usage.input_tokens ?? 0,\n                    outputTokens: chunk.response.usage.output_tokens ?? 0,\n                    reasoningTokens: chunk.response.usage.output_tokens_details?.reasoning_tokens ?? 0,\n                    cacheReadInputTokens: chunk.response.usage.input_tokens_details?.cached_tokens ?? 0,\n                  }\n                }\n              }\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model ?? modelFromResponse,\n                provider: 'openai',\n                input: formatOpenAIResponsesInput(\n                  sanitizeOpenAIResponse(openAIParams.input),\n                  openAIParams.instructions\n                ),\n                output: finalContent,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage: {\n                  inputTokens: usage.inputTokens,\n                  outputTokens: usage.outputTokens,\n                  reasoningTokens: usage.reasoningTokens,\n                  cacheReadInputTokens: usage.cacheReadInputTokens,\n                  webSearchCount: usage.webSearchCount,\n                  rawUsage: rawUsageData,\n                },\n                stopReason,\n                tools: availableTools,\n                completionId: completionIdFromResponse,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: formatOpenAIResponsesInput(\n                  sanitizeOpenAIResponse(openAIParams.input),\n                  openAIParams.instructions\n                ),\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                // Surface the completion ID from any chunks consumed before\n                // the stream failed so the error event remains correlatable.\n                completionId: completionIdFromResponse,\n                error,\n              })\n              throw error\n            }\n          })().catch(() => {\n            // Swallow: analytics must never crash the host process. The caller\n            // already receives this error via their own tee of the stream.\n          })\n\n          return stream2\n        }\n        return value\n      })\n\n      return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if ('output' in result) {\n            if (isPendingBackgroundResponse(openAIParams, result)) {\n              return result\n            }\n\n            const latency = (Date.now() - startTime) / 1000\n            const availableTools = extractAvailableToolCalls('openai', openAIParams)\n            const formattedOutput = formatResponseOpenAI({ output: result.output })\n            await captureAiGenerationAfterSuccess(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model ?? result.model,\n              provider: 'openai',\n              input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n              output: formattedOutput,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.input_tokens ?? 0,\n                outputTokens: result.usage?.output_tokens ?? 0,\n                reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n                cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n                webSearchCount: calculateWebSearchCount(result),\n                rawUsage: result.usage,\n              },\n              stopReason: result.status ?? undefined,\n              tools: availableTools,\n              completionId: result.id,\n              providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          const httpStatus =\n            error && typeof error === 'object' && 'status' in error\n              ? ((error as { status?: number }).status ?? 500)\n              : 500\n\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus,\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      )\n\n      return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\n    }\n  }\n\n  public parse<Params extends ResponseCreateParamsWithTools, ParsedT = ExtractParsedContentFromParams<Params>>(\n    body: Params & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<ParsedResponse<ParsedT>> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const originalCreate = super.create.bind(this)\n    const originalSelfRecord = this as Record<string, unknown>\n    const tempCreate = originalSelfRecord['create']\n    originalSelfRecord['create'] = originalCreate\n\n    try {\n      const parentPromise = super.parse(openAIParams, options)\n\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if (isPendingBackgroundResponse(openAIParams, result)) {\n            return result\n          }\n\n          const latency = (Date.now() - startTime) / 1000\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model ?? result.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: result.output,\n            latency,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            httpStatus: 200,\n            usage: {\n              inputTokens: result.usage?.input_tokens ?? 0,\n              outputTokens: result.usage?.output_tokens ?? 0,\n              reasoningTokens: result.usage?.output_tokens_details?.reasoning_tokens ?? 0,\n              cacheReadInputTokens: result.usage?.input_tokens_details?.cached_tokens ?? 0,\n              rawUsage: result.usage,\n            },\n            stopReason: result.status ?? undefined,\n            completionId: result.id,\n            providerMetadata: buildProviderMetadata({ requestId: extractRequestId(result) }),\n          })\n          return result\n        },\n        async (error: Error) => {\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: formatOpenAIResponsesInput(sanitizeOpenAIResponse(openAIParams.input), openAIParams.instructions),\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      )\n\n      return preserveAPIPromiseHelpers(parentPromise, wrappedPromise) as APIPromise<ParsedResponse<ParsedT>>\n    } finally {\n      // Restore our wrapped create method\n      originalSelfRecord['create'] = tempCreate\n    }\n  }\n}\n\nexport class WrappedEmbeddings extends Embeddings {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  public create(\n    body: EmbeddingCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<CreateEmbeddingResponse> {\n    const { providerParams: openAIParams, posthogParams } = extractPosthogParams(body)\n    const startTime = Date.now()\n\n    const parentPromise = super.create(openAIParams, options)\n\n    const wrappedPromise = parentPromise.then(\n      async (result) => {\n        const latency = (Date.now() - startTime) / 1000\n        await captureAiGeneration(this.phClient, {\n          ...posthogParams,\n          eventType: AIEvent.Embedding,\n          model: openAIParams.model,\n          provider: 'openai',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null, // Embeddings don't have output content\n          latency,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus: 200,\n          usage: {\n            inputTokens: result.usage?.prompt_tokens ?? 0,\n            rawUsage: result.usage,\n          },\n        })\n        return result\n      },\n      async (error: unknown) => {\n        const httpStatus =\n          error && typeof error === 'object' && 'status' in error ? ((error as { status?: number }).status ?? 500) : 500\n\n        await captureAiGeneration(this.phClient, {\n          eventType: AIEvent.Embedding,\n          ...posthogParams,\n          model: openAIParams.model,\n          provider: 'openai',\n          input: withPrivacyMode(this.phClient, posthogParams.privacyMode, openAIParams.input),\n          output: null, // Embeddings don't have output content\n          latency: 0,\n          baseURL: this.baseURL,\n          modelParameters: getModelParams(body),\n          httpStatus,\n          usage: {\n            inputTokens: 0,\n          },\n          error,\n        })\n        throw error\n      }\n    )\n\n    return preserveAPIPromiseHelpers(parentPromise, wrappedPromise)\n  }\n}\n\nexport class WrappedAudio extends Audio {\n  constructor(parentClient: PostHogOpenAI, phClient: PostHog) {\n    super(parentClient)\n    this.transcriptions = new WrappedTranscriptions(parentClient, phClient)\n  }\n\n  public transcriptions: WrappedTranscriptions\n}\n\nexport class WrappedTranscriptions extends Transcriptions {\n  private readonly phClient: PostHog\n  private readonly baseURL: string\n\n  constructor(client: OpenAIOrignal, phClient: PostHog) {\n    super(client)\n    this.phClient = phClient\n    this.baseURL = client.baseURL\n  }\n\n  // --- Overload #1: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'json' | undefined> &\n      MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.Transcription>\n\n  // --- Overload #2: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'verbose_json'> & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.TranscriptionVerbose>\n\n  // --- Overload #3: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming<'srt' | 'vtt' | 'text'> &\n      MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<string>\n\n  // --- Overload #4: Non-streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsNonStreaming,\n    options?: RequestOptions\n  ): APIPromise<OpenAIOrignal.Audio.Transcriptions.Transcription>\n\n  // --- Overload #5: Streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>>\n\n  // --- Overload #6: Streaming\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParamsStreaming & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  >\n\n  // --- Overload #7: Generic base\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  >\n\n  // --- Implementation Signature\n  public create(\n    body: OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams & MonitoringParams,\n    options?: RequestOptions\n  ): APIPromise<\n    | OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse\n    | string\n    | Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>\n  > {\n    const { providerParams: openAIParams, posthogParams } =\n      extractPosthogParams<OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateParams>(body)\n    const startTime = Date.now()\n\n    const parentPromise = openAIParams.stream\n      ? super.create(openAIParams, options)\n      : super.create(openAIParams, options)\n\n    if (openAIParams.stream) {\n      const wrappedPromise = parentPromise.then((value) => {\n        if ('tee' in value && typeof (value as any).tee === 'function') {\n          const [stream1, stream2] = (value as any).tee()\n          ;(async () => {\n            try {\n              let finalContent: string = ''\n              let firstTokenTime: number | undefined\n              let usage: {\n                inputTokens?: number\n                outputTokens?: number\n                rawUsage?: unknown\n              } = {\n                inputTokens: 0,\n                outputTokens: 0,\n              }\n\n              const doneEvent: OpenAIOrignal.Audio.Transcriptions.TranscriptionTextDoneEvent['type'] =\n                'transcript.text.done'\n              for await (const chunk of stream1) {\n                // Track first token on text delta events\n                if (firstTokenTime === undefined && chunk.type === 'transcript.text.delta') {\n                  firstTokenTime = Date.now()\n                }\n\n                if (chunk.type === doneEvent && 'text' in chunk && chunk.text && chunk.text.length > 0) {\n                  finalContent = chunk.text\n                }\n                if ('usage' in chunk && chunk.usage) {\n                  usage = {\n                    inputTokens: chunk.usage?.type === 'tokens' ? (chunk.usage.input_tokens ?? 0) : 0,\n                    outputTokens: chunk.usage?.type === 'tokens' ? (chunk.usage.output_tokens ?? 0) : 0,\n                    rawUsage: chunk.usage,\n                  }\n                }\n              }\n\n              const latency = (Date.now() - startTime) / 1000\n              const timeToFirstToken = firstTokenTime !== undefined ? (firstTokenTime - startTime) / 1000 : undefined\n              const availableTools = extractAvailableToolCalls('openai', openAIParams)\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: openAIParams.prompt,\n                output: finalContent,\n                latency,\n                timeToFirstToken,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                httpStatus: 200,\n                usage,\n                tools: availableTools,\n              })\n            } catch (error: unknown) {\n              await captureAiGeneration(this.phClient, {\n                ...posthogParams,\n                model: openAIParams.model,\n                provider: 'openai',\n                input: openAIParams.prompt,\n                output: [],\n                latency: 0,\n                baseURL: this.baseURL,\n                modelParameters: getModelParams(body),\n                usage: { inputTokens: 0, outputTokens: 0 },\n                error,\n              })\n              throw error\n            }\n          })().catch(() => {\n            // Swallow: analytics must never crash the host process. The caller\n            // already receives this error via their own tee of the stream.\n          })\n\n          return stream2\n        }\n        return value\n      })\n\n      return preserveAPIPromiseHelpers(\n        parentPromise as APIPromise<Stream<OpenAIOrignal.Audio.Transcriptions.TranscriptionStreamEvent>>,\n        wrappedPromise\n      )\n    } else {\n      const wrappedPromise = parentPromise.then(\n        async (result) => {\n          if (result && typeof result === 'object' && 'text' in result) {\n            const latency = (Date.now() - startTime) / 1000\n            await captureAiGenerationAfterSuccess(this.phClient, {\n              ...posthogParams,\n              model: openAIParams.model,\n              provider: 'openai',\n              input: openAIParams.prompt,\n              output: result.text,\n              latency,\n              baseURL: this.baseURL,\n              modelParameters: getModelParams(body),\n              httpStatus: 200,\n              usage: {\n                inputTokens: result.usage?.type === 'tokens' ? (result.usage.input_tokens ?? 0) : 0,\n                outputTokens: result.usage?.type === 'tokens' ? (result.usage.output_tokens ?? 0) : 0,\n                rawUsage: result.usage,\n              },\n            })\n          }\n          return result\n        },\n        async (error: unknown) => {\n          await captureAiGeneration(this.phClient, {\n            ...posthogParams,\n            model: openAIParams.model,\n            provider: 'openai',\n            input: openAIParams.prompt,\n            output: [],\n            latency: 0,\n            baseURL: this.baseURL,\n            modelParameters: getModelParams(body),\n            usage: {\n              inputTokens: 0,\n              outputTokens: 0,\n            },\n            error,\n          })\n          throw error\n        }\n      )\n\n      return preserveAPIPromiseHelpers(\n        parentPromise as APIPromise<OpenAIOrignal.Audio.Transcriptions.TranscriptionCreateResponse>,\n        wrappedPromise\n      )\n    }\n  }\n}\n\nexport default PostHogOpenAI\n\nexport { PostHogOpenAI as OpenAI }\nexport { default as AzureOpenAI } from './azure'\n"],"names":["isString","value","DATA_URL_PREFIX_RE","BASE64_ALPHABET_RE","Base64Recognizer","recognize","minLength","dataUrl","exec","kind","mediaType","length","confidencePrefix","slice","test","MIME_HINT_KEYS","STRONG_CONTEXT_KEYS","Set","STRONG_CONTEXT_TYPES","FILE_FAMILY_TYPES","KNOWN_AUDIO_FORMATS","MediaTypeContext","EMPTY","undefined","constructor","parent","key","inferMediaType","inferFromSiblingMime","inferFromSiblingFormat","inferFromParentType","inferFromKey","hint","v","fmt","format","has","toLowerCase","t","type","includes","signalsBinary","STRONG_CONTEXT_MIN_LENGTH","WEAK_CONTEXT_MIN_LENGTH","BinaryContentRedactor","visited","WeakSet","recognizer","redact","isMultimodalEnabled","walk","ctx","redactString","Uint8Array","placeholderFor","add","Array","isArray","map","item","obj","out","k","Object","keys","recognition","val","process","env","_INTERNAL_LLMA_MULTIMODAL","redactor","sanitizeOpenAI","data","sanitizeOpenAIResponse","TOKEN_PROPERTY_KEYS","getTokensSource","posthogProperties","some","STRING_FORMAT","TextEncoder","TextDecoder","fatal","toContentString","content","JSON","stringify","String","getModelParams","params","modelParams","paramKeys","formatResponseOpenAI","response","output","choices","choice","role","message","push","text","tool_calls","toolCall","id","function","name","arguments","audio","contentItem","image_url","image","call_id","withPrivacyMode","client","privacyMode","input","privacy_mode","calculateWebSearchCount","result","count","citations","search_results","usage","search_context_size","delta","annotations","hasUrlCitation","ann","candidates","candidate","grounding_metadata","extractAvailableToolCalls","provider","tools","AIEvent","sanitizeValues","jsonSafe","parse","decode","encode","fromEntries","entries","POSTHOG_PARAMS_MAP","posthogDistinctId","posthogTraceId","posthogPrivacyMode","posthogGroups","posthogModelOverride","posthogProviderOverride","posthogCostOverride","posthogCaptureImmediate","extractPosthogParams","body","providerParams","posthogParams","startsWith","console","warn","addDefaults","traceId","uuidv4","formatOpenAIResponsesInput","instructions","messages","DEFAULT_MAX_DEPTH","MAX_STACK_LINES","serializeError","depth","Error","stack","truncateStack","cause","stringifyError","error","lines","split","join","POSTHOG_AI_GATEWAY_HOSTS","GATEWAY_DOCS_URL","extractHost","baseURL","hasScheme","URL","hostname","isPostHogAiGatewayUrl","host","warnIfPostHogAiGateway","captureAiGeneration","options","capture","eventType","Generation","safeInput","safeOutput","httpStatus","errorData","status","exceptionId","enableExceptionAutocapture","uuidv7","captureException","$ai_trace_id","__posthog_previously_captured_error","$ai_is_error","$ai_error","$exception_event_id","costOverrideData","costOverride","inputCostUSD","inputCost","inputTokens","outputCostUSD","outputCost","outputTokens","$ai_input_cost_usd","$ai_output_cost_usd","$ai_total_cost_usd","additionalTokenValues","reasoningTokens","$ai_reasoning_tokens","cacheReadInputTokens","$ai_cache_read_input_tokens","cacheCreationInputTokens","$ai_cache_creation_input_tokens","webSearchCount","$ai_web_search_count","rawUsage","$ai_usage","properties","$ai_lib","$ai_lib_version","version","$ai_provider","providerOverride","$ai_model","modelOverride","model","$ai_model_parameters","modelParameters","$ai_input","$ai_output_choices","$ai_http_status","$ai_input_tokens","$ai_output_tokens","$ai_latency","latency","timeToFirstToken","$ai_time_to_first_token","$ai_base_url","$ai_tokens_source","distinctId","$process_person_profile","stopReason","$ai_stop_reason","$ai_tools","completionId","$ai_completion_id","providerMetadata","$ai_provider_metadata","event","groups","captureImmediate","isResponseTokenChunk","chunk","extractRequestId","_request_id","buildProviderMetadata","fields","metadata","systemFingerprint","system_fingerprint","requestId","request_id","PostHogAzureOpenAI","AzureOpenAI","config","posthog","openAIConfig","phClient","chat","WrappedChat","responses","WrappedResponses","embeddings","WrappedEmbeddings","Chat","parentClient","completions","WrappedCompletions","Completions","create","openAIParams","startTime","Date","now","parentPromise","stream","then","stream1","stream2","tee","completionIdFromResponse","systemFingerprintFromResponse","contentBlocks","accumulatedContent","modelFromResponse","firstTokenTime","toolCallsInProgress","Map","deltaContent","deltaToolCalls","index","set","inProgressCall","get","prompt_tokens","completion_tokens","completion_tokens_details","reasoning_tokens","prompt_tokens_details","cached_tokens","values","formattedOutput","catch","wrappedPromise","Responses","finalContent","input_tokens","output_tokens","output_tokens_details","input_tokens_details","Embeddings","Embedding","OpenAIOrignal","Audio","Transcriptions","captureAiGenerationInBackground","args","captureAiGenerationAfterSuccess","preserveAPIPromiseHelpers","apiPromise","asResponse","withResponse","Promise","all","TERMINAL_RESPONSE_STATUSES","isPendingBackgroundResponse","background","PostHogOpenAI","WrappedAudio","rawUsageData","finish_reason","chunkWebSearchCount","availableTools","originalCreate","bind","originalSelfRecord","tempCreate","transcriptions","WrappedTranscriptions","doneEvent","prompt"],"mappings":";;;;;;;;AAAA;;AAEO,MAAMA,QAAQ,GAAIC,KAAc,IAAsB;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ;AAClC,CAAC;;ACJD,MAAMC,kBAAkB,GAAG,yCAAyC;AACpE,MAAMC,kBAAkB,GAAG,qBAAqB;AAIzC,MAAMC,gBAAgB,CAAC;AAC5BC,EAAAA,SAASA,CAACJ,KAAa,EAAEK,SAAiB,EAAqB;AAC7D,IAAA,MAAMC,OAAO,GAAGL,kBAAkB,CAACM,IAAI,CAACP,KAAK,CAAC;IAC9C,IAAIM,OAAO,EAAE,OAAO;AAAEE,MAAAA,IAAI,EAAE,UAAU;MAAEC,SAAS,EAAEH,OAAO,CAAC,CAAC;KAAG;AAE/D,IAAA,IAAIN,KAAK,CAACU,MAAM,GAAGL,SAAS,EAAE,OAAO;AAAEG,MAAAA,IAAI,EAAE;KAAQ;IAErD,MAAMG,gBAAgB,GAAGX,KAAK,CAACY,KAAK,CAAC,CAAC,EAAEP,SAAS,CAAC;AAClD,IAAA,IAAIH,kBAAkB,CAACW,IAAI,CAACF,gBAAgB,CAAC,EAAE;MAC7C,OAAO;AAAEH,QAAAA,IAAI,EAAE;OAAO;AACxB,IAAA,CAAC,MAAM;MACL,OAAO;AAAEA,QAAAA,IAAI,EAAE;OAAQ;AACzB,IAAA;AACF,EAAA;AACF;;ACnBA,MAAMM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAU;AAEpF,MAAMC,mBAAmB,GAAG,IAAIC,GAAG,CAAC,CAClC,MAAM,EACN,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,QAAQ,CACT,CAAC;AAEF,MAAMC,oBAAoB,GAAG,IAAID,GAAG,CAAC,CACnC,OAAO,EACP,WAAW,EACX,aAAa,EACb,OAAO,EACP,aAAa,EACb,OAAO,EACP,WAAW,EACX,MAAM,EACN,YAAY,EACZ,UAAU,EACV,OAAO,EACP,WAAW,CACZ,CAAC;AAEF,MAAME,iBAAiB,GAAG,IAAIF,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AAE3F,MAAMG,mBAAmB,GAAG,IAAIH,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEjF,MAAMI,gBAAgB,CAAC;EAC5B,OAAgBC,KAAK,GAAG,IAAID,gBAAgB,CAACE,SAAS,EAAEA,SAAS,CAAC;AAElEC,EAAAA,WAAWA,CACQC,MAA2C,EAC3CC,GAAuB,EACxC;IAAA,IAAA,CAFiBD,MAA2C,GAA3CA,MAA2C;IAAA,IAAA,CAC3CC,GAAuB,GAAvBA,GAAuB;AACvC,EAAA;AAEHC,EAAAA,cAAcA,GAAuB;IACnC,OACE,IAAI,CAACC,oBAAoB,EAAE,IAAI,IAAI,CAACC,sBAAsB,EAAE,IAAI,IAAI,CAACC,mBAAmB,EAAE,IAAI,IAAI,CAACC,YAAY,EAAE;AAErH,EAAA;AAEAH,EAAAA,oBAAoBA,GAAuB;AACzC,IAAA,IAAI,CAAC,IAAI,CAACH,MAAM,EAAE,OAAOF,SAAS;AAClC,IAAA,KAAK,MAAMS,IAAI,IAAIjB,cAAc,EAAE;AACjC,MAAA,MAAMkB,CAAC,GAAG,IAAI,CAACR,MAAM,CAACO,IAAI,CAAC;AAC3B,MAAA,IAAI,OAAOC,CAAC,KAAK,QAAQ,EAAE,OAAOA,CAAC;AACrC,IAAA;AACA,IAAA,OAAOV,SAAS;AAClB,EAAA;AAEAM,EAAAA,sBAAsBA,GAAuB;AAC3C,IAAA,IAAI,CAAC,IAAI,CAACJ,MAAM,EAAE,OAAOF,SAAS;AAClC,IAAA,MAAMW,GAAG,GAAG,IAAI,CAACT,MAAM,CAACU,MAAM;AAC9B,IAAA,IAAI,OAAOD,GAAG,KAAK,QAAQ,IAAId,mBAAmB,CAACgB,GAAG,CAACF,GAAG,CAACG,WAAW,EAAE,CAAC,EAAE;AACzE,MAAA,OAAO,SAASH,GAAG,CAACG,WAAW,EAAE,CAAA,CAAE;AACrC,IAAA;AACA,IAAA,OAAOd,SAAS;AAClB,EAAA;AAEAO,EAAAA,mBAAmBA,GAAuB;AACxC,IAAA,IAAI,CAAC,IAAI,CAACL,MAAM,EAAE,OAAOF,SAAS;AAClC,IAAA,MAAMe,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI;AAC1B,IAAA,IAAI,OAAOD,CAAC,KAAK,QAAQ,EAAE,OAAOf,SAAS;AAC3C,IAAA,IAAIe,CAAC,KAAK,OAAO,IAAIA,CAAC,KAAK,WAAW,IAAIA,CAAC,KAAK,aAAa,EAAE,OAAO,OAAO;IAC7E,IAAIA,CAAC,KAAK,OAAO,IAAIA,CAAC,KAAK,aAAa,EAAE,OAAO,OAAO;IACxD,IAAIA,CAAC,KAAK,OAAO,IAAIA,CAAC,KAAK,WAAW,EAAE,OAAO,OAAO;IACtD,IAAInB,iBAAiB,CAACiB,GAAG,CAACE,CAAC,CAAC,EAAE,OAAO,0BAA0B;AAC/D,IAAA,OAAOf,SAAS;AAClB,EAAA;AAEAQ,EAAAA,YAAYA,GAAuB;AACjC,IAAA,IAAI,CAAC,IAAI,CAACL,GAAG,EAAE,OAAOH,SAAS;IAC/B,MAAMG,GAAG,GAAG,IAAI,CAACA,GAAG,CAACW,WAAW,EAAE;IAClC,IAAIX,GAAG,CAACc,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO;IACzC,IAAId,GAAG,CAACc,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO;IACzC,IAAId,GAAG,CAACc,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,OAAO;AACzC,IAAA,IAAId,GAAG,CAACc,QAAQ,CAAC,MAAM,CAAC,IAAId,GAAG,CAACc,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,0BAA0B;AACvF,IAAA,OAAOjB,SAAS;AAClB,EAAA;AAEAkB,EAAAA,aAAaA,GAAY;IACvB,IAAI,IAAI,CAAChB,MAAM,EAAE;AACf,MAAA,KAAK,MAAMO,IAAI,IAAIjB,cAAc,EAAE;QACjC,IAAI,OAAO,IAAI,CAACU,MAAM,CAACO,IAAI,CAAC,KAAK,QAAQ,EAAE,OAAO,IAAI;AACxD,MAAA;AACA,MAAA,MAAME,GAAG,GAAG,IAAI,CAACT,MAAM,CAACU,MAAM;AAC9B,MAAA,IAAI,OAAOD,GAAG,KAAK,QAAQ,IAAId,mBAAmB,CAACgB,GAAG,CAACF,GAAG,CAACG,WAAW,EAAE,CAAC,EAAE,OAAO,IAAI;AACtF,MAAA,MAAMC,CAAC,GAAG,IAAI,CAACb,MAAM,CAACc,IAAI;AAC1B,MAAA,IAAI,OAAOD,CAAC,KAAK,QAAQ,IAAIpB,oBAAoB,CAACkB,GAAG,CAACE,CAAC,CAAC,EAAE,OAAO,IAAI;AACvE,IAAA;AACA,IAAA,IAAI,IAAI,CAACZ,GAAG,IAAIV,mBAAmB,CAACoB,GAAG,CAAC,IAAI,CAACV,GAAG,CAAC,EAAE,OAAO,IAAI;AAC9D,IAAA,OAAO,KAAK;AACd,EAAA;AACF;;ACrGA,MAAMgB,yBAAyB,GAAG,EAAE;AACpC,MAAMC,uBAAuB,GAAG,IAAI;AAE7B,MAAMC,qBAAqB,CAAC;AACzBC,EAAAA,OAAO,GAAoB,IAAIC,OAAO,EAAE;AAEhDtB,EAAAA,WAAWA,CAAkBuB,UAA4B,GAAG,IAAI3C,gBAAgB,EAAE,EAAE;IAAA,IAAA,CAAvD2C,UAA4B,GAA5BA,UAA4B;AAA4B,EAAA;EAGrFC,MAAMA,CAAC/C,KAAc,EAAW;AAC9B,IAAA,IAAI,IAAI,CAACgD,mBAAmB,EAAE,EAAE,OAAOhD,KAAK;AAC5C,IAAA,IAAI,CAAC4C,OAAO,GAAG,IAAIC,OAAO,EAAE;IAC5B,OAAO,IAAI,CAACI,IAAI,CAACjD,KAAK,EAAEoB,gBAAgB,CAACC,KAAK,CAAC;AACjD,EAAA;AAEQ4B,EAAAA,IAAIA,CAACjD,KAAc,EAAEkD,GAAqB,EAAW;IAC3D,IAAIlD,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKsB,SAAS,EAAE,OAAOtB,KAAK;AACvD,IAAA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAI,CAACmD,YAAY,CAACnD,KAAK,EAAEkD,GAAG,CAAC;AACnE,IAAA,IAAI,OAAOlD,KAAK,KAAK,QAAQ,EAAE,OAAOA,KAAK;;AAE3C;IACA,IAAI,OAAOoD,UAAU,KAAK,WAAW,IAAIpD,KAAK,YAAYoD,UAAU,EAAE;MACpE,OAAO,IAAI,CAACC,cAAc,CAACH,GAAG,CAACxB,cAAc,EAAE,CAAC;AAClD,IAAA;IAEA,IAAI,IAAI,CAACkB,OAAO,CAACT,GAAG,CAACnC,KAAK,CAAC,EAAE,OAAO,IAAI;AACxC,IAAA,IAAI,CAAC4C,OAAO,CAACU,GAAG,CAACtD,KAAK,CAAC;AAEvB,IAAA,IAAIuD,KAAK,CAACC,OAAO,CAACxD,KAAK,CAAC,EAAE;AACxB,MAAA,OAAOA,KAAK,CAACyD,GAAG,CAAEC,IAAI,IAAK,IAAI,CAACT,IAAI,CAACS,IAAI,EAAER,GAAG,CAAC,CAAC;AAClD,IAAA;IAEA,MAAMS,GAAG,GAAG3D,KAAgC;IAC5C,MAAM4D,GAA4B,GAAG,EAAE;IACvC,KAAK,MAAMC,CAAC,IAAIC,MAAM,CAACC,IAAI,CAACJ,GAAG,CAAC,EAAE;MAChCC,GAAG,CAACC,CAAC,CAAC,GAAG,IAAI,CAACZ,IAAI,CAACU,GAAG,CAACE,CAAC,CAAC,EAAE,IAAIzC,gBAAgB,CAACuC,GAAG,EAAEE,CAAC,CAAC,CAAC;AAC1D,IAAA;AACA,IAAA,OAAOD,GAAG;AACZ,EAAA;AAEQT,EAAAA,YAAYA,CAACnD,KAAa,EAAEkD,GAAqB,EAAU;IACjE,MAAM7C,SAAS,GAAG6C,GAAG,CAACV,aAAa,EAAE,GAAGC,yBAAyB,GAAGC,uBAAuB;IAC3F,MAAMsB,WAAW,GAAG,IAAI,CAAClB,UAAU,CAAC1C,SAAS,CAACJ,KAAK,EAAEK,SAAS,CAAC;IAC/D,QAAQ2D,WAAW,CAACxD,IAAI;AACtB,MAAA,KAAK,UAAU;AACb,QAAA,OAAO,IAAI,CAAC6C,cAAc,CAACW,WAAW,CAACvD,SAAS,CAAC;AACnD,MAAA,KAAK,KAAK;QACR,OAAO,IAAI,CAAC4C,cAAc,CAACH,GAAG,CAACxB,cAAc,EAAE,CAAC;AAClD,MAAA,KAAK,MAAM;AACT,QAAA,OAAO1B,KAAK;AAChB;AACF,EAAA;EAEQqD,cAAcA,CAAC5C,SAAkB,EAAU;AACjD,IAAA,IAAI,CAACA,SAAS,EAAE,OAAO,mBAAmB;AAC1C,IAAA,IAAIA,SAAS,KAAK,0BAA0B,EAAE,OAAO,wBAAwB;IAC7E,OAAO,CAAA,QAAA,EAAWA,SAAS,CAAA,UAAA,CAAY;AACzC,EAAA;AAEQuC,EAAAA,mBAAmBA,GAAY;IACrC,MAAMiB,GAAG,GAAGC,OAAO,CAACC,GAAG,CAACC,yBAAyB,IAAI,EAAE;AACvD,IAAA,OAAOH,GAAG,CAAC7B,WAAW,EAAE,KAAK,MAAM,IAAI6B,GAAG,KAAK,GAAG,IAAIA,GAAG,CAAC7B,WAAW,EAAE,KAAK,KAAK;AACnF,EAAA;AACF;;AChEA,MAAMiC,QAAQ,GAAG,IAAI1B,qBAAqB,EAAE;AAQrC,MAAM2B,cAAc,GAAIC,IAAa,IAAcF,QAAQ,CAACtB,MAAM,CAACwB,IAAI,CAAC;AACxE,MAAMC,sBAAsB,GAAID,IAAa,IAAcF,QAAQ,CAACtB,MAAM,CAACwB,IAAI,CAAC;;ACUvF,MAAME,mBAAmB,GAAG,IAAIzD,GAAG,CAAC,CAClC,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,EAC7B,iCAAiC,EACjC,kBAAkB,EAClB,sBAAsB,CACvB,CAAC;AAEK,SAAS0D,eAAeA,CAACC,iBAA2C,EAAU;EACnF,IAAIA,iBAAiB,IAAIb,MAAM,CAACC,IAAI,CAACY,iBAAiB,CAAC,CAACC,IAAI,CAAEnD,GAAG,IAAKgD,mBAAmB,CAACtC,GAAG,CAACV,GAAG,CAAC,CAAC,EAAE;AACnG,IAAA,OAAO,aAAa;AACtB,EAAA;AACA,EAAA,OAAO,KAAK;AACd;AAIA,MAAMoD,aAAa,GAAG,MAAM;;AAE5B;AACA;AAC0B,IAAIC,WAAW;AACf,IAAIC,WAAW,CAACF,aAAa,EAAE;AAAEG,EAAAA,KAAK,EAAE;AAAM,CAAC;;AAIzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAACC,OAAgB,EAAU;AACxD,EAAA,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;AAC/B,IAAA,OAAOA,OAAO;AAChB,EAAA;AACA,EAAA,IAAIA,OAAO,KAAK5D,SAAS,IAAI4D,OAAO,KAAK,IAAI,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE;IAC5E,IAAI;AACF,MAAA,OAAOC,IAAI,CAACC,SAAS,CAACF,OAAO,CAAC;AAChC,IAAA,CAAC,CAAC,MAAM;AACN;MACA,OAAOG,MAAM,CAACH,OAAO,CAAC;AACxB,IAAA;AACF,EAAA;EACA,OAAOG,MAAM,CAACH,OAAO,CAAC;AACxB;AAyBO,MAAMI,cAAc,GACzBC,MAUQ,IACgB;EACxB,IAAI,CAACA,MAAM,EAAE;AACX,IAAA,OAAO,EAAE;AACX,EAAA;EACA,MAAMC,WAAgC,GAAG,EAAE;AAC3C,EAAA,MAAMC,SAAS,GAAG,CAChB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,OAAO,EACP,mBAAmB,EACnB,kBAAkB,EAClB,GAAG,EACH,MAAM,EACN,QAAQ,EACR,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,yBAAyB,CACjB;AAEV,EAAA,KAAK,MAAMhE,GAAG,IAAIgE,SAAS,EAAE;IAC3B,IAAIhE,GAAG,IAAI8D,MAAM,IAAKA,MAAM,CAAS9D,GAAG,CAAC,KAAKH,SAAS,EAAE;AACvDkE,MAAAA,WAAW,CAAC/D,GAAG,CAAC,GAAI8D,MAAM,CAAS9D,GAAG,CAAC;AACzC,IAAA;AACF,EAAA;AACA,EAAA,OAAO+D,WAAW;AACpB,CAAC;AAgDM,MAAME,oBAAoB,GAAIC,QAAa,IAAyB;EACzE,MAAMC,MAA0B,GAAG,EAAE;EAErC,IAAID,QAAQ,CAACE,OAAO,EAAE;AACpB,IAAA,KAAK,MAAMC,MAAM,IAAIH,QAAQ,CAACE,OAAO,EAAE;MACrC,MAAMX,OAAyB,GAAG,EAAE;MACpC,IAAIa,IAAI,GAAG,WAAW;MAEtB,IAAID,MAAM,CAACE,OAAO,EAAE;AAClB,QAAA,IAAIF,MAAM,CAACE,OAAO,CAACD,IAAI,EAAE;AACvBA,UAAAA,IAAI,GAAGD,MAAM,CAACE,OAAO,CAACD,IAAI;AAC5B,QAAA;AAEA,QAAA,IAAID,MAAM,CAACE,OAAO,CAACd,OAAO,EAAE;UAC1BA,OAAO,CAACe,IAAI,CAAC;AAAE3D,YAAAA,IAAI,EAAE,MAAM;AAAE4D,YAAAA,IAAI,EAAEJ,MAAM,CAACE,OAAO,CAACd;AAAQ,WAAC,CAAC;AAC9D,QAAA;AAEA,QAAA,IAAIY,MAAM,CAACE,OAAO,CAACG,UAAU,EAAE;UAC7B,KAAK,MAAMC,QAAQ,IAAIN,MAAM,CAACE,OAAO,CAACG,UAAU,EAAE;YAChDjB,OAAO,CAACe,IAAI,CAAC;AACX3D,cAAAA,IAAI,EAAE,UAAU;cAChB+D,EAAE,EAAED,QAAQ,CAACC,EAAE;AACfC,cAAAA,QAAQ,EAAE;AACRC,gBAAAA,IAAI,EAAEH,QAAQ,CAACE,QAAQ,CAACC,IAAI;AAC5BC,gBAAAA,SAAS,EAAEJ,QAAQ,CAACE,QAAQ,CAACE;AAC/B;AACF,aAAC,CAAC;AACJ,UAAA;AACF,QAAA;;AAEA;AACA,QAAA,IAAIV,MAAM,CAACE,OAAO,CAACS,KAAK,EAAE;UACxBvB,OAAO,CAACe,IAAI,CAAC;AACX3D,YAAAA,IAAI,EAAE,OAAO;YACb,GAAGwD,MAAM,CAACE,OAAO,CAACS;AACpB,WAAC,CAAC;AACJ,QAAA;AACF,MAAA;AAEA,MAAA,IAAIvB,OAAO,CAACxE,MAAM,GAAG,CAAC,EAAE;QACtBkF,MAAM,CAACK,IAAI,CAAC;UACVF,IAAI;AACJb,UAAAA;AACF,SAAC,CAAC;AACJ,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;EACA,IAAIS,QAAQ,CAACC,MAAM,EAAE;IACnB,MAAMV,OAAyB,GAAG,EAAE;IACpC,IAAIa,IAAI,GAAG,WAAW;AAEtB,IAAA,KAAK,MAAMrC,IAAI,IAAIiC,QAAQ,CAACC,MAAM,EAAE;AAClC,MAAA,IAAIlC,IAAI,CAACpB,IAAI,KAAK,SAAS,EAAE;QAC3ByD,IAAI,GAAGrC,IAAI,CAACqC,IAAI;AAEhB,QAAA,IAAIrC,IAAI,CAACwB,OAAO,IAAI3B,KAAK,CAACC,OAAO,CAACE,IAAI,CAACwB,OAAO,CAAC,EAAE;AAC/C,UAAA,KAAK,MAAMwB,WAAW,IAAIhD,IAAI,CAACwB,OAAO,EAAE;YACtC,IAAIwB,WAAW,CAACpE,IAAI,KAAK,aAAa,IAAIoE,WAAW,CAACR,IAAI,EAAE;cAC1DhB,OAAO,CAACe,IAAI,CAAC;AAAE3D,gBAAAA,IAAI,EAAE,MAAM;gBAAE4D,IAAI,EAAEQ,WAAW,CAACR;AAAK,eAAC,CAAC;AACxD,YAAA,CAAC,MAAM,IAAIQ,WAAW,CAACR,IAAI,EAAE;cAC3BhB,OAAO,CAACe,IAAI,CAAC;AAAE3D,gBAAAA,IAAI,EAAE,MAAM;gBAAE4D,IAAI,EAAEQ,WAAW,CAACR;AAAK,eAAC,CAAC;YACxD,CAAC,MAAM,IAAIQ,WAAW,CAACpE,IAAI,KAAK,aAAa,IAAIoE,WAAW,CAACC,SAAS,EAAE;cACtEzB,OAAO,CAACe,IAAI,CAAC;AACX3D,gBAAAA,IAAI,EAAE,OAAO;gBACbsE,KAAK,EAAEF,WAAW,CAACC;AACrB,eAAC,CAAC;AACJ,YAAA;AACF,UAAA;AACF,QAAA,CAAC,MAAM,IAAIjD,IAAI,CAACwB,OAAO,EAAE;UACvBA,OAAO,CAACe,IAAI,CAAC;AAAE3D,YAAAA,IAAI,EAAE,MAAM;AAAE4D,YAAAA,IAAI,EAAEb,MAAM,CAAC3B,IAAI,CAACwB,OAAO;AAAE,WAAC,CAAC;AAC5D,QAAA;AACF,MAAA,CAAC,MAAM,IAAIxB,IAAI,CAACpB,IAAI,KAAK,eAAe,EAAE;QACxC4C,OAAO,CAACe,IAAI,CAAC;AACX3D,UAAAA,IAAI,EAAE,UAAU;UAChB+D,EAAE,EAAE3C,IAAI,CAACmD,OAAO,IAAInD,IAAI,CAAC2C,EAAE,IAAI,EAAE;AACjCC,UAAAA,QAAQ,EAAE;YACRC,IAAI,EAAE7C,IAAI,CAAC6C,IAAI;AACfC,YAAAA,SAAS,EAAE9C,IAAI,CAAC8C,SAAS,IAAI;AAC/B;AACF,SAAC,CAAC;AACJ,MAAA;AACF,IAAA;AAEA,IAAA,IAAItB,OAAO,CAACxE,MAAM,GAAG,CAAC,EAAE;MACtBkF,MAAM,CAACK,IAAI,CAAC;QACVF,IAAI;AACJb,QAAAA;AACF,OAAC,CAAC;AACJ,IAAA;AACF,EAAA;AAEA,EAAA,OAAOU,MAAM;AACf,CAAC;AA8FM,MAAMkB,eAAe,GAAGA,CAACC,MAAe,EAAEC,WAAoB,EAAEC,KAAU,KAAU;EACzF,OAAQF,MAAM,CAASG,YAAY,IAAIF,WAAW,GAAG,IAAI,GAAGC,KAAK;AACnE,CAAC;;AAwCD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASE,uBAAuBA,CAACC,MAAe,EAAU;AAC/D,EAAA,IAAI,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;AACzC,IAAA,OAAO,CAAC;AACV,EAAA;;AAEA;AACA;AACA,EAAA,IAAI,QAAQ,IAAIA,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACxB,MAAM,CAAC,EAAE;IACtD,IAAIyB,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,MAAM3D,IAAI,IAAI0D,MAAM,CAACxB,MAAM,EAAE;AAChC,MAAA,IAAI,OAAOlC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,IAAI,IAAI,MAAM,IAAIA,IAAI,IAAIA,IAAI,CAACpB,IAAI,KAAK,iBAAiB,EAAE;AAClG+E,QAAAA,KAAK,EAAE;AACT,MAAA;AACF,IAAA;IAEA,IAAIA,KAAK,GAAG,CAAC,EAAE;AACb,MAAA,OAAOA,KAAK;AACd,IAAA;AACF,EAAA;;AAEA;;AAEA;EACA,IAAI,WAAW,IAAID,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACE,SAAS,CAAC,IAAIF,MAAM,CAACE,SAAS,CAAC5G,MAAM,GAAG,CAAC,EAAE;AAC3F,IAAA,OAAO,CAAC;AACV,EAAA;;AAEA;EACA,IAAI,gBAAgB,IAAI0G,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACG,cAAc,CAAC,IAAIH,MAAM,CAACG,cAAc,CAAC7G,MAAM,GAAG,CAAC,EAAE;AAC1G,IAAA,OAAO,CAAC;AACV,EAAA;;AAEA;AACA,EAAA,IAAI,OAAO,IAAI0G,MAAM,IAAI,OAAOA,MAAM,CAACI,KAAK,KAAK,QAAQ,IAAIJ,MAAM,CAACI,KAAK,KAAK,IAAI,EAAE;IAClF,IAAI,qBAAqB,IAAIJ,MAAM,CAACI,KAAK,IAAIJ,MAAM,CAACI,KAAK,CAACC,mBAAmB,EAAE;AAC7E,MAAA,OAAO,CAAC;AACV,IAAA;AACF,EAAA;;AAEA;AACA,EAAA,IAAI,SAAS,IAAIL,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACvB,OAAO,CAAC,EAAE;AACxD,IAAA,KAAK,MAAMC,MAAM,IAAIsB,MAAM,CAACvB,OAAO,EAAE;MACnC,IAAI,OAAOC,MAAM,KAAK,QAAQ,IAAIA,MAAM,KAAK,IAAI,EAAE;AACjD;QACA,MAAMZ,OAAO,GAAG,CAAC,SAAS,IAAIY,MAAM,GAAGA,MAAM,CAACE,OAAO,GAAG,IAAI,MAAM,OAAO,IAAIF,MAAM,GAAGA,MAAM,CAAC4B,KAAK,GAAG,IAAI,CAAC;AAE1G,QAAA,IAAI,OAAOxC,OAAO,KAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,IAAI,aAAa,IAAIA,OAAO,EAAE;AAC/E,UAAA,MAAMyC,WAAW,GAAGzC,OAAO,CAACyC,WAAW;AAEvC,UAAA,IAAIpE,KAAK,CAACC,OAAO,CAACmE,WAAW,CAAC,EAAE;AAC9B,YAAA,MAAMC,cAAc,GAAGD,WAAW,CAAC/C,IAAI,CAAEiD,GAAY,IAAK;AACxD,cAAA,OAAO,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,IAAI,MAAM,IAAIA,GAAG,IAAIA,GAAG,CAACvF,IAAI,KAAK,cAAc;AAChG,YAAA,CAAC,CAAC;AAEF,YAAA,IAAIsF,cAAc,EAAE;AAClB,cAAA,OAAO,CAAC;AACV,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACA,EAAA,IAAI,QAAQ,IAAIR,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACxB,MAAM,CAAC,EAAE;AACtD,IAAA,KAAK,MAAMlC,IAAI,IAAI0D,MAAM,CAACxB,MAAM,EAAE;AAChC,MAAA,IAAI,OAAOlC,IAAI,KAAK,QAAQ,IAAIA,IAAI,KAAK,IAAI,IAAI,SAAS,IAAIA,IAAI,EAAE;AAClE,QAAA,MAAMwB,OAAO,GAAGxB,IAAI,CAACwB,OAAO;AAE5B,QAAA,IAAI3B,KAAK,CAACC,OAAO,CAAC0B,OAAO,CAAC,EAAE;AAC1B,UAAA,KAAK,MAAMwB,WAAW,IAAIxB,OAAO,EAAE;AACjC,YAAA,IAAI,OAAOwB,WAAW,KAAK,QAAQ,IAAIA,WAAW,KAAK,IAAI,IAAI,aAAa,IAAIA,WAAW,EAAE;AAC3F,cAAA,MAAMiB,WAAW,GAAGjB,WAAW,CAACiB,WAAW;AAE3C,cAAA,IAAIpE,KAAK,CAACC,OAAO,CAACmE,WAAW,CAAC,EAAE;AAC9B,gBAAA,MAAMC,cAAc,GAAGD,WAAW,CAAC/C,IAAI,CAAEiD,GAAY,IAAK;AACxD,kBAAA,OAAO,OAAOA,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,IAAI,IAAI,MAAM,IAAIA,GAAG,IAAIA,GAAG,CAACvF,IAAI,KAAK,cAAc;AAChG,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAIsF,cAAc,EAAE;AAClB,kBAAA,OAAO,CAAC;AACV,gBAAA;AACF,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACA,EAAA,IAAI,YAAY,IAAIR,MAAM,IAAI7D,KAAK,CAACC,OAAO,CAAC4D,MAAM,CAACU,UAAU,CAAC,EAAE;AAC9D,IAAA,KAAK,MAAMC,SAAS,IAAIX,MAAM,CAACU,UAAU,EAAE;AACzC,MAAA,IACE,OAAOC,SAAS,KAAK,QAAQ,IAC7BA,SAAS,KAAK,IAAI,IAClB,oBAAoB,IAAIA,SAAS,IACjCA,SAAS,CAACC,kBAAkB,EAC5B;AACA,QAAA,OAAO,CAAC;AACV,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,OAAO,CAAC;AACV;;AAEA;AACA;AACA;AACA;AACO,MAAMC,yBAAyB,GAAGA,CAACC,QAAgB,EAAE3C,MAAW,KAAuB;EAa1D;IAChC,IAAIA,MAAM,CAAC4C,KAAK,EAAE;MAChB,OAAO5C,MAAM,CAAC4C,KAAK;AACrB,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;AASF,CAAC;AAED,IAAYC,OAAO,0BAAPA,OAAO,EAAA;EAAPA,OAAO,CAAA,YAAA,CAAA,GAAA,gBAAA;EAAPA,OAAO,CAAA,WAAA,CAAA,GAAA,eAAA;AAAA,EAAA,OAAPA,OAAO;AAAA,CAAA,CAAA,EAAA,CAAA;AAKZ,SAASC,cAAcA,CAAC1E,GAAQ,EAAO;AAC5C,EAAA,IAAIA,GAAG,KAAKrC,SAAS,IAAIqC,GAAG,KAAK,IAAI,EAAE;AACrC,IAAA,OAAOA,GAAG;AACZ,EAAA;AACA,EAAA,MAAM2E,QAAQ,GAAGnD,IAAI,CAACoD,KAAK,CAACpD,IAAI,CAACC,SAAS,CAACzB,GAAG,CAAC,CAAC;AAChD,EAAA,IAAI,OAAO2E,QAAQ,KAAK,QAAQ,EAAE;AAChC;AACA,IAAA,OAAO,IAAIvD,WAAW,EAAE,CAACyD,MAAM,CAAC,IAAI1D,WAAW,EAAE,CAAC2D,MAAM,CAACH,QAAQ,CAAC,CAAC;EACrE,CAAC,MAAM,IAAI/E,KAAK,CAACC,OAAO,CAAC8E,QAAQ,CAAC,EAAE;AAClC,IAAA,OAAOA,QAAQ,CAAC7E,GAAG,CAAC4E,cAAc,CAAC;EACrC,CAAC,MAAM,IAAIC,QAAQ,IAAI,OAAOA,QAAQ,KAAK,QAAQ,EAAE;AACnD,IAAA,OAAOxE,MAAM,CAAC4E,WAAW,CAAC5E,MAAM,CAAC6E,OAAO,CAACL,QAAQ,CAAC,CAAC7E,GAAG,CAAC,CAAC,CAACI,CAAC,EAAE7B,CAAC,CAAC,KAAK,CAAC6B,CAAC,EAAEwE,cAAc,CAACrG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,EAAA;AACA,EAAA,OAAOsG,QAAQ;AACjB;AAEA,MAAMM,kBAA0D,GAAG;AACjEC,EAAAA,iBAAiB,EAAE,YAAY;AAC/BC,EAAAA,cAAc,EAAE,SAAS;AACzBnE,EAAAA,iBAAiB,EAAE,YAAY;AAC/BoE,EAAAA,kBAAkB,EAAE,aAAa;AACjCC,EAAAA,aAAa,EAAE,QAAQ;AACvBC,EAAAA,oBAAoB,EAAE,eAAe;AACrCC,EAAAA,uBAAuB,EAAE,kBAAkB;AAC3CC,EAAAA,mBAAmB,EAAE,cAAc;AACnCC,EAAAA,uBAAuB,EAAE;AAC3B,CAAC;AAEM,SAASC,oBAAoBA,CAAIC,IAA0B,EAGhE;EACA,MAAMC,cAAuC,GAAG,EAAE;EAClD,MAAMC,aAAsC,GAAG,EAAE;AAEjD,EAAA,KAAK,MAAM,CAAC/H,GAAG,EAAEzB,KAAK,CAAC,IAAI8D,MAAM,CAAC6E,OAAO,CAACW,IAAI,CAAC,EAAE;AAC/C,IAAA,IAAIV,kBAAkB,CAACnH,GAAG,CAA2B,EAAE;AACrD+H,MAAAA,aAAa,CAACZ,kBAAkB,CAACnH,GAAG,CAA2B,CAAC,GAAGzB,KAAK;IAC1E,CAAC,MAAM,IAAIyB,GAAG,CAACgI,UAAU,CAAC,SAAS,CAAC,EAAE;AACpCC,MAAAA,OAAO,CAACC,IAAI,CAAC,CAAA,0BAAA,EAA6BlI,GAAG,EAAE,CAAC;AAClD,IAAA,CAAC,MAAM;AACL8H,MAAAA,cAAc,CAAC9H,GAAG,CAAC,GAAGzB,KAAK;AAC7B,IAAA;AACF,EAAA;EAEA,OAAO;AACLuJ,IAAAA,cAAc,EAAEA,cAAmB;IACnCC,aAAa,EAAEI,WAAW,CAACJ,aAAa;GACzC;AACH;AAEA,SAASI,WAAWA,CAACrE,MAAiC,EAAyC;EAC7F,OAAO;AACL,IAAA,GAAGA,MAAM;AACTyB,IAAAA,WAAW,EAAEzB,MAAM,CAACyB,WAAW,IAAI,KAAK;AACxC6C,IAAAA,OAAO,EAAEtE,MAAM,CAACsE,OAAO,IAAIC,OAAM;GAClC;AACH;AAEO,SAASC,0BAA0BA,CAAC9C,KAAc,EAAE+C,YAA4B,EAAsB;EAC3G,MAAMC,QAA4B,GAAG,EAAE;AAEvC,EAAA,IAAID,YAAY,EAAE;IAChBC,QAAQ,CAAChE,IAAI,CAAC;AACZF,MAAAA,IAAI,EAAE,QAAQ;AACdb,MAAAA,OAAO,EAAE8E;AACX,KAAC,CAAC;AACJ,EAAA;AAEA,EAAA,IAAIzG,KAAK,CAACC,OAAO,CAACyD,KAAK,CAAC,EAAE;AACxB,IAAA,KAAK,MAAMvD,IAAI,IAAIuD,KAAK,EAAE;AACxB,MAAA,IAAI,OAAOvD,IAAI,KAAK,QAAQ,EAAE;QAC5BuG,QAAQ,CAAChE,IAAI,CAAC;AAAEF,UAAAA,IAAI,EAAE,MAAM;AAAEb,UAAAA,OAAO,EAAExB;AAAK,SAAC,CAAC;MAChD,CAAC,MAAM,IAAIA,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;QAC3C,MAAMC,GAAG,GAAGD,IAA+B;AAC3C,QAAA,MAAMqC,IAAI,GAAGhG,QAAQ,CAAC4D,GAAG,CAACoC,IAAI,CAAC,GAAGpC,GAAG,CAACoC,IAAI,GAAG,MAAM;;AAEnD;QACA,MAAMb,OAAO,GAAGvB,GAAG,CAACuB,OAAO,IAAIvB,GAAG,CAACuC,IAAI,IAAIxC,IAAI;QAC/CuG,QAAQ,CAAChE,IAAI,CAAC;UAAEF,IAAI;UAAEb,OAAO,EAAED,eAAe,CAACC,OAAO;AAAE,SAAC,CAAC;AAC5D,MAAA,CAAC,MAAM;QACL+E,QAAQ,CAAChE,IAAI,CAAC;AAAEF,UAAAA,IAAI,EAAE,MAAM;UAAEb,OAAO,EAAED,eAAe,CAACvB,IAAI;AAAE,SAAC,CAAC;AACjE,MAAA;AACF,IAAA;AACF,EAAA,CAAC,MAAM,IAAI,OAAOuD,KAAK,KAAK,QAAQ,EAAE;IACpCgD,QAAQ,CAAChE,IAAI,CAAC;AAAEF,MAAAA,IAAI,EAAE,MAAM;AAAEb,MAAAA,OAAO,EAAE+B;AAAM,KAAC,CAAC;EACjD,CAAC,MAAM,IAAIA,KAAK,EAAE;IAChBgD,QAAQ,CAAChE,IAAI,CAAC;AAAEF,MAAAA,IAAI,EAAE,MAAM;MAAEb,OAAO,EAAED,eAAe,CAACgC,KAAK;AAAE,KAAC,CAAC;AAClE,EAAA;AAEA,EAAA,OAAOgD,QAAQ;AACjB;;;;ACppBA,MAAMC,iBAAiB,GAAG,CAAC;AAC3B,MAAMC,eAAe,GAAG,EAAE;AAEnB,SAASC,cAAcA,CAACpK,KAAc,EAAEqK,KAAK,GAAGH,iBAAiB,EAAW;AACjF,EAAA,IAAIG,KAAK,GAAG,CAAC,IAAIrK,KAAK,KAAK,IAAI,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;AAC5D,IAAA,OAAOA,KAAK;AACd,EAAA;EACA,IAAIA,KAAK,YAAYsK,KAAK,EAAE;AAC1B,IAAA,MAAM1G,GAA4B,GAAG;MACnC2C,IAAI,EAAEvG,KAAK,CAACuG,IAAI;MAChBP,OAAO,EAAEhG,KAAK,CAACgG,OAAO;AACtBuE,MAAAA,KAAK,EAAEC,aAAa,CAACxK,KAAK,CAACuK,KAAK;KACjC;IACD,KAAK,MAAM9I,GAAG,IAAIqC,MAAM,CAACC,IAAI,CAAC/D,KAAK,CAAC,EAAE;AACpC4D,MAAAA,GAAG,CAACnC,GAAG,CAAC,GAAG2I,cAAc,CAAEpK,KAAK,CAAwCyB,GAAG,CAAC,EAAE4I,KAAK,GAAG,CAAC,CAAC;AAC1F,IAAA;AACA,IAAA,IAAIrK,KAAK,CAACyK,KAAK,KAAKnJ,SAAS,EAAE;AAC7BsC,MAAAA,GAAG,CAAC6G,KAAK,GAAGL,cAAc,CAACpK,KAAK,CAACyK,KAAK,EAAEJ,KAAK,GAAG,CAAC,CAAC;AACpD,IAAA;AACA,IAAA,OAAOzG,GAAG;AACZ,EAAA;AACA,EAAA,IAAIL,KAAK,CAACC,OAAO,CAACxD,KAAK,CAAC,EAAE;AACxB,IAAA,OAAOA,KAAK,CAACyD,GAAG,CAAEC,IAAI,IAAK0G,cAAc,CAAC1G,IAAI,EAAE2G,KAAK,GAAG,CAAC,CAAC,CAAC;AAC7D,EAAA;AACA,EAAA,OAAOrK,KAAK;AACd;AAEO,SAAS0K,cAAcA,CAACC,KAAc,EAAU;EACrD,IAAI;IACF,OAAOxF,IAAI,CAACC,SAAS,CAACiD,cAAc,CAAC+B,cAAc,CAACO,KAAK,CAAC,CAAC,CAAC;AAC9D,EAAA,CAAC,CAAC,MAAM;IACN,IAAIA,KAAK,YAAYL,KAAK,EAAE;MAC1B,OAAOnF,IAAI,CAACC,SAAS,CAAC;QAAEmB,IAAI,EAAEoE,KAAK,CAACpE,IAAI;QAAEP,OAAO,EAAE2E,KAAK,CAAC3E;AAAQ,OAAC,CAAC;AACrE,IAAA;IACA,OAAOb,IAAI,CAACC,SAAS,CAAC;MAAEY,OAAO,EAAEX,MAAM,CAACsF,KAAK;AAAE,KAAC,CAAC;AACnD,EAAA;AACF;AAEA,SAASH,aAAaA,CAACD,KAAyB,EAAsB;EACpE,IAAI,CAACA,KAAK,EAAE;AACV,IAAA,OAAOA,KAAK;AACd,EAAA;AACA,EAAA,MAAMK,KAAK,GAAGL,KAAK,CAACM,KAAK,CAAC,IAAI,CAAC;AAC/B,EAAA,IAAID,KAAK,CAAClK,MAAM,IAAIyJ,eAAe,EAAE;AACnC,IAAA,OAAOI,KAAK;AACd,EAAA;AACA,EAAA,OAAO,CAAC,GAAGK,KAAK,CAAChK,KAAK,CAAC,CAAC,EAAEuJ,eAAe,CAAC,EAAE,iBAAiB,CAAC,CAACW,IAAI,CAAC,IAAI,CAAC;AAC3E;;ACjDA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACO,MAAMC,wBAA2C,GAAG,CACzD,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,2BAA2B,CAC5B;;AAED;AACA,MAAMC,gBAAgB,GAAG,2CAA2C;AAEpE,MAAMC,WAAW,GAAIC,OAAe,IAAyB;EAC3D,IAAI;AACF;AACA,IAAA,MAAMC,SAAS,GAAG,0BAA0B,CAACtK,IAAI,CAACqK,OAAO,CAAC;AAC1D,IAAA,OAAO,IAAIE,GAAG,CAACD,SAAS,GAAGD,OAAO,GAAG,CAAA,QAAA,EAAWA,OAAO,CAAA,CAAE,CAAC,CAACG,QAAQ,CAACjJ,WAAW,EAAE;AACnF,EAAA,CAAC,CAAC,MAAM;AACN,IAAA,OAAOd,SAAS;AAClB,EAAA;AACF,CAAC;AAEM,MAAMgK,qBAAqB,GAAIJ,OAAkC,IAAc;EACpF,IAAI,CAACA,OAAO,EAAE;AACZ,IAAA,OAAO,KAAK;AACd,EAAA;AACA,EAAA,MAAMK,IAAI,GAAGN,WAAW,CAACC,OAAO,CAAC;EACjC,OAAOK,IAAI,KAAKjK,SAAS,IAAIyJ,wBAAwB,CAACxI,QAAQ,CAACgJ,IAAI,CAAC;AACtE,CAAC;;AAED;AACA;AACO,MAAMC,sBAAsB,GAAIN,OAAkC,IAAW;AAClF,EAAA,IAAI,CAACI,qBAAqB,CAACJ,OAAO,CAAC,EAAE;AACnC,IAAA;AACF,EAAA;EACAxB,OAAO,CAACC,IAAI,CACV,yEAAyE,GACvE,kFAAkF,GAClF,CAAA,2BAAA,EAA8BqB,gBAAgB,CAAA,CAAA,CAClD,CAAC;AACH,CAAC;;ACvCD;AACA;AACA;AACA;AACA;;AAoEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMS,mBAAmB,GAAG,OAAO1E,MAAe,EAAE2E,OAAmC,KAAoB;AAChH,EAAA,IAAI,CAAC3E,MAAM,CAAC4E,OAAO,EAAE;AACnB,IAAA;AACF,EAAA;AAEAH,EAAAA,sBAAsB,CAACE,OAAO,CAACR,OAAO,CAAC;EAEvC,MAAMrB,OAAO,GAAG6B,OAAO,CAAC7B,OAAO,IAAIC,OAAM,EAAE;EAC3C,MAAM8B,SAAS,GAAGF,OAAO,CAACE,SAAS,IAAIxD,OAAO,CAACyD,UAAU;AACzD,EAAA,MAAM7E,WAAW,GAAG0E,OAAO,CAAC1E,WAAW,IAAI,KAAK;AAChD,EAAA,MAAMQ,KAAK,GAAGkE,OAAO,CAAClE,KAAK,IAAI,EAAE;AAEjC,EAAA,MAAMsE,SAAS,GAAGzD,cAAc,CAACqD,OAAO,CAACzE,KAAK,CAAC;AAC/C,EAAA,MAAM8E,UAAU,GAAG1D,cAAc,CAACqD,OAAO,CAAC9F,MAAM,CAAC;AAEjD,EAAA,IAAIoG,UAAU,GAAGN,OAAO,CAACM,UAAU;EACnC,IAAIC,SAAkC,GAAG,EAAE;EAC3C,IAAIP,OAAO,CAACf,KAAK,EAAE;IACjB,IAAIqB,UAAU,KAAK1K,SAAS,EAAE;MAC5B,IAAI,OAAOoK,OAAO,CAACf,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIe,OAAO,CAACf,KAAK,IAAI,OAAOe,OAAO,CAACf,KAAK,CAACuB,MAAM,KAAK,QAAQ,EAAE;AAC9GF,QAAAA,UAAU,GAAGN,OAAO,CAACf,KAAK,CAACuB,MAAM;AACnC,MAAA,CAAC,MAAM;AACLF,QAAAA,UAAU,GAAG,GAAG;AAClB,MAAA;AACF,IAAA;AAEA,IAAA,IAAIG,WAA+B;AACnC,IAAA,IAAIpF,MAAM,CAAC2E,OAAO,EAAEU,0BAA0B,EAAE;MAC9CD,WAAW,GAAGE,WAAM,EAAE;MACtBtF,MAAM,CAACuF,gBAAgB,CAACZ,OAAO,CAACf,KAAK,EAAErJ,SAAS,EAAE;AAAEiL,QAAAA,YAAY,EAAE1C;OAAS,EAAEsC,WAAW,CAAC;AACzF,MAAA,IAAI,OAAOT,OAAO,CAACf,KAAK,KAAK,QAAQ,EAAE;AACnCe,QAAAA,OAAO,CAACf,KAAK,CAA+C6B,mCAAmC,GAAG,IAAI;AAC1G,MAAA;AACF,IAAA;AAEAP,IAAAA,SAAS,GAAG;AACVQ,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,SAAS,EAAEhC,cAAc,CAACgB,OAAO,CAACf,KAAK,CAAC;AACxCgC,MAAAA,mBAAmB,EAAER;KACtB;AACH,EAAA;EACAH,UAAU,GAAGA,UAAU,IAAI,GAAG;EAE9B,IAAIY,gBAAwC,GAAG,EAAE;EACjD,IAAIlB,OAAO,CAACmB,YAAY,EAAE;AACxB,IAAA,MAAMC,YAAY,GAAG,CAACpB,OAAO,CAACmB,YAAY,CAACE,SAAS,IAAI,CAAC,KAAKvF,KAAK,CAACwF,WAAW,IAAI,CAAC,CAAC;AACrF,IAAA,MAAMC,aAAa,GAAG,CAACvB,OAAO,CAACmB,YAAY,CAACK,UAAU,IAAI,CAAC,KAAK1F,KAAK,CAAC2F,YAAY,IAAI,CAAC,CAAC;AACxFP,IAAAA,gBAAgB,GAAG;AACjBQ,MAAAA,kBAAkB,EAAEN,YAAY;AAChCO,MAAAA,mBAAmB,EAAEJ,aAAa;MAClCK,kBAAkB,EAAER,YAAY,GAAGG;KACpC;AACH,EAAA;AAEA,EAAA,MAAMM,qBAAqB,GAAG;IAC5B,IAAI/F,KAAK,CAACgG,eAAe,GAAG;MAAEC,oBAAoB,EAAEjG,KAAK,CAACgG;KAAiB,GAAG,EAAE,CAAC;IACjF,IAAIhG,KAAK,CAACkG,oBAAoB,GAAG;MAAEC,2BAA2B,EAAEnG,KAAK,CAACkG;KAAsB,GAAG,EAAE,CAAC;IAClG,IAAIlG,KAAK,CAACoG,wBAAwB,GAAG;MAAEC,+BAA+B,EAAErG,KAAK,CAACoG;KAA0B,GAAG,EAAE,CAAC;IAC9G,IAAIpG,KAAK,CAACsG,cAAc,GAAG;MAAEC,oBAAoB,EAAEvG,KAAK,CAACsG;KAAgB,GAAG,EAAE,CAAC;IAC/E,IAAItG,KAAK,CAACwG,QAAQ,GAAG;MAAEC,SAAS,EAAEzG,KAAK,CAACwG;KAAU,GAAG,EAAE;GACxD;AAED,EAAA,MAAME,UAAmC,GAAG;AAC1CC,IAAAA,OAAO,EAAE,YAAY;AACrBC,IAAAA,eAAe,EAAEC,OAAO;AACxBC,IAAAA,YAAY,EAAE5C,OAAO,CAAC6C,gBAAgB,IAAI7C,OAAO,CAACxD,QAAQ;AAC1DsG,IAAAA,SAAS,EAAE9C,OAAO,CAAC+C,aAAa,IAAI/C,OAAO,CAACgD,KAAK;AACjDC,IAAAA,oBAAoB,EAAEjD,OAAO,CAACkD,eAAe,IAAI,EAAE;IACnDC,SAAS,EAAE/H,eAAe,CAACC,MAAM,EAAEC,WAAW,EAAE8E,SAAS,CAAC;IAC1DgD,kBAAkB,EAAEhI,eAAe,CAACC,MAAM,EAAEC,WAAW,EAAE+E,UAAU,CAAC;AACpEgD,IAAAA,eAAe,EAAE/C,UAAU;AAC3BgD,IAAAA,gBAAgB,EAAExH,KAAK,CAACwF,WAAW,IAAI,CAAC;AACxC,IAAA,IAAIxF,KAAK,CAAC2F,YAAY,KAAK7L,SAAS,GAAG;MAAE2N,iBAAiB,EAAEzH,KAAK,CAAC2F;KAAc,GAAG,EAAE,CAAC;AACtF,IAAA,GAAGI,qBAAqB;AACxB2B,IAAAA,WAAW,EAAExD,OAAO,CAACyD,OAAO,IAAI,CAAC;AACjC,IAAA,IAAIzD,OAAO,CAAC0D,gBAAgB,KAAK9N,SAAS,GAAG;MAAE+N,uBAAuB,EAAE3D,OAAO,CAAC0D;KAAkB,GAAG,EAAE,CAAC;AACxG7C,IAAAA,YAAY,EAAE1C,OAAO;AACrByF,IAAAA,YAAY,EAAE5D,OAAO,CAACR,OAAO,IAAI,EAAE;IACnC,GAAGQ,OAAO,CAACwC,UAAU;AACrBqB,IAAAA,iBAAiB,EAAE7K,eAAe,CAACgH,OAAO,CAACwC,UAAU,CAAC;AACtD,IAAA,IAAIxC,OAAO,CAAC8D,UAAU,GAAG,EAAE,GAAG;AAAEC,MAAAA,uBAAuB,EAAE;AAAM,KAAC,CAAC;IACjE,IAAI/D,OAAO,CAACgE,UAAU,GAAG;MAAEC,eAAe,EAAEjE,OAAO,CAACgE;KAAY,GAAG,EAAE,CAAC;IACtE,IAAIhE,OAAO,CAACvD,KAAK,GAAG;MAAEyH,SAAS,EAAElE,OAAO,CAACvD;KAAO,GAAG,EAAE,CAAC;IACtD,IAAIuD,OAAO,CAACmE,YAAY,GAAG;MAAEC,iBAAiB,EAAEpE,OAAO,CAACmE;KAAc,GAAG,EAAE,CAAC;AAC5E,IAAA,IAAInE,OAAO,CAACqE,gBAAgB,IAAIjM,MAAM,CAACC,IAAI,CAAC2H,OAAO,CAACqE,gBAAgB,CAAC,CAACrP,MAAM,GAAG,CAAC,GAC5E;MAAEsP,qBAAqB,EAAEtE,OAAO,CAACqE;KAAkB,GACnD,EAAE,CAAC;AACP,IAAA,GAAG9D,SAAS;IACZ,GAAGW;GACJ;AAED,EAAA,MAAMqD,KAAmB,GAAG;AAC1BT,IAAAA,UAAU,EAAE9D,OAAO,CAAC8D,UAAU,IAAI3F,OAAO;AACzCoG,IAAAA,KAAK,EAAErE,SAAS;IAChBsC,UAAU;IACVgC,MAAM,EAAExE,OAAO,CAACwE;GACjB;EAED,IAAIxE,OAAO,CAACyE,gBAAgB,EAAE;AAC5B,IAAA,MAAMpJ,MAAM,CAACoJ,gBAAgB,CAACF,KAAK,CAAC;AACtC,EAAA,CAAC,MAAM;AACLlJ,IAAAA,MAAM,CAAC4E,OAAO,CAACsE,KAAK,CAAC;AACvB,EAAA;AACF,CAAC;;ACnMD;AACA;AACA;AACA;AACO,SAASG,oBAAoBA,CAACC,KAA2C,EAAW;EACzF,OACEA,KAAK,CAAC/N,IAAI,KAAK,4BAA4B,IAC3C+N,KAAK,CAAC/N,IAAI,KAAK,6BAA6B,IAC5C+N,KAAK,CAAC/N,IAAI,KAAK,4BAA4B,IAC3C+N,KAAK,CAAC/N,IAAI,KAAK,+BAA+B,IAC9C+N,KAAK,CAAC/N,IAAI,KAAK,uCAAuC,IACtD+N,KAAK,CAAC/N,IAAI,KAAK,sBAAsB,IACrC+N,KAAK,CAAC/N,IAAI,KAAK,iCAAiC,IAChD+N,KAAK,CAAC/N,IAAI,KAAK,wBAAwB;AAE3C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASgO,gBAAgBA,CAAClJ,MAAe,EAAsB;AACpE,EAAA,OAAQA,MAAM,EAAyDmJ,WAAW,IAAIjP,SAAS;AACjG;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASkP,qBAAqBA,CAACC,MAGrC,EAAsC;EACrC,MAAMC,QAAgC,GAAG,EAAE;EAC3C,IAAID,MAAM,CAACE,iBAAiB,EAAE;AAC5BD,IAAAA,QAAQ,CAACE,kBAAkB,GAAGH,MAAM,CAACE,iBAAiB;AACxD,EAAA;EACA,IAAIF,MAAM,CAACI,SAAS,EAAE;AACpBH,IAAAA,QAAQ,CAACI,UAAU,GAAGL,MAAM,CAACI,SAAS;AACxC,EAAA;AACA,EAAA,OAAO/M,MAAM,CAACC,IAAI,CAAC2M,QAAQ,CAAC,CAAChQ,MAAM,GAAG,CAAC,GAAGgQ,QAAQ,GAAGpP,SAAS;AAChE;;ACTO,MAAMyP,kBAAkB,SAASC,kBAAW,CAAC;EAMlDzP,WAAWA,CAAC0P,MAA8B,EAAE;IAC1C,MAAM;MAAEC,OAAO;MAAE,GAAGC;AAAa,KAAC,GAAGF,MAAM;IAC3C,KAAK,CAACE,YAAY,CAAC;IACnB,IAAI,CAACC,QAAQ,GAAGF,OAAO;IACvB,IAAI,CAACG,IAAI,GAAG,IAAIC,aAAW,CAAC,IAAI,EAAE,IAAI,CAACF,QAAQ,CAAC;IAChD,IAAI,CAACG,SAAS,GAAG,IAAIC,kBAAgB,CAAC,IAAI,EAAE,IAAI,CAACJ,QAAQ,CAAC;IAC1D,IAAI,CAACK,UAAU,GAAG,IAAIC,mBAAiB,CAAC,IAAI,EAAE,IAAI,CAACN,QAAQ,CAAC;AAC9D,EAAA;AACF;oBAEO,MAAME,WAAW,SAASN,kBAAW,CAACW,IAAI,CAAC;AAChDpQ,EAAAA,WAAWA,CAACqQ,YAAgC,EAAER,QAAiB,EAAE;IAC/D,KAAK,CAACQ,YAAY,CAAC;IACnB,IAAI,CAACC,WAAW,GAAG,IAAIC,oBAAkB,CAACF,YAAY,EAAER,QAAQ,CAAC;AACnE,EAAA;AAGF;2BAEO,MAAMU,kBAAkB,SAASd,kBAAW,CAACW,IAAI,CAACI,WAAW,CAAC;AAInExQ,EAAAA,WAAWA,CAACwF,MAAmB,EAAEqK,QAAiB,EAAE;IAClD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACO8G,EAAAA,MAAMA,CACX1I,IAAuD,EACvDoC,OAAwB,EACkC;IAC1D,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEzD,IAAIuG,YAAY,CAACK,MAAM,EAAE;AACvB,MAAA,OAAOD,aAAa,CAACE,IAAI,CAAEvS,KAAK,IAAK;QACnC,IAAI,KAAK,IAAIA,KAAK,EAAE;UAClB,MAAM,CAACwS,OAAO,EAAEC,OAAO,CAAC,GAAGzS,KAAK,CAAC0S,GAAG,EAAE;AACrC,UAAA,CAAC,YAAY;AACZ;AACA;AACA,YAAA,IAAIC,wBAA4C;AAChD,YAAA,IAAIC,6BAAiD;YACrD,IAAI;cACF,MAAMC,aAA+B,GAAG,EAAE;cAC1C,IAAIC,kBAAkB,GAAG,EAAE;AAC3B,cAAA,IAAIC,iBAAqC;AACzC,cAAA,IAAIC,cAAkC;AACtC,cAAA,IAAIxL,KAKH,GAAG;AACFwF,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE;eACf;;AAED;AACA,cAAA,MAAM8F,mBAAmB,GAAG,IAAIC,GAAG,EAOhC;AAEH,cAAA,WAAW,MAAM7C,KAAK,IAAImC,OAAO,EAAE;AACjC;AACA,gBAAA,IAAI,CAACO,iBAAiB,IAAI1C,KAAK,CAAC3B,KAAK,EAAE;kBACrCqE,iBAAiB,GAAG1C,KAAK,CAAC3B,KAAK;AACjC,gBAAA;AACA,gBAAA,IAAI,CAACiE,wBAAwB,IAAItC,KAAK,CAAChK,EAAE,EAAE;kBACzCsM,wBAAwB,GAAGtC,KAAK,CAAChK,EAAE;AACrC,gBAAA;AACA,gBAAA,IAAI,CAACuM,6BAA6B,IAAIvC,KAAK,CAACO,kBAAkB,EAAE;kBAC9DgC,6BAA6B,GAAGvC,KAAK,CAACO,kBAAkB;AAC1D,gBAAA;AAEA,gBAAA,MAAM9K,MAAM,GAAGuK,KAAK,EAAExK,OAAO,GAAG,CAAC,CAAC;;AAElC;AACA,gBAAA,MAAMsN,YAAY,GAAGrN,MAAM,EAAE4B,KAAK,EAAExC,OAAO;AAC3C,gBAAA,IAAIiO,YAAY,EAAE;kBAChB,IAAIH,cAAc,KAAK1R,SAAS,EAAE;AAChC0R,oBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,kBAAA;AACAU,kBAAAA,kBAAkB,IAAIK,YAAY;AACpC,gBAAA;;AAEA;AACA,gBAAA,MAAMC,cAAc,GAAGtN,MAAM,EAAE4B,KAAK,EAAEvB,UAAU;gBAChD,IAAIiN,cAAc,IAAI7P,KAAK,CAACC,OAAO,CAAC4P,cAAc,CAAC,EAAE;kBACnD,IAAIJ,cAAc,KAAK1R,SAAS,EAAE;AAChC0R,oBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,kBAAA;AACA,kBAAA,KAAK,MAAMhM,QAAQ,IAAIgN,cAAc,EAAE;AACrC,oBAAA,MAAMC,KAAK,GAAGjN,QAAQ,CAACiN,KAAK;oBAE5B,IAAIA,KAAK,KAAK/R,SAAS,EAAE;AACvB,sBAAA,IAAI,CAAC2R,mBAAmB,CAAC9Q,GAAG,CAACkR,KAAK,CAAC,EAAE;AACnC;AACAJ,wBAAAA,mBAAmB,CAACK,GAAG,CAACD,KAAK,EAAE;AAC7BhN,0BAAAA,EAAE,EAAED,QAAQ,CAACC,EAAE,IAAI,EAAE;AACrBE,0BAAAA,IAAI,EAAEH,QAAQ,CAACE,QAAQ,EAAEC,IAAI,IAAI,EAAE;AACnCC,0BAAAA,SAAS,EAAE;AACb,yBAAC,CAAC;AACJ,sBAAA;AAEA,sBAAA,MAAM+M,cAAc,GAAGN,mBAAmB,CAACO,GAAG,CAACH,KAAK,CAAC;AACrD,sBAAA,IAAIE,cAAc,EAAE;AAClB;wBACA,IAAInN,QAAQ,CAACC,EAAE,EAAE;AACfkN,0BAAAA,cAAc,CAAClN,EAAE,GAAGD,QAAQ,CAACC,EAAE;AACjC,wBAAA;AACA,wBAAA,IAAID,QAAQ,CAACE,QAAQ,EAAEC,IAAI,EAAE;AAC3BgN,0BAAAA,cAAc,CAAChN,IAAI,GAAGH,QAAQ,CAACE,QAAQ,CAACC,IAAI;AAC9C,wBAAA;AACA,wBAAA,IAAIH,QAAQ,CAACE,QAAQ,EAAEE,SAAS,EAAE;AAChC+M,0BAAAA,cAAc,CAAC/M,SAAS,IAAIJ,QAAQ,CAACE,QAAQ,CAACE,SAAS;AACzD,wBAAA;AACF,sBAAA;AACF,oBAAA;AACF,kBAAA;AACF,gBAAA;;AAEA;gBACA,IAAI6J,KAAK,CAAC7I,KAAK,EAAE;AACfA,kBAAAA,KAAK,GAAG;AACNwF,oBAAAA,WAAW,EAAEqD,KAAK,CAAC7I,KAAK,CAACiM,aAAa,IAAI,CAAC;AAC3CtG,oBAAAA,YAAY,EAAEkD,KAAK,CAAC7I,KAAK,CAACkM,iBAAiB,IAAI,CAAC;oBAChDlG,eAAe,EAAE6C,KAAK,CAAC7I,KAAK,CAACmM,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;oBAC7ElG,oBAAoB,EAAE2C,KAAK,CAAC7I,KAAK,CAACqM,qBAAqB,EAAEC,aAAa,IAAI;mBAC3E;AACH,gBAAA;AACF,cAAA;;AAEA;AACA,cAAA,IAAIhB,kBAAkB,EAAE;gBACtBD,aAAa,CAAC5M,IAAI,CAAC;AAAE3D,kBAAAA,IAAI,EAAE,MAAM;AAAE4D,kBAAAA,IAAI,EAAE4M;AAAmB,iBAAC,CAAC;AAChE,cAAA;;AAEA;cACA,KAAK,MAAM1M,QAAQ,IAAI6M,mBAAmB,CAACc,MAAM,EAAE,EAAE;gBACnD,IAAI3N,QAAQ,CAACG,IAAI,EAAE;kBACjBsM,aAAa,CAAC5M,IAAI,CAAC;AACjB3D,oBAAAA,IAAI,EAAE,UAAU;oBAChB+D,EAAE,EAAED,QAAQ,CAACC,EAAE;AACfC,oBAAAA,QAAQ,EAAE;sBACRC,IAAI,EAAEH,QAAQ,CAACG,IAAI;sBACnBC,SAAS,EAAEJ,QAAQ,CAACI;AACtB;AACF,mBAA0B,CAAC;AAC7B,gBAAA;AACF,cAAA;;AAEA;cACA,MAAMwN,eAAmC,GACvCnB,aAAa,CAACnS,MAAM,GAAG,CAAC,GACpB,CACE;AACEqF,gBAAAA,IAAI,EAAE,WAAW;AACjBb,gBAAAA,OAAO,EAAE2N;eACV,CACF,GACD,CACE;AACE9M,gBAAAA,IAAI,EAAE,WAAW;AACjBb,gBAAAA,OAAO,EAAE,CAAC;AAAE5C,kBAAAA,IAAI,EAAE,MAAM;AAAE4D,kBAAAA,IAAI,EAAE;iBAAI;AACtC,eAAC,CACF;cAEP,MAAMiJ,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,cAAA,MAAM9C,gBAAgB,GAAG4D,cAAc,KAAK1R,SAAS,GAAG,CAAC0R,cAAc,GAAGd,SAAS,IAAI,IAAI,GAAG5Q,SAAS;AACvG,cAAA,MAAMmK,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;AAChBkF,gBAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAIqE,iBAAiB;AAC9C7K,gBAAAA,QAAQ,EAAE,OAAO;AACjBjB,gBAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,gBAAAA,MAAM,EAAEoO,eAAe;gBACvB7E,OAAO;gBACPC,gBAAgB;gBAChBlE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,gBAAAA,UAAU,EAAE,GAAG;gBACfxE,KAAK;AACLqI,gBAAAA,YAAY,EAAE8C,wBAAwB;gBACtC5C,gBAAgB,EAAES,qBAAqB,CAAC;AAAEG,kBAAAA,iBAAiB,EAAEiC;iBAA+B;AAC9F,eAAC,CAAC;YACJ,CAAC,CAAC,OAAOjI,KAAc,EAAE;AACvB,cAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,OAAO;AACjBjB,gBAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,gBAAAA,MAAM,EAAE,EAAE;AACVuJ,gBAAAA,OAAO,EAAE,CAAC;gBACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,gBAAAA,KAAK,EAAE;AAAEwF,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE;iBAAG;AAC1C;AACA;AACA;AACA0C,gBAAAA,YAAY,EAAE8C,wBAAwB;gBACtC5C,gBAAgB,EAAES,qBAAqB,CAAC;AAAEG,kBAAAA,iBAAiB,EAAEiC;AAA8B,iBAAC,CAAC;AAC7FjI,gBAAAA,KAAK,EAAEA;AACT,eAAC,CAAC;AACF,cAAA,MAAMA,KAAK;AACb,YAAA;AACF,UAAA,CAAC,GAAG,CAACsJ,KAAK,CAAC,MAAM;AACf;AACA;AAAA,UAAA,CACD,CAAC;;AAEF;AACA,UAAA,OAAOxB,OAAO;AAChB,QAAA;AACA,QAAA,OAAOzS,KAAK;AACd,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,MAAM;MACL,MAAMkU,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;QAChB,IAAI,SAAS,IAAIA,MAAM,EAAE;UACvB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,UAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,YAAA,GAAG5H,aAAa;AAChBkF,YAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,YAAAA,QAAQ,EAAE,OAAO;YACjBjB,KAAK,EAAEgL,YAAY,CAAChI,QAAQ;AAC5BrE,YAAAA,MAAM,EAAEF,oBAAoB,CAAC0B,MAAM,CAAC;YACpC+H,OAAO;YACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,YAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,YAAAA,UAAU,EAAE,GAAG;AACfxE,YAAAA,KAAK,EAAE;AACLwF,cAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAEiM,aAAa,IAAI,CAAC;AAC7CtG,cAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAEkM,iBAAiB,IAAI,CAAC;cAClDlG,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAEmM,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;cAC/ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEqM,qBAAqB,EAAEC,aAAa,IAAI;aAC7E;YACDjE,YAAY,EAAEzI,MAAM,CAACf,EAAE;YACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;cACtCG,iBAAiB,EAAEvJ,MAAM,CAACwJ,kBAAkB;cAC5CC,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;aACnC;AACH,WAAC,CAAC;AACJ,QAAA;AACA,QAAA,OAAOA,MAAM;MACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,QAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GACjDA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAC7C,GAAG;AAET,QAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,OAAO;UACjBjB,KAAK,EAAEgL,YAAY,CAAChI,QAAQ;AAC5BrE,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;UACrC0C,UAAU;AACVxE,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAA+B;AAE/B,MAAA,OAAOuJ,cAAc;AACvB,IAAA;AACF,EAAA;AACF;yBAEO,MAAM1C,gBAAgB,SAASR,kBAAW,CAACmD,SAAS,CAAC;AAI1D5S,EAAAA,WAAWA,CAACwF,MAAmB,EAAEqK,QAAiB,EAAE;IAClD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACO8G,EAAAA,MAAMA,CACX1I,IAAkD,EAClDoC,OAAwB,EAC4E;IACpG,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEzD,IAAIuG,YAAY,CAACK,MAAM,EAAE;AACvB,MAAA,OAAOD,aAAa,CAACE,IAAI,CAAEvS,KAAK,IAAK;QACnC,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAQA,KAAK,CAAS0S,GAAG,KAAK,UAAU,EAAE;UAC9D,MAAM,CAACF,OAAO,EAAEC,OAAO,CAAC,GAAIzS,KAAK,CAAS0S,GAAG,EAAE;AAC9C,UAAA,CAAC,YAAY;AACZ;AACA;AACA,YAAA,IAAIC,wBAA4C;YAChD,IAAI;cACF,IAAIyB,YAAmB,GAAG,EAAE;AAC5B,cAAA,IAAIrB,iBAAqC;AACzC,cAAA,IAAIC,cAAkC;AACtC,cAAA,IAAIxL,KAKH,GAAG;AACFwF,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE;eACf;AAED,cAAA,WAAW,MAAMkD,KAAK,IAAImC,OAAO,EAAE;AACjC;gBACA,IAAIQ,cAAc,KAAK1R,SAAS,IAAI8O,oBAAoB,CAACC,KAAK,CAAC,EAAE;AAC/D2C,kBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,gBAAA;AAEA,gBAAA,IAAI,UAAU,IAAI/B,KAAK,IAAIA,KAAK,CAAC1K,QAAQ,EAAE;AACzC;kBACA,IAAI,CAACoN,iBAAiB,IAAI1C,KAAK,CAAC1K,QAAQ,CAAC+I,KAAK,EAAE;AAC9CqE,oBAAAA,iBAAiB,GAAG1C,KAAK,CAAC1K,QAAQ,CAAC+I,KAAK;AAC1C,kBAAA;kBACA,IAAI,CAACiE,wBAAwB,IAAItC,KAAK,CAAC1K,QAAQ,CAACU,EAAE,EAAE;AAClDsM,oBAAAA,wBAAwB,GAAGtC,KAAK,CAAC1K,QAAQ,CAACU,EAAE;AAC9C,kBAAA;AACF,gBAAA;gBACA,IACEgK,KAAK,CAAC/N,IAAI,KAAK,oBAAoB,IACnC,UAAU,IAAI+N,KAAK,IACnBA,KAAK,CAAC1K,QAAQ,EAAEC,MAAM,IACtByK,KAAK,CAAC1K,QAAQ,CAACC,MAAM,CAAClF,MAAM,GAAG,CAAC,EAChC;AACA0T,kBAAAA,YAAY,GAAG/D,KAAK,CAAC1K,QAAQ,CAACC,MAAM;AACtC,gBAAA;AACA,gBAAA,IAAI,OAAO,IAAIyK,KAAK,IAAIA,KAAK,CAAC7I,KAAK,EAAE;AACnCA,kBAAAA,KAAK,GAAG;AACNwF,oBAAAA,WAAW,EAAEqD,KAAK,CAAC7I,KAAK,CAAC6M,YAAY,IAAI,CAAC;AAC1ClH,oBAAAA,YAAY,EAAEkD,KAAK,CAAC7I,KAAK,CAAC8M,aAAa,IAAI,CAAC;oBAC5C9G,eAAe,EAAE6C,KAAK,CAAC7I,KAAK,CAAC+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;oBACzElG,oBAAoB,EAAE2C,KAAK,CAAC7I,KAAK,CAACgN,oBAAoB,EAAEV,aAAa,IAAI;mBAC1E;AACH,gBAAA;AACF,cAAA;cAEA,MAAM3E,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,cAAA,MAAM9C,gBAAgB,GAAG4D,cAAc,KAAK1R,SAAS,GAAG,CAAC0R,cAAc,GAAGd,SAAS,IAAI,IAAI,GAAG5Q,SAAS;AACvG,cAAA,MAAMmK,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;AAChBkF,gBAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAIqE,iBAAiB;AAC9C7K,gBAAAA,QAAQ,EAAE,OAAO;gBACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AAChFpE,gBAAAA,MAAM,EAAEwO,YAAY;gBACpBjF,OAAO;gBACPC,gBAAgB;gBAChBlE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,gBAAAA,UAAU,EAAE,GAAG;gBACfxE,KAAK;AACLqI,gBAAAA,YAAY,EAAE8C;AAChB,eAAC,CAAC;YACJ,CAAC,CAAC,OAAOhI,KAAc,EAAE;AACvB,cAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,OAAO;gBACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AAChFpE,gBAAAA,MAAM,EAAE,EAAE;AACVuJ,gBAAAA,OAAO,EAAE,CAAC;gBACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,gBAAAA,KAAK,EAAE;AAAEwF,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE;iBAAG;AAC1C;AACA;AACA0C,gBAAAA,YAAY,EAAE8C,wBAAwB;AACtChI,gBAAAA,KAAK,EAAEA;AACT,eAAC,CAAC;AACF,cAAA,MAAMA,KAAK;AACb,YAAA;AACF,UAAA,CAAC,GAAG,CAACsJ,KAAK,CAAC,MAAM;AACf;AACA;AAAA,UAAA,CACD,CAAC;AAEF,UAAA,OAAOxB,OAAO;AAChB,QAAA;AACA,QAAA,OAAOzS,KAAK;AACd,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,MAAM;MACL,MAAMkU,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;QAChB,IAAI,QAAQ,IAAIA,MAAM,EAAE;UACtB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,UAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,YAAA,GAAG5H,aAAa;AAChBkF,YAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,YAAAA,QAAQ,EAAE,OAAO;YACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;YAChFpE,MAAM,EAAEwB,MAAM,CAACxB,MAAM;YACrBuJ,OAAO;YACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,YAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,YAAAA,UAAU,EAAE,GAAG;AACfxE,YAAAA,KAAK,EAAE;AACLwF,cAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAE6M,YAAY,IAAI,CAAC;AAC5ClH,cAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAE8M,aAAa,IAAI,CAAC;cAC9C9G,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAE+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;cAC3ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEgN,oBAAoB,EAAEV,aAAa,IAAI;aAC5E;YACDjE,YAAY,EAAEzI,MAAM,CAACf,EAAE;YACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;cAAEK,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;aAAG;AACjF,WAAC,CAAC;AACJ,QAAA;AACA,QAAA,OAAOA,MAAM;MACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,QAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GACjDA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAC7C,GAAG;AAET,QAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,OAAO;UACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AAChFpE,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;UACrC0C,UAAU;AACVxE,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAAiD;AAEjD,MAAA,OAAOuJ,cAAc;AACvB,IAAA;AACF,EAAA;AAEO3L,EAAAA,KAAKA,CACVe,IAA+B,EAC/BoC,OAAwB,EACa;IACrC,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAAC9J,KAAK,CAAC0J,YAAY,EAAEvG,OAAO,CAAC;IAExD,MAAMwI,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;MAChB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,MAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,QAAA,GAAG5H,aAAa;AAChBkF,QAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,QAAAA,QAAQ,EAAE,OAAO;QACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;QAChFpE,MAAM,EAAEwB,MAAM,CAACxB,MAAM;QACrBuJ,OAAO;QACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,QAAAA,UAAU,EAAE,GAAG;AACfxE,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAE6M,YAAY,IAAI,CAAC;AAC5ClH,UAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAE8M,aAAa,IAAI,CAAC;UAC9C9G,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAE+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;UAC3ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEgN,oBAAoB,EAAEV,aAAa,IAAI;SAC5E;QACDjE,YAAY,EAAEzI,MAAM,CAACf,EAAE;QACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;UAAEK,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;SAAG;AACjF,OAAC,CAAC;AACF,MAAA,OAAOA,MAAM;IACf,CAAC,EACD,MAAOuD,KAAU,IAAK;AACpB,MAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,QAAA,GAAG5H,aAAa;QAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,QAAAA,QAAQ,EAAE,OAAO;QACjBjB,KAAK,EAAE8C,0BAA0B,CAACkI,YAAY,CAAChL,KAAK,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AAChFpE,QAAAA,MAAM,EAAE,EAAE;AACVuJ,QAAAA,OAAO,EAAE,CAAC;QACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;QACrC0C,UAAU,EAAErB,KAAK,EAAEuB,MAAM,GAAGvB,KAAK,CAACuB,MAAM,GAAG,GAAG;AAC9C1E,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE,CAAC;AACdG,UAAAA,YAAY,EAAE;SACf;AACDxC,QAAAA;AACF,OAAC,CAAC;AACF,MAAA,MAAMA,KAAK;AACb,IAAA,CACF,CAAC;AAED,IAAA,OAAOuJ,cAAc;AACvB,EAAA;AACF;0BAEO,MAAMxC,iBAAiB,SAASV,kBAAW,CAACyD,UAAU,CAAC;AAI5DlT,EAAAA,WAAWA,CAACwF,MAAmB,EAAEqK,QAAiB,EAAE;IAClD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;AAEO8G,EAAAA,MAAMA,CACX1I,IAA8C,EAC9CoC,OAAwB,EACa;IACrC,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IACzD,MAAMwI,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;MAChB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,MAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;QACvCxF,SAAS,EAAExD,OAAO,CAACsM,SAAS;AAC5B,QAAA,GAAGlL,aAAa;QAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,QAAAA,QAAQ,EAAE,OAAO;AACjBjB,QAAAA,KAAK,EAAEH,eAAe,CAAC,IAAI,CAACsK,QAAQ,EAAE5H,aAAa,CAACxC,WAAW,EAAEiL,YAAY,CAAChL,KAAK,CAAC;AACpFrB,QAAAA,MAAM,EAAE,IAAI;AAAE;QACduJ,OAAO;QACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,QAAAA,UAAU,EAAE,GAAG;AACfxE,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAEiM,aAAa,IAAI;AAC9C;AACF,OAAC,CAAC;AACF,MAAA,OAAOrM,MAAM;IACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,MAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GAAKA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAAI,GAAG;AAEhH,MAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;QACvCxF,SAAS,EAAExD,OAAO,CAACsM,SAAS;AAC5B,QAAA,GAAGlL,aAAa;QAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,QAAAA,QAAQ,EAAE,OAAO;AACjBjB,QAAAA,KAAK,EAAEH,eAAe,CAAC,IAAI,CAACsK,QAAQ,EAAE5H,aAAa,CAACxC,WAAW,EAAEiL,YAAY,CAAChL,KAAK,CAAC;AACpFrB,QAAAA,MAAM,EAAE,IAAI;AACZuJ,QAAAA,OAAO,EAAE,CAAC;QACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;QACrC0C,UAAU;AACVxE,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE;SACd;AACDrC,QAAAA;AACF,OAAC,CAAC;AACF,MAAA,MAAMA,KAAK;AACb,IAAA,CACF,CAAwC;AAExC,IAAA,OAAOuJ,cAAc;AACvB,EAAA;AACF;;ACloBA,MAAMvC,IAAI,GAAGgD,aAAa,CAAChD,IAAI;AAC/B,MAAMI,WAAW,GAAGJ,IAAI,CAACI,WAAW;AACpC,MAAMoC,SAAS,GAAGQ,aAAa,CAACR,SAAS;AACzC,MAAMM,UAAU,GAAGE,aAAa,CAACF,UAAU;AAC3C,MAAMG,KAAK,GAAGD,aAAa,CAACC,KAAK;AACjC,MAAMC,cAAc,GAAGF,aAAa,CAACC,KAAK,CAACC,cAAc;AAsBzD,SAASC,+BAA+BA,CAAC,GAAGC,IAA4C,EAAQ;EAC9F,KAAKtJ,mBAAmB,CAAC,GAAGsJ,IAAI,CAAC,CAACd,KAAK,CAAC,MAAM3S,SAAS,CAAC;AAC1D;AAEA,eAAe0T,+BAA+BA,CAAC,GAAGD,IAA4C,EAAiB;AAC7G,EAAA,MAAM,GAAGrJ,OAAO,CAAC,GAAGqJ,IAAI;EAExB,IAAIrJ,OAAO,CAACyE,gBAAgB,EAAE;AAC5B,IAAA,MAAM1E,mBAAmB,CAAC,GAAGsJ,IAAI,CAAC;AACpC,EAAA,CAAC,MAAM;IACLD,+BAA+B,CAAC,GAAGC,IAAI,CAAC;AAC1C,EAAA;AACF;AAEA,SAASE,yBAAyBA,CAChC5C,aAAgC,EAChC6B,cAA+B,EACX;EACpB,MAAMgB,UAAU,GAAGhB,cAAoC;AAEvD,EAAA,IAAI,OAAO7B,aAAa,CAAC8C,UAAU,KAAK,UAAU,EAAE;IAClDD,UAAU,CAACC,UAAU,GAAG,MAAM9C,aAAa,CAAC8C,UAAU,EAAE;AAC1D,EAAA;AAEA,EAAA,IAAI,OAAO9C,aAAa,CAAC+C,YAAY,KAAK,UAAU,EAAE;IACpDF,UAAU,CAACE,YAAY,GAAG,YAAY;MACpC,MAAM,CAACzP,QAAQ,EAAEpB,IAAI,CAAC,GAAG,MAAM8Q,OAAO,CAACC,GAAG,CAAC,CAACjD,aAAa,CAAC+C,YAAY,EAAE,EAAElB,cAAc,CAAC,CAAC;MAC1F,OAAO;AAAE,QAAA,GAAGvO,QAAQ;AAAEpB,QAAAA;OAAM;IAC9B,CAAC;AACH,EAAA;AAEA,EAAA,OAAO2Q,UAAU;AACnB;AAEA,MAAMK,0BAA0B,GAAG,IAAIvU,GAAG,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAE9F,SAASwU,2BAA2BA,CAClCjQ,MAAuC,EACvCI,QAA4D,EACnD;EACT,OACEJ,MAAM,CAACkQ,UAAU,KAAK,IAAI,IAC1B,CAAC9P,QAAQ,CAAC6B,KAAK,IACf,CAAC,CAAC7B,QAAQ,CAACuG,MAAM,IACjB,CAACqJ,0BAA0B,CAACpT,GAAG,CAACwD,QAAQ,CAACuG,MAAM,CAAC;AAEpD;AAEO,MAAMwJ,aAAa,SAASf,aAAa,CAAC;EAO/CpT,WAAWA,CAAC0P,MAA8B,EAAE;IAC1C,MAAM;MAAEC,OAAO;MAAE,GAAGC;AAAa,KAAC,GAAGF,MAAM;IAC3C,KAAK,CAACE,YAAY,CAAC;IACnB,IAAI,CAACC,QAAQ,GAAGF,OAAO;IACvB,IAAI,CAACG,IAAI,GAAG,IAAIC,WAAW,CAAC,IAAI,EAAE,IAAI,CAACF,QAAQ,CAAC;IAChD,IAAI,CAACG,SAAS,GAAG,IAAIC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAACJ,QAAQ,CAAC;IAC1D,IAAI,CAACK,UAAU,GAAG,IAAIC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAACN,QAAQ,CAAC;IAC5D,IAAI,CAAC3K,KAAK,GAAG,IAAIkP,YAAY,CAAC,IAAI,EAAE,IAAI,CAACvE,QAAQ,CAAC;AACpD,EAAA;AACF;AAEO,MAAME,WAAW,SAASK,IAAI,CAAC;AACpCpQ,EAAAA,WAAWA,CAACqQ,YAA2B,EAAER,QAAiB,EAAE;IAC1D,KAAK,CAACQ,YAAY,CAAC;IACnB,IAAI,CAACC,WAAW,GAAG,IAAIC,kBAAkB,CAACF,YAAY,EAAER,QAAQ,CAAC;AACnE,EAAA;AAGF;AAEO,MAAMU,kBAAkB,SAASC,WAAW,CAAC;AAIlDxQ,EAAAA,WAAWA,CAACwF,MAAqB,EAAEqK,QAAiB,EAAE;IACpD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACO8G,EAAAA,MAAMA,CACX1I,IAAuD,EACvDoC,OAAwB,EACkC;IAC1D,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEzD,IAAIuG,YAAY,CAACK,MAAM,EAAE;AACvB,MAAA,MAAM4B,cAAc,GAAG7B,aAAa,CAACE,IAAI,CAAEvS,KAAK,IAAK;QACnD,IAAI,KAAK,IAAIA,KAAK,EAAE;UAClB,MAAM,CAACwS,OAAO,EAAEC,OAAO,CAAC,GAAGzS,KAAK,CAAC0S,GAAG,EAAE;AACrC,UAAA,CAAC,YAAY;AACZ;AACA;AACA,YAAA,IAAIC,wBAA4C;AAChD,YAAA,IAAIC,6BAAiD;YACrD,IAAI;cACF,MAAMC,aAA+B,GAAG,EAAE;cAC1C,IAAIC,kBAAkB,GAAG,EAAE;AAC3B,cAAA,IAAIC,iBAAqC;AACzC,cAAA,IAAIC,cAAkC;AACtC,cAAA,IAAItD,UAA8B;AAClC,cAAA,IAAIlI,KAMH,GAAG;AACFwF,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE,CAAC;AACfW,gBAAAA,cAAc,EAAE;eACjB;;AAED;AACA,cAAA,MAAMmF,mBAAmB,GAAG,IAAIC,GAAG,EAOhC;AACH,cAAA,IAAI0C,YAAqB;AAEzB,cAAA,WAAW,MAAMvF,KAAK,IAAImC,OAAO,EAAE;AACjC;AACA,gBAAA,IAAI,CAACO,iBAAiB,IAAI1C,KAAK,CAAC3B,KAAK,EAAE;kBACrCqE,iBAAiB,GAAG1C,KAAK,CAAC3B,KAAK;AACjC,gBAAA;AACA,gBAAA,IAAI,CAACiE,wBAAwB,IAAItC,KAAK,CAAChK,EAAE,EAAE;kBACzCsM,wBAAwB,GAAGtC,KAAK,CAAChK,EAAE;AACrC,gBAAA;AACA,gBAAA,IAAI,CAACuM,6BAA6B,IAAIvC,KAAK,CAACO,kBAAkB,EAAE;kBAC9DgC,6BAA6B,GAAGvC,KAAK,CAACO,kBAAkB;AAC1D,gBAAA;AAEA,gBAAA,MAAM9K,MAAM,GAAGuK,KAAK,EAAExK,OAAO,GAAG,CAAC,CAAC;gBAElC,IAAIC,MAAM,EAAE+P,aAAa,EAAE;kBACzBnG,UAAU,GAAG5J,MAAM,CAAC+P,aAAa;AACnC,gBAAA;AAEA,gBAAA,MAAMC,mBAAmB,GAAG3O,uBAAuB,CAACkJ,KAAK,CAAC;AAC1D,gBAAA,IAAIyF,mBAAmB,GAAG,CAAC,IAAIA,mBAAmB,IAAItO,KAAK,CAACsG,cAAc,IAAI,CAAC,CAAC,EAAE;kBAChFtG,KAAK,CAACsG,cAAc,GAAGgI,mBAAmB;AAC5C,gBAAA;;AAEA;AACA,gBAAA,MAAM3C,YAAY,GAAGrN,MAAM,EAAE4B,KAAK,EAAExC,OAAO;AAC3C,gBAAA,IAAIiO,YAAY,EAAE;kBAChB,IAAIH,cAAc,KAAK1R,SAAS,EAAE;AAChC0R,oBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,kBAAA;AACAU,kBAAAA,kBAAkB,IAAIK,YAAY;AACpC,gBAAA;;AAEA;AACA,gBAAA,MAAMC,cAAc,GAAGtN,MAAM,EAAE4B,KAAK,EAAEvB,UAAU;gBAChD,IAAIiN,cAAc,IAAI7P,KAAK,CAACC,OAAO,CAAC4P,cAAc,CAAC,EAAE;kBACnD,IAAIJ,cAAc,KAAK1R,SAAS,EAAE;AAChC0R,oBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,kBAAA;AACA,kBAAA,KAAK,MAAMhM,QAAQ,IAAIgN,cAAc,EAAE;AACrC,oBAAA,MAAMC,KAAK,GAAGjN,QAAQ,CAACiN,KAAK;oBAE5B,IAAIA,KAAK,KAAK/R,SAAS,EAAE;AACvB,sBAAA,IAAI,CAAC2R,mBAAmB,CAAC9Q,GAAG,CAACkR,KAAK,CAAC,EAAE;AACnC;AACAJ,wBAAAA,mBAAmB,CAACK,GAAG,CAACD,KAAK,EAAE;AAC7BhN,0BAAAA,EAAE,EAAED,QAAQ,CAACC,EAAE,IAAI,EAAE;AACrBE,0BAAAA,IAAI,EAAEH,QAAQ,CAACE,QAAQ,EAAEC,IAAI,IAAI,EAAE;AACnCC,0BAAAA,SAAS,EAAE;AACb,yBAAC,CAAC;AACJ,sBAAA;AAEA,sBAAA,MAAM+M,cAAc,GAAGN,mBAAmB,CAACO,GAAG,CAACH,KAAK,CAAC;AACrD,sBAAA,IAAIE,cAAc,EAAE;AAClB;wBACA,IAAInN,QAAQ,CAACC,EAAE,EAAE;AACfkN,0BAAAA,cAAc,CAAClN,EAAE,GAAGD,QAAQ,CAACC,EAAE;AACjC,wBAAA;AACA,wBAAA,IAAID,QAAQ,CAACE,QAAQ,EAAEC,IAAI,EAAE;AAC3BgN,0BAAAA,cAAc,CAAChN,IAAI,GAAGH,QAAQ,CAACE,QAAQ,CAACC,IAAI;AAC9C,wBAAA;AACA,wBAAA,IAAIH,QAAQ,CAACE,QAAQ,EAAEE,SAAS,EAAE;AAChC+M,0BAAAA,cAAc,CAAC/M,SAAS,IAAIJ,QAAQ,CAACE,QAAQ,CAACE,SAAS;AACzD,wBAAA;AACF,sBAAA;AACF,oBAAA;AACF,kBAAA;AACF,gBAAA;;AAEA;gBACA,IAAI6J,KAAK,CAAC7I,KAAK,EAAE;kBACfoO,YAAY,GAAGvF,KAAK,CAAC7I,KAAK;AAC1BA,kBAAAA,KAAK,GAAG;AACN,oBAAA,GAAGA,KAAK;AACRwF,oBAAAA,WAAW,EAAEqD,KAAK,CAAC7I,KAAK,CAACiM,aAAa,IAAI,CAAC;AAC3CtG,oBAAAA,YAAY,EAAEkD,KAAK,CAAC7I,KAAK,CAACkM,iBAAiB,IAAI,CAAC;oBAChDlG,eAAe,EAAE6C,KAAK,CAAC7I,KAAK,CAACmM,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;oBAC7ElG,oBAAoB,EAAE2C,KAAK,CAAC7I,KAAK,CAACqM,qBAAqB,EAAEC,aAAa,IAAI;mBAC3E;AACH,gBAAA;AACF,cAAA;;AAEA;AACA,cAAA,IAAIhB,kBAAkB,EAAE;gBACtBD,aAAa,CAAC5M,IAAI,CAAC;AAAE3D,kBAAAA,IAAI,EAAE,MAAM;AAAE4D,kBAAAA,IAAI,EAAE4M;AAAmB,iBAAC,CAAC;AAChE,cAAA;;AAEA;cACA,KAAK,MAAM1M,QAAQ,IAAI6M,mBAAmB,CAACc,MAAM,EAAE,EAAE;gBACnD,IAAI3N,QAAQ,CAACG,IAAI,EAAE;kBACjBsM,aAAa,CAAC5M,IAAI,CAAC;AACjB3D,oBAAAA,IAAI,EAAE,UAAU;oBAChB+D,EAAE,EAAED,QAAQ,CAACC,EAAE;AACfC,oBAAAA,QAAQ,EAAE;sBACRC,IAAI,EAAEH,QAAQ,CAACG,IAAI;sBACnBC,SAAS,EAAEJ,QAAQ,CAACI;AACtB;AACF,mBAA0B,CAAC;AAC7B,gBAAA;AACF,cAAA;;AAEA;cACA,MAAMwN,eAAmC,GACvCnB,aAAa,CAACnS,MAAM,GAAG,CAAC,GACpB,CACE;AACEqF,gBAAAA,IAAI,EAAE,WAAW;AACjBb,gBAAAA,OAAO,EAAE2N;eACV,CACF,GACD,CACE;AACE9M,gBAAAA,IAAI,EAAE,WAAW;AACjBb,gBAAAA,OAAO,EAAE,CAAC;AAAE5C,kBAAAA,IAAI,EAAE,MAAM;AAAE4D,kBAAAA,IAAI,EAAE;iBAAI;AACtC,eAAC,CACF;cAEP,MAAMiJ,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,cAAA,MAAM9C,gBAAgB,GAAG4D,cAAc,KAAK1R,SAAS,GAAG,CAAC0R,cAAc,GAAGd,SAAS,IAAI,IAAI,GAAG5Q,SAAS;AACvG,cAAA,MAAMyU,cAAc,GAAG9N,yBAAyB,CAAC,QAAQ,EAAEgK,YAAY,CAAC;AACxE,cAAA,MAAMxG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;AAChBkF,gBAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAIqE,iBAAiB;AAC9C7K,gBAAAA,QAAQ,EAAE,QAAQ;AAClBjB,gBAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,gBAAAA,MAAM,EAAEoO,eAAe;gBACvB7E,OAAO;gBACPC,gBAAgB;gBAChBlE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,gBAAAA,UAAU,EAAE,GAAG;AACfxE,gBAAAA,KAAK,EAAE;kBACLwF,WAAW,EAAExF,KAAK,CAACwF,WAAW;kBAC9BG,YAAY,EAAE3F,KAAK,CAAC2F,YAAY;kBAChCK,eAAe,EAAEhG,KAAK,CAACgG,eAAe;kBACtCE,oBAAoB,EAAElG,KAAK,CAACkG,oBAAoB;kBAChDI,cAAc,EAAEtG,KAAK,CAACsG,cAAc;AACpCE,kBAAAA,QAAQ,EAAE4H;iBACX;gBACDlG,UAAU;AACVvH,gBAAAA,KAAK,EAAE4N,cAAc;AACrBlG,gBAAAA,YAAY,EAAE8C,wBAAwB;gBACtC5C,gBAAgB,EAAES,qBAAqB,CAAC;AAAEG,kBAAAA,iBAAiB,EAAEiC;iBAA+B;AAC9F,eAAC,CAAC;YACJ,CAAC,CAAC,OAAOjI,KAAc,EAAE;AACvB,cAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,QAAQ;AAClBjB,gBAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,gBAAAA,MAAM,EAAE,EAAE;AACVuJ,gBAAAA,OAAO,EAAE,CAAC;gBACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,gBAAAA,KAAK,EAAE;AAAEwF,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE;iBAAG;AAC1C;AACA;AACA;AACA0C,gBAAAA,YAAY,EAAE8C,wBAAwB;gBACtC5C,gBAAgB,EAAES,qBAAqB,CAAC;AAAEG,kBAAAA,iBAAiB,EAAEiC;AAA8B,iBAAC,CAAC;AAC7FjI,gBAAAA;AACF,eAAC,CAAC;AACF,cAAA,MAAMA,KAAK;AACb,YAAA;AACF,UAAA,CAAC,GAAG,CAACsJ,KAAK,CAAC,MAAM;AACf;AACA;AAAA,UAAA,CACD,CAAC;;AAEF;AACA,UAAA,OAAOxB,OAAO;AAChB,QAAA;AACA,QAAA,OAAOzS,KAAK;AACd,MAAA,CAAC,CAAC;AAEF,MAAA,OAAOiV,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,IAAA,CAAC,MAAM;MACL,MAAMA,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;QAChB,IAAI,SAAS,IAAIA,MAAM,EAAE;UACvB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,UAAA,MAAM6D,cAAc,GAAG9N,yBAAyB,CAAC,QAAQ,EAAEgK,YAAY,CAAC;AACxE,UAAA,MAAM+B,eAAe,GAAGtO,oBAAoB,CAAC0B,MAAM,CAAC;AACpD,UAAA,MAAM4N,+BAA+B,CAAC,IAAI,CAAC5D,QAAQ,EAAE;AACnD,YAAA,GAAG5H,aAAa;AAChBkF,YAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,YAAAA,QAAQ,EAAE,QAAQ;AAClBjB,YAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,YAAAA,MAAM,EAAEoO,eAAe;YACvB7E,OAAO;YACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,YAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,YAAAA,UAAU,EAAE,GAAG;AACfxE,YAAAA,KAAK,EAAE;AACLwF,cAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAEiM,aAAa,IAAI,CAAC;AAC7CtG,cAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAEkM,iBAAiB,IAAI,CAAC;cAClDlG,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAEmM,yBAAyB,EAAEC,gBAAgB,IAAI,CAAC;cAC/ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEqM,qBAAqB,EAAEC,aAAa,IAAI,CAAC;AAC7EhG,cAAAA,cAAc,EAAE3G,uBAAuB,CAACC,MAAM,CAAC;cAC/C4G,QAAQ,EAAE5G,MAAM,CAACI;aAClB;YACDkI,UAAU,EAAEtI,MAAM,CAACvB,OAAO,CAAC,CAAC,CAAC,EAAEgQ,aAAa,IAAIvU,SAAS;AACzD6G,YAAAA,KAAK,EAAE4N,cAAc;YACrBlG,YAAY,EAAEzI,MAAM,CAACf,EAAE;YACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;cACtCG,iBAAiB,EAAEvJ,MAAM,CAACwJ,kBAAkB;cAC5CC,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;aACnC;AACH,WAAC,CAAC;AACJ,QAAA;AACA,QAAA,OAAOA,MAAM;MACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,QAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GACjDA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAC7C,GAAG;AAET,QAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,QAAQ;AAClBjB,UAAAA,KAAK,EAAE3C,cAAc,CAAC2N,YAAY,CAAChI,QAAQ,CAAC;AAC5CrE,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;UACrC0C,UAAU;AACVxE,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAAC;AAED,MAAA,OAAOsK,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,IAAA;AACF,EAAA;AACF;AAEO,MAAM1C,gBAAgB,SAAS2C,SAAS,CAAC;AAI9C5S,EAAAA,WAAWA,CAACwF,MAAqB,EAAEqK,QAAiB,EAAE;IACpD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;;AAEA;;AAMA;;AAMA;;AAMA;AACO8G,EAAAA,MAAMA,CACX1I,IAAkD,EAClDoC,OAAwB,EAC4E;IACpG,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEzD,IAAIuG,YAAY,CAACK,MAAM,EAAE;AACvB,MAAA,MAAM4B,cAAc,GAAG7B,aAAa,CAACE,IAAI,CAAEvS,KAAK,IAAK;QACnD,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAOA,KAAK,CAAC0S,GAAG,KAAK,UAAU,EAAE;UACrD,MAAM,CAACF,OAAO,EAAEC,OAAO,CAAC,GAAGzS,KAAK,CAAC0S,GAAG,EAAE;AACrC,UAAA,CAAC,YAAY;AACZ;AACA;AACA,YAAA,IAAIC,wBAA4C;YAChD,IAAI;cACF,IAAIyB,YAAuB,GAAG,EAAE;AAChC,cAAA,IAAIrB,iBAAqC;AACzC,cAAA,IAAIC,cAAkC;AACtC,cAAA,IAAItD,UAA8B;AAClC,cAAA,IAAIlI,KAMH,GAAG;AACFwF,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE,CAAC;AACfW,gBAAAA,cAAc,EAAE;eACjB;AACD,cAAA,IAAI8H,YAAqB;AAEzB,cAAA,WAAW,MAAMvF,KAAK,IAAImC,OAAO,EAAE;AACjC;gBACA,IAAIQ,cAAc,KAAK1R,SAAS,IAAI8O,oBAAoB,CAACC,KAAK,CAAC,EAAE;AAC/D2C,kBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,gBAAA;AAEA,gBAAA,IAAI,UAAU,IAAI/B,KAAK,IAAIA,KAAK,CAAC1K,QAAQ,EAAE;AACzC;kBACA,IAAI,CAACoN,iBAAiB,IAAI1C,KAAK,CAAC1K,QAAQ,CAAC+I,KAAK,EAAE;AAC9CqE,oBAAAA,iBAAiB,GAAG1C,KAAK,CAAC1K,QAAQ,CAAC+I,KAAK;AAC1C,kBAAA;kBACA,IAAI,CAACiE,wBAAwB,IAAItC,KAAK,CAAC1K,QAAQ,CAACU,EAAE,EAAE;AAClDsM,oBAAAA,wBAAwB,GAAGtC,KAAK,CAAC1K,QAAQ,CAACU,EAAE;AAC9C,kBAAA;AAEA,kBAAA,MAAMyP,mBAAmB,GAAG3O,uBAAuB,CAACkJ,KAAK,CAAC1K,QAAQ,CAAC;AACnE,kBAAA,IAAImQ,mBAAmB,GAAG,CAAC,IAAIA,mBAAmB,IAAItO,KAAK,CAACsG,cAAc,IAAI,CAAC,CAAC,EAAE;oBAChFtG,KAAK,CAACsG,cAAc,GAAGgI,mBAAmB;AAC5C,kBAAA;AACF,gBAAA;gBAEA,IACEzF,KAAK,CAAC/N,IAAI,KAAK,oBAAoB,IACnC,UAAU,IAAI+N,KAAK,IACnBA,KAAK,CAAC1K,QAAQ,EAAEC,MAAM,IACtByK,KAAK,CAAC1K,QAAQ,CAACC,MAAM,CAAClF,MAAM,GAAG,CAAC,EAChC;AACA0T,kBAAAA,YAAY,GAAG/D,KAAK,CAAC1K,QAAQ,CAACC,MAAM;AACpC,kBAAA,IAAIyK,KAAK,CAAC1K,QAAQ,CAACuG,MAAM,EAAE;AACzBwD,oBAAAA,UAAU,GAAGW,KAAK,CAAC1K,QAAQ,CAACuG,MAAM;AACpC,kBAAA;AACF,gBAAA;gBACA,IAAI,UAAU,IAAImE,KAAK,IAAIA,KAAK,CAAC1K,QAAQ,EAAE6B,KAAK,EAAE;AAChDoO,kBAAAA,YAAY,GAAGvF,KAAK,CAAC1K,QAAQ,CAAC6B,KAAK;AACnCA,kBAAAA,KAAK,GAAG;AACN,oBAAA,GAAGA,KAAK;oBACRwF,WAAW,EAAEqD,KAAK,CAAC1K,QAAQ,CAAC6B,KAAK,CAAC6M,YAAY,IAAI,CAAC;oBACnDlH,YAAY,EAAEkD,KAAK,CAAC1K,QAAQ,CAAC6B,KAAK,CAAC8M,aAAa,IAAI,CAAC;oBACrD9G,eAAe,EAAE6C,KAAK,CAAC1K,QAAQ,CAAC6B,KAAK,CAAC+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;oBAClFlG,oBAAoB,EAAE2C,KAAK,CAAC1K,QAAQ,CAAC6B,KAAK,CAACgN,oBAAoB,EAAEV,aAAa,IAAI;mBACnF;AACH,gBAAA;AACF,cAAA;cAEA,MAAM3E,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,cAAA,MAAM9C,gBAAgB,GAAG4D,cAAc,KAAK1R,SAAS,GAAG,CAAC0R,cAAc,GAAGd,SAAS,IAAI,IAAI,GAAG5Q,SAAS;AACvG,cAAA,MAAMyU,cAAc,GAAG9N,yBAAyB,CAAC,QAAQ,EAAEgK,YAAY,CAAC;AACxE,cAAA,MAAMxG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;AAChBkF,gBAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAIqE,iBAAiB;AAC9C7K,gBAAAA,QAAQ,EAAE,QAAQ;AAClBjB,gBAAAA,KAAK,EAAE8C,0BAA0B,CAC/BvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAC1CgL,YAAY,CAACjI,YACf,CAAC;AACDpE,gBAAAA,MAAM,EAAEwO,YAAY;gBACpBjF,OAAO;gBACPC,gBAAgB;gBAChBlE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,gBAAAA,UAAU,EAAE,GAAG;AACfxE,gBAAAA,KAAK,EAAE;kBACLwF,WAAW,EAAExF,KAAK,CAACwF,WAAW;kBAC9BG,YAAY,EAAE3F,KAAK,CAAC2F,YAAY;kBAChCK,eAAe,EAAEhG,KAAK,CAACgG,eAAe;kBACtCE,oBAAoB,EAAElG,KAAK,CAACkG,oBAAoB;kBAChDI,cAAc,EAAEtG,KAAK,CAACsG,cAAc;AACpCE,kBAAAA,QAAQ,EAAE4H;iBACX;gBACDlG,UAAU;AACVvH,gBAAAA,KAAK,EAAE4N,cAAc;AACrBlG,gBAAAA,YAAY,EAAE8C;AAChB,eAAC,CAAC;YACJ,CAAC,CAAC,OAAOhI,KAAc,EAAE;AACvB,cAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,QAAQ;AAClBjB,gBAAAA,KAAK,EAAE8C,0BAA0B,CAC/BvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAC1CgL,YAAY,CAACjI,YACf,CAAC;AACDpE,gBAAAA,MAAM,EAAE,EAAE;AACVuJ,gBAAAA,OAAO,EAAE,CAAC;gBACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,gBAAAA,KAAK,EAAE;AAAEwF,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE;iBAAG;AAC1C;AACA;AACA0C,gBAAAA,YAAY,EAAE8C,wBAAwB;AACtChI,gBAAAA;AACF,eAAC,CAAC;AACF,cAAA,MAAMA,KAAK;AACb,YAAA;AACF,UAAA,CAAC,GAAG,CAACsJ,KAAK,CAAC,MAAM;AACf;AACA;AAAA,UAAA,CACD,CAAC;AAEF,UAAA,OAAOxB,OAAO;AAChB,QAAA;AACA,QAAA,OAAOzS,KAAK;AACd,MAAA,CAAC,CAAC;AAEF,MAAA,OAAOiV,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,IAAA,CAAC,MAAM;MACL,MAAMA,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;QAChB,IAAI,QAAQ,IAAIA,MAAM,EAAE;AACtB,UAAA,IAAIoO,2BAA2B,CAACvD,YAAY,EAAE7K,MAAM,CAAC,EAAE;AACrD,YAAA,OAAOA,MAAM;AACf,UAAA;UAEA,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,UAAA,MAAM6D,cAAc,GAAG9N,yBAAyB,CAAC,QAAQ,EAAEgK,YAAY,CAAC;UACxE,MAAM+B,eAAe,GAAGtO,oBAAoB,CAAC;YAAEE,MAAM,EAAEwB,MAAM,CAACxB;AAAO,WAAC,CAAC;AACvE,UAAA,MAAMoP,+BAA+B,CAAC,IAAI,CAAC5D,QAAQ,EAAE;AACnD,YAAA,GAAG5H,aAAa;AAChBkF,YAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,YAAAA,QAAQ,EAAE,QAAQ;AAClBjB,YAAAA,KAAK,EAAE8C,0BAA0B,CAACvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AACxGpE,YAAAA,MAAM,EAAEoO,eAAe;YACvB7E,OAAO;YACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,YAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,YAAAA,UAAU,EAAE,GAAG;AACfxE,YAAAA,KAAK,EAAE;AACLwF,cAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAE6M,YAAY,IAAI,CAAC;AAC5ClH,cAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAE8M,aAAa,IAAI,CAAC;cAC9C9G,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAE+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;cAC3ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEgN,oBAAoB,EAAEV,aAAa,IAAI,CAAC;AAC5EhG,cAAAA,cAAc,EAAE3G,uBAAuB,CAACC,MAAM,CAAC;cAC/C4G,QAAQ,EAAE5G,MAAM,CAACI;aAClB;AACDkI,YAAAA,UAAU,EAAEtI,MAAM,CAAC8E,MAAM,IAAI5K,SAAS;AACtC6G,YAAAA,KAAK,EAAE4N,cAAc;YACrBlG,YAAY,EAAEzI,MAAM,CAACf,EAAE;YACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;cAAEK,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;aAAG;AACjF,WAAC,CAAC;AACJ,QAAA;AACA,QAAA,OAAOA,MAAM;MACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,QAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GACjDA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAC7C,GAAG;AAET,QAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,QAAQ;AAClBjB,UAAAA,KAAK,EAAE8C,0BAA0B,CAACvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AACxGpE,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;UACrC0C,UAAU;AACVxE,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAAC;AAED,MAAA,OAAOsK,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,IAAA;AACF,EAAA;AAEO3L,EAAAA,KAAKA,CACVe,IAA+B,EAC/BoC,OAAwB,EACa;IACrC,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAM4D,cAAc,GAAG,KAAK,CAAChE,MAAM,CAACiE,IAAI,CAAC,IAAI,CAAC;IAC9C,MAAMC,kBAAkB,GAAG,IAA+B;AAC1D,IAAA,MAAMC,UAAU,GAAGD,kBAAkB,CAAC,QAAQ,CAAC;AAC/CA,IAAAA,kBAAkB,CAAC,QAAQ,CAAC,GAAGF,cAAc;IAE7C,IAAI;MACF,MAAM3D,aAAa,GAAG,KAAK,CAAC9J,KAAK,CAAC0J,YAAY,EAAEvG,OAAO,CAAC;MAExD,MAAMwI,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;AAChB,QAAA,IAAIoO,2BAA2B,CAACvD,YAAY,EAAE7K,MAAM,CAAC,EAAE;AACrD,UAAA,OAAOA,MAAM;AACf,QAAA;QAEA,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,QAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;AAChBkF,UAAAA,KAAK,EAAEuD,YAAY,CAACvD,KAAK,IAAItH,MAAM,CAACsH,KAAK;AACzCxG,UAAAA,QAAQ,EAAE,QAAQ;AAClBjB,UAAAA,KAAK,EAAE8C,0BAA0B,CAACvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAAEgL,YAAY,CAACjI,YAAY,CAAC;UACxGpE,MAAM,EAAEwB,MAAM,CAACxB,MAAM;UACrBuJ,OAAO;UACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,UAAAA,UAAU,EAAE,GAAG;AACfxE,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAE6M,YAAY,IAAI,CAAC;AAC5ClH,YAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAE8M,aAAa,IAAI,CAAC;YAC9C9G,eAAe,EAAEpG,MAAM,CAACI,KAAK,EAAE+M,qBAAqB,EAAEX,gBAAgB,IAAI,CAAC;YAC3ElG,oBAAoB,EAAEtG,MAAM,CAACI,KAAK,EAAEgN,oBAAoB,EAAEV,aAAa,IAAI,CAAC;YAC5E9F,QAAQ,EAAE5G,MAAM,CAACI;WAClB;AACDkI,UAAAA,UAAU,EAAEtI,MAAM,CAAC8E,MAAM,IAAI5K,SAAS;UACtCuO,YAAY,EAAEzI,MAAM,CAACf,EAAE;UACvB0J,gBAAgB,EAAES,qBAAqB,CAAC;YAAEK,SAAS,EAAEP,gBAAgB,CAAClJ,MAAM;WAAG;AACjF,SAAC,CAAC;AACF,QAAA,OAAOA,MAAM;MACf,CAAC,EACD,MAAOuD,KAAY,IAAK;AACtB,QAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,QAAQ;AAClBjB,UAAAA,KAAK,EAAE8C,0BAA0B,CAACvF,sBAAsB,CAACyN,YAAY,CAAChL,KAAK,CAAC,EAAEgL,YAAY,CAACjI,YAAY,CAAC;AACxGpE,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAAC;AAED,MAAA,OAAOsK,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,IAAA,CAAC,SAAS;AACR;AACAgC,MAAAA,kBAAkB,CAAC,QAAQ,CAAC,GAAGC,UAAU;AAC3C,IAAA;AACF,EAAA;AACF;AAEO,MAAMzE,iBAAiB,SAAS+C,UAAU,CAAC;AAIhDlT,EAAAA,WAAWA,CAACwF,MAAqB,EAAEqK,QAAiB,EAAE;IACpD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;AAEO8G,EAAAA,MAAMA,CACX1I,IAA8C,EAC9CoC,OAAwB,EACa;IACrC,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GAAGH,oBAAoB,CAACC,IAAI,CAAC;AAClF,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAG,KAAK,CAACL,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEzD,MAAMwI,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;MAChB,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,MAAA,MAAMzG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,QAAA,GAAG5H,aAAa;QAChBoC,SAAS,EAAExD,OAAO,CAACsM,SAAS;QAC5BhG,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,QAAAA,QAAQ,EAAE,QAAQ;AAClBjB,QAAAA,KAAK,EAAEH,eAAe,CAAC,IAAI,CAACsK,QAAQ,EAAE5H,aAAa,CAACxC,WAAW,EAAEiL,YAAY,CAAChL,KAAK,CAAC;AACpFrB,QAAAA,MAAM,EAAE,IAAI;AAAE;QACduJ,OAAO;QACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,QAAAA,UAAU,EAAE,GAAG;AACfxE,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAEiM,aAAa,IAAI,CAAC;UAC7CzF,QAAQ,EAAE5G,MAAM,CAACI;AACnB;AACF,OAAC,CAAC;AACF,MAAA,OAAOJ,MAAM;IACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,MAAA,MAAMqB,UAAU,GACdrB,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAIA,KAAK,GAAKA,KAAK,CAAyBuB,MAAM,IAAI,GAAG,GAAI,GAAG;AAEhH,MAAA,MAAMT,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;QACvCxF,SAAS,EAAExD,OAAO,CAACsM,SAAS;AAC5B,QAAA,GAAGlL,aAAa;QAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,QAAAA,QAAQ,EAAE,QAAQ;AAClBjB,QAAAA,KAAK,EAAEH,eAAe,CAAC,IAAI,CAACsK,QAAQ,EAAE5H,aAAa,CAACxC,WAAW,EAAEiL,YAAY,CAAChL,KAAK,CAAC;AACpFrB,QAAAA,MAAM,EAAE,IAAI;AAAE;AACduJ,QAAAA,OAAO,EAAE,CAAC;QACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,QAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;QACrC0C,UAAU;AACVxE,QAAAA,KAAK,EAAE;AACLwF,UAAAA,WAAW,EAAE;SACd;AACDrC,QAAAA;AACF,OAAC,CAAC;AACF,MAAA,MAAMA,KAAK;AACb,IAAA,CACF,CAAC;AAED,IAAA,OAAOsK,yBAAyB,CAAC5C,aAAa,EAAE6B,cAAc,CAAC;AACjE,EAAA;AACF;AAEO,MAAMyB,YAAY,SAASf,KAAK,CAAC;AACtCrT,EAAAA,WAAWA,CAACqQ,YAA2B,EAAER,QAAiB,EAAE;IAC1D,KAAK,CAACQ,YAAY,CAAC;IACnB,IAAI,CAACwE,cAAc,GAAG,IAAIC,qBAAqB,CAACzE,YAAY,EAAER,QAAQ,CAAC;AACzE,EAAA;AAGF;AAEO,MAAMiF,qBAAqB,SAASxB,cAAc,CAAC;AAIxDtT,EAAAA,WAAWA,CAACwF,MAAqB,EAAEqK,QAAiB,EAAE;IACpD,KAAK,CAACrK,MAAM,CAAC;IACb,IAAI,CAACqK,QAAQ,GAAGA,QAAQ;AACxB,IAAA,IAAI,CAAClG,OAAO,GAAGnE,MAAM,CAACmE,OAAO;AAC/B,EAAA;;AAEA;;AAOA;;AAMA;;AAOA;;AAMA;;AAMA;;AAUA;;AAUA;AACO8G,EAAAA,MAAMA,CACX1I,IAAqF,EACrFoC,OAAwB,EAKxB;IACA,MAAM;AAAEnC,MAAAA,cAAc,EAAE0I,YAAY;AAAEzI,MAAAA;AAAc,KAAC,GACnDH,oBAAoB,CAA+DC,IAAI,CAAC;AAC1F,IAAA,MAAM4I,SAAS,GAAGC,IAAI,CAACC,GAAG,EAAE;IAE5B,MAAMC,aAAa,GAAGJ,YAAY,CAACK,MAAM,GACrC,KAAK,CAACN,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC,GACnC,KAAK,CAACsG,MAAM,CAACC,YAAY,EAAEvG,OAAO,CAAC;IAEvC,IAAIuG,YAAY,CAACK,MAAM,EAAE;AACvB,MAAA,MAAM4B,cAAc,GAAG7B,aAAa,CAACE,IAAI,CAAEvS,KAAK,IAAK;QACnD,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAQA,KAAK,CAAS0S,GAAG,KAAK,UAAU,EAAE;UAC9D,MAAM,CAACF,OAAO,EAAEC,OAAO,CAAC,GAAIzS,KAAK,CAAS0S,GAAG,EAAE;AAC9C,UAAA,CAAC,YAAY;YACZ,IAAI;cACF,IAAI0B,YAAoB,GAAG,EAAE;AAC7B,cAAA,IAAIpB,cAAkC;AACtC,cAAA,IAAIxL,KAIH,GAAG;AACFwF,gBAAAA,WAAW,EAAE,CAAC;AACdG,gBAAAA,YAAY,EAAE;eACf;cAED,MAAMmJ,SAAgF,GACpF,sBAAsB;AACxB,cAAA,WAAW,MAAMjG,KAAK,IAAImC,OAAO,EAAE;AACjC;gBACA,IAAIQ,cAAc,KAAK1R,SAAS,IAAI+O,KAAK,CAAC/N,IAAI,KAAK,uBAAuB,EAAE;AAC1E0Q,kBAAAA,cAAc,GAAGb,IAAI,CAACC,GAAG,EAAE;AAC7B,gBAAA;gBAEA,IAAI/B,KAAK,CAAC/N,IAAI,KAAKgU,SAAS,IAAI,MAAM,IAAIjG,KAAK,IAAIA,KAAK,CAACnK,IAAI,IAAImK,KAAK,CAACnK,IAAI,CAACxF,MAAM,GAAG,CAAC,EAAE;kBACtF0T,YAAY,GAAG/D,KAAK,CAACnK,IAAI;AAC3B,gBAAA;AACA,gBAAA,IAAI,OAAO,IAAImK,KAAK,IAAIA,KAAK,CAAC7I,KAAK,EAAE;AACnCA,kBAAAA,KAAK,GAAG;AACNwF,oBAAAA,WAAW,EAAEqD,KAAK,CAAC7I,KAAK,EAAElF,IAAI,KAAK,QAAQ,GAAI+N,KAAK,CAAC7I,KAAK,CAAC6M,YAAY,IAAI,CAAC,GAAI,CAAC;AACjFlH,oBAAAA,YAAY,EAAEkD,KAAK,CAAC7I,KAAK,EAAElF,IAAI,KAAK,QAAQ,GAAI+N,KAAK,CAAC7I,KAAK,CAAC8M,aAAa,IAAI,CAAC,GAAI,CAAC;oBACnFtG,QAAQ,EAAEqC,KAAK,CAAC7I;mBACjB;AACH,gBAAA;AACF,cAAA;cAEA,MAAM2H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,cAAA,MAAM9C,gBAAgB,GAAG4D,cAAc,KAAK1R,SAAS,GAAG,CAAC0R,cAAc,GAAGd,SAAS,IAAI,IAAI,GAAG5Q,SAAS;AACvG,cAAA,MAAMyU,cAAc,GAAG9N,yBAAyB,CAAC,QAAQ,EAAEgK,YAAY,CAAC;AACxE,cAAA,MAAMxG,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBjB,KAAK,EAAEgL,YAAY,CAACsE,MAAM;AAC1B3Q,gBAAAA,MAAM,EAAEwO,YAAY;gBACpBjF,OAAO;gBACPC,gBAAgB;gBAChBlE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,gBAAAA,UAAU,EAAE,GAAG;gBACfxE,KAAK;AACLW,gBAAAA,KAAK,EAAE4N;AACT,eAAC,CAAC;YACJ,CAAC,CAAC,OAAOpL,KAAc,EAAE;AACvB,cAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,gBAAA,GAAG5H,aAAa;gBAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,gBAAAA,QAAQ,EAAE,QAAQ;gBAClBjB,KAAK,EAAEgL,YAAY,CAACsE,MAAM;AAC1B3Q,gBAAAA,MAAM,EAAE,EAAE;AACVuJ,gBAAAA,OAAO,EAAE,CAAC;gBACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,gBAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,gBAAAA,KAAK,EAAE;AAAEwF,kBAAAA,WAAW,EAAE,CAAC;AAAEG,kBAAAA,YAAY,EAAE;iBAAG;AAC1CxC,gBAAAA;AACF,eAAC,CAAC;AACF,cAAA,MAAMA,KAAK;AACb,YAAA;AACF,UAAA,CAAC,GAAG,CAACsJ,KAAK,CAAC,MAAM;AACf;AACA;AAAA,UAAA,CACD,CAAC;AAEF,UAAA,OAAOxB,OAAO;AAChB,QAAA;AACA,QAAA,OAAOzS,KAAK;AACd,MAAA,CAAC,CAAC;AAEF,MAAA,OAAOiV,yBAAyB,CAC9B5C,aAAa,EACb6B,cACF,CAAC;AACH,IAAA,CAAC,MAAM;MACL,MAAMA,cAAc,GAAG7B,aAAa,CAACE,IAAI,CACvC,MAAOnL,MAAM,IAAK;QAChB,IAAIA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAIA,MAAM,EAAE;UAC5D,MAAM+H,OAAO,GAAG,CAACgD,IAAI,CAACC,GAAG,EAAE,GAAGF,SAAS,IAAI,IAAI;AAC/C,UAAA,MAAM8C,+BAA+B,CAAC,IAAI,CAAC5D,QAAQ,EAAE;AACnD,YAAA,GAAG5H,aAAa;YAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,YAAAA,QAAQ,EAAE,QAAQ;YAClBjB,KAAK,EAAEgL,YAAY,CAACsE,MAAM;YAC1B3Q,MAAM,EAAEwB,MAAM,CAAClB,IAAI;YACnBiJ,OAAO;YACPjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,YAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC0C,YAAAA,UAAU,EAAE,GAAG;AACfxE,YAAAA,KAAK,EAAE;AACLwF,cAAAA,WAAW,EAAE5F,MAAM,CAACI,KAAK,EAAElF,IAAI,KAAK,QAAQ,GAAI8E,MAAM,CAACI,KAAK,CAAC6M,YAAY,IAAI,CAAC,GAAI,CAAC;AACnFlH,cAAAA,YAAY,EAAE/F,MAAM,CAACI,KAAK,EAAElF,IAAI,KAAK,QAAQ,GAAI8E,MAAM,CAACI,KAAK,CAAC8M,aAAa,IAAI,CAAC,GAAI,CAAC;cACrFtG,QAAQ,EAAE5G,MAAM,CAACI;AACnB;AACF,WAAC,CAAC;AACJ,QAAA;AACA,QAAA,OAAOJ,MAAM;MACf,CAAC,EACD,MAAOuD,KAAc,IAAK;AACxB,QAAA,MAAMc,mBAAmB,CAAC,IAAI,CAAC2F,QAAQ,EAAE;AACvC,UAAA,GAAG5H,aAAa;UAChBkF,KAAK,EAAEuD,YAAY,CAACvD,KAAK;AACzBxG,UAAAA,QAAQ,EAAE,QAAQ;UAClBjB,KAAK,EAAEgL,YAAY,CAACsE,MAAM;AAC1B3Q,UAAAA,MAAM,EAAE,EAAE;AACVuJ,UAAAA,OAAO,EAAE,CAAC;UACVjE,OAAO,EAAE,IAAI,CAACA,OAAO;AACrB0D,UAAAA,eAAe,EAAEtJ,cAAc,CAACgE,IAAI,CAAC;AACrC9B,UAAAA,KAAK,EAAE;AACLwF,YAAAA,WAAW,EAAE,CAAC;AACdG,YAAAA,YAAY,EAAE;WACf;AACDxC,UAAAA;AACF,SAAC,CAAC;AACF,QAAA,MAAMA,KAAK;AACb,MAAA,CACF,CAAC;AAED,MAAA,OAAOsK,yBAAyB,CAC9B5C,aAAa,EACb6B,cACF,CAAC;AACH,IAAA;AACF,EAAA;AACF;;;;;;;;;;;;;"}