@anvia/gemini 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -7
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -1170,14 +1170,15 @@ var GEMINI_PRO_MODELS = /* @__PURE__ */ new Set([
|
|
|
1170
1170
|
"gemini-3.1-pro-preview-customtools"
|
|
1171
1171
|
]);
|
|
1172
1172
|
function reasoningControls(efforts, defaultValue) {
|
|
1173
|
+
const effortControl = {
|
|
1174
|
+
type: "select",
|
|
1175
|
+
label: "Reasoning effort",
|
|
1176
|
+
description: "Controls how much reasoning the model applies before responding.",
|
|
1177
|
+
options: efforts
|
|
1178
|
+
};
|
|
1179
|
+
if (defaultValue !== void 0) effortControl.defaultValue = defaultValue;
|
|
1173
1180
|
return defineCompletionModelControls({
|
|
1174
|
-
reasoningEffort:
|
|
1175
|
-
type: "select",
|
|
1176
|
-
label: "Reasoning effort",
|
|
1177
|
-
description: "Controls how much reasoning the model applies before responding.",
|
|
1178
|
-
options: efforts,
|
|
1179
|
-
...defaultValue === void 0 ? {} : { defaultValue }
|
|
1180
|
-
}
|
|
1181
|
+
reasoningEffort: effortControl
|
|
1181
1182
|
});
|
|
1182
1183
|
}
|
|
1183
1184
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gemini/index.ts","../src/gemini/client.ts","../src/gemini/completion.ts","../src/request-messages.ts","../src/gemini/retry.ts","../src/gemini/controls.ts","../src/gemini/embedding.ts","../src/gemini/image-generation.ts","../src/gemini/models.ts","../src/gemini/transcription.ts"],"sourcesContent":["export {\n GeminiClient,\n type GeminiClientOptions,\n type GeminiCompletionModelHandle,\n type GeminiCompletionModelOptions,\n type GeminiEmbeddingModelHandle,\n type GeminiImageGenerationModelHandle,\n type GeminiImageGenerationModelOptions,\n type GeminiTranscriptionModelHandle,\n type GeminiTranscriptionModelOptions,\n} from \"./client\";\nexport {\n GEMINI_REASONING_EFFORTS,\n type GeminiControlsFor,\n type GeminiReasoningControls,\n type GeminiReasoningEffort,\n} from \"./controls\";\nexport type { GeminiEmbeddingModelOptions, GeminiEmbeddingTaskType } from \"./embedding\";\nexport {\n GEMINI_2_5_FLASH_IMAGE,\n GEMINI_3_1_FLASH_IMAGE,\n GEMINI_3_1_FLASH_LITE_IMAGE,\n GEMINI_3_PRO_IMAGE,\n GEMINI_3_PRO_IMAGE_PREVIEW,\n IMAGEN_4_GENERATE,\n} from \"./image-generation\";\nexport type {\n GeminiCompletionModelId,\n GeminiEmbeddingModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n KnownGeminiCompletionModelId,\n KnownGeminiEmbeddingModelId,\n KnownGeminiGenerateContentImageModelId,\n KnownGeminiGenerateImagesModelId,\n} from \"./models\";\n","import {\n type CompletionModelControls,\n defineCompletionModelControls,\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport type { EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { ImageGenerationModel } from \"@anvia/core/image-generation\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport type { TranscriptionModel } from \"@anvia/core/transcription\";\nimport { GoogleGenAI, type GoogleGenAIOptions } from \"@google/genai\";\nimport { GeminiCompletionModel } from \"./completion\";\nimport { geminiControlsForModel, type GeminiControlsFor } from \"./controls\";\nimport { GeminiEmbeddingModel, type GeminiEmbeddingModelOptions } from \"./embedding\";\nimport { GeminiImageGenerationModel, GeminiImagenGenerationModel } from \"./image-generation\";\nimport type {\n GeminiCompletionModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n} from \"./models\";\nimport { GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\nimport { GeminiTranscriptionModel } from \"./transcription\";\n\ntype GeminiApiClientOptions = {\n apiKey: string;\n vertexAi?: never;\n client?: never;\n};\n\ntype VertexClientOptions = {\n vertexAi: {\n projectId: string;\n location: string;\n googleAuthOptions?: GoogleGenAIOptions[\"googleAuthOptions\"];\n };\n apiKey?: never;\n client?: never;\n};\n\ntype InjectedClientOptions = {\n client: GoogleGenAI;\n apiKey?: never;\n vertexAi?: never;\n};\n\nexport type GeminiClientOptions =\n | GeminiApiClientOptions\n | VertexClientOptions\n | InjectedClientOptions;\n\nexport type GeminiCompletionModelOptions<\n ModelId extends GeminiCompletionModelId = GeminiCompletionModelId,\n Controls extends CompletionModelControls = GeminiControlsFor<ModelId>,\n> = {\n modelId: ModelId;\n contextLimits?: ModelContextLimits | undefined;\n controls?: Controls | undefined;\n};\n\nexport type GeminiImageGenerationModelOptions =\n | { api: \"generateContent\"; modelId: GeminiGenerateContentImageModelId }\n | { api: \"generateImages\"; modelId: GeminiGenerateImagesModelId };\n\nexport type GeminiTranscriptionModelOptions = { modelId: GeminiTranscriptionModelId };\n\nexport type GeminiCompletionModelHandle<\n Controls extends CompletionModelControls = CompletionModelControls,\n> = StreamingCompletionModel<unknown, Controls>;\nexport type GeminiEmbeddingModelHandle = EmbeddingModel;\nexport type GeminiImageGenerationModelHandle = ImageGenerationModel<unknown>;\nexport type GeminiTranscriptionModelHandle = TranscriptionModel<unknown>;\n\nexport class GeminiClient implements ModelListingClient {\n private readonly sdk: GoogleGenAI;\n\n constructor(options: GeminiClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"vertexAi\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new GoogleGenAI(toGoogleGenAIOptions(options));\n }\n\n completionModel<\n const ModelId extends GeminiCompletionModelId,\n const Controls extends CompletionModelControls = GeminiControlsFor<ModelId>,\n >(\n options: GeminiCompletionModelOptions<ModelId, Controls>,\n ): GeminiCompletionModelHandle<Controls> {\n const modelId = requireModelId(options.modelId);\n const controls = (\n options.controls === undefined\n ? geminiControlsForModel(modelId)\n : defineCompletionModelControls(options.controls)\n ) as Controls | undefined;\n return new GeminiCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n controls,\n );\n }\n\n embeddingModel(options: GeminiEmbeddingModelOptions): GeminiEmbeddingModelHandle {\n requireModelId(options.modelId);\n validateOptionalPositiveSafeInteger(options.dimensions, \"dimensions\");\n validateOptionalPositiveSafeInteger(options.maxBatchSize, \"maxBatchSize\");\n return new GeminiEmbeddingModel(this.sdk, options);\n }\n\n imageGenerationModel(\n options: GeminiImageGenerationModelOptions,\n ): GeminiImageGenerationModelHandle {\n const modelId = requireModelId(options.modelId);\n return options.api === \"generateContent\"\n ? new GeminiImageGenerationModel(this.sdk, modelId)\n : new GeminiImagenGenerationModel(this.sdk, modelId);\n }\n\n transcriptionModel(options: GeminiTranscriptionModelOptions): GeminiTranscriptionModelHandle {\n return new GeminiTranscriptionModel(this.sdk, requireModelId(options.modelId));\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const config = { pageSize: 1000 };\n if (options.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.sdk.models.list({\n config: disableGeminiNativeRetries(config),\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Gemini\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`GeminiClient cannot combine client with ${conflict}.`);\n }\n}\n\nexport function toGoogleGenAIOptions(options: GeminiClientOptions): GoogleGenAIOptions {\n if (\"client\" in options && options.client !== undefined) {\n throw new TypeError(\"Injected Gemini clients do not have managed SDK options.\");\n }\n if (\"vertexAi\" in options && options.vertexAi !== undefined) {\n const sdkOptions: GoogleGenAIOptions = {\n vertexai: true,\n project: requireOption(options.vertexAi.projectId, \"projectId\", \"Vertex Gemini\"),\n location: requireOption(options.vertexAi.location, \"location\", \"Vertex Gemini\"),\n };\n if (options.vertexAi.googleAuthOptions !== undefined) {\n sdkOptions.googleAuthOptions = options.vertexAi.googleAuthOptions;\n }\n return sdkOptions;\n }\n\n return {\n apiKey: requireOption(options.apiKey, \"apiKey\", \"Gemini\"),\n };\n}\n\nfunction requireOption(value: string | undefined, name: string, label: string): string {\n if (value === undefined || value.trim().length === 0) {\n throw new Error(`Missing ${label} ${name}. Pass ${name} when constructing GeminiClient.`);\n }\n\n return value;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nfunction validateOptionalPositiveSafeInteger(value: number | undefined, name: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(`${name} must be a positive safe integer`);\n }\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.models)) {\n return response.models;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model)) {\n return undefined;\n }\n\n const id =\n stringValue(model.baseModelId) ??\n stringValue(model.base_model_id) ??\n normalizeGeminiModelId(stringValue(model.name));\n\n if (id === undefined) {\n return undefined;\n }\n\n const listedModel: ModelList[\"data\"][number] = {\n id,\n };\n if (typeof model.displayName === \"string\") {\n listedModel.name = model.displayName;\n }\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (typeof model.inputTokenLimit === \"number\") {\n listedModel.contextLength = model.inputTokenLimit;\n }\n if (typeof model.input_token_limit === \"number\") {\n listedModel.contextLength = model.input_token_limit;\n }\n return listedModel;\n}\n\nfunction normalizeGeminiModelId(name: string | undefined): string | undefined {\n const trimmed = name?.trim().replace(/^models\\//, \"\");\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionFinishReason,\n type CompletionModelCapabilities,\n type CompletionModelControls,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n CompletionProviderOutputError,\n type CompletionRequest,\n type CompletionResponse,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type StreamingCompletionModel,\n type ToolCallArgumentsMode,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport type { GeminiCompletionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\ntype GeminiGenerateParams = Record<string, unknown>;\ntype GeminiConfig = Record<string, unknown>;\ntype GeminiContent = {\n role: \"user\" | \"model\";\n parts: GeminiPart[];\n};\ntype GeminiPart = Record<string, unknown>;\ntype IndexedGeminiPart = Readonly<{\n index: number;\n part: GeminiPart;\n}>;\ntype GeminiFunctionCall = Readonly<{\n toolCallId: string;\n callId?: string | undefined;\n name: string;\n args: JsonObject;\n signature?: string | undefined;\n partIndex: number;\n}>;\ntype GeminiStreamChunkMapping = Readonly<{\n events: CompletionModelStreamEvent[];\n toolCalls: Extract<AssistantContentPart, { type: \"tool-call\" }>[];\n hasToolCallMarker: boolean;\n hasSyntheticToolCalls: boolean;\n providerFinishReason?: string | undefined;\n terminalError?: CompletionProviderOutputError | undefined;\n}>;\n\nexport class GeminiCompletionModel<\n Controls extends CompletionModelControls = CompletionModelControls,\n> implements StreamingCompletionModel<unknown, Controls> {\n readonly provider = \"gemini\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n readonly controls?: Controls,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toGeminiGenerateContentParams(this.modelId, request);\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const response = await this.client.models.generateContent(params as never);\n return withContextUsage(fromGeminiGenerateContentResponse(response), this.modelInfo());\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const stream = await this.client.models.generateContentStream(params as never);\n const streamState = new GeminiCompletionStreamState();\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n streamState.accept(chunk, mapping);\n for (const event of mapping.events) {\n if (event.type !== \"final\") {\n yield event;\n }\n }\n }\n streamState.assertComplete();\n const finalEvent = streamState.finalEvent();\n if (finalEvent !== undefined) {\n yield {\n ...finalEvent,\n response: withContextUsage(finalEvent.response, this.modelInfo()),\n };\n }\n }\n}\n\nexport function toGeminiGenerateContentParams(\n modelId: GeminiCompletionModelId,\n request: CompletionRequest,\n): GeminiGenerateParams {\n const messages = requestMessages(request);\n if (\n request.providerOptions !== undefined &&\n (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))\n ) {\n throw new TypeError(\"Gemini providerOptions must be a JSON object.\");\n }\n const providerOptions = request.providerOptions ?? {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n if (providerConfigValue !== undefined && !isPlainObject(providerConfigValue)) {\n throw new TypeError(\"Gemini providerOptions.config must be a JSON object.\");\n }\n const providerConfig = providerConfigValue === undefined ? {} : { ...providerConfigValue };\n delete providerConfig.tools;\n const configValues: GeminiConfig = {\n ...providerConfig,\n ...geminiConfig(request, messages),\n };\n const reasoningEffort = request.controls?.reasoningEffort;\n if (reasoningEffort !== undefined) {\n const thinkingConfig = isPlainObject(providerConfig.thinkingConfig)\n ? { ...providerConfig.thinkingConfig }\n : {};\n if (modelId.startsWith(\"gemini-2.5\")) {\n delete thinkingConfig.thinkingLevel;\n configValues.thinkingConfig = {\n ...thinkingConfig,\n thinkingBudget: gemini25ThinkingBudget(reasoningEffort),\n };\n } else {\n delete thinkingConfig.thinkingBudget;\n configValues.thinkingConfig = { ...thinkingConfig, thinkingLevel: reasoningEffort };\n }\n }\n const config = disableGeminiNativeRetries(configValues);\n const params: GeminiGenerateParams = {\n ...providerTopLevel,\n model: modelId,\n contents: messagesToGeminiContents(messages),\n config,\n };\n\n return params;\n}\n\nfunction gemini25ThinkingBudget(reasoningEffort: string): number {\n if (reasoningEffort === \"low\") return 1_024;\n if (reasoningEffort === \"medium\") return 8_192;\n if (reasoningEffort === \"high\") return 24_576;\n throw new TypeError(`Unsupported Gemini 2.5 reasoning effort: ${reasoningEffort}`);\n}\n\nfunction applyAbortSignal(\n params: GeminiGenerateParams,\n options: ModelCallOptions | undefined,\n): void {\n if (options?.abortSignal === undefined) return;\n const config = isPlainObject(params.config) ? params.config : {};\n params.config = { ...config, abortSignal: options.abortSignal };\n}\n\nfunction providerRequestSummary(\n params: GeminiGenerateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n const config = isPlainObject(params.config) ? params.config : {};\n return compactJsonObject({\n provider: \"gemini\",\n api: options.stream === true ? \"models.generateContentStream\" : \"models.generateContent\",\n stream: options.stream === true,\n model: typeof params.model === \"string\" ? params.model : undefined,\n parameterKeys: Object.keys(params).sort(),\n contentCount: Array.isArray(params.contents) ? params.contents.length : undefined,\n configKeys: Object.keys(config).sort(),\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystemInstruction: config.systemInstruction !== undefined,\n hasOutputSchema: request.outputSchema !== undefined,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (!isJsonValue(value)) {\n return [];\n }\n return [[key, value]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction geminiConfig(request: CompletionRequest, messages: MessageType[]): GeminiConfig {\n const config: GeminiConfig = {};\n const systemInstruction = systemInstructionFrom(request, messages);\n if (systemInstruction !== undefined) {\n config.systemInstruction = systemInstruction;\n }\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n config.maxOutputTokens = request.maxTokens;\n }\n if (request.tools.length > 0) {\n config.tools = [{ functionDeclarations: request.tools.map(toolDefinitionToGemini) }];\n }\n if (request.toolChoice !== undefined) {\n config.toolConfig = toolChoiceToGemini(request.toolChoice);\n }\n if (request.outputSchema !== undefined) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = request.outputSchema;\n }\n return config;\n}\n\nfunction systemInstructionFrom(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function messagesToGeminiContents(messages: MessageType[]): GeminiContent[] {\n const toolNamesById = new Map<string, string>();\n const contents: GeminiContent[] = [];\n\n for (const message of messages) {\n if (message.role === \"system\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content = assistantMessageToGeminiContent(message);\n for (const item of typeof message.content === \"string\" ? [] : message.content) {\n if (item.type === \"tool-call\") {\n toolNamesById.set(item.toolCallId, item.toolName);\n if (item.callId !== undefined) {\n toolNamesById.set(item.callId, item.toolName);\n }\n }\n }\n if (content.parts.length > 0) {\n contents.push(content);\n }\n continue;\n }\n\n const content =\n message.role === \"tool\"\n ? toolMessageToGeminiContent(message, toolNamesById)\n : userMessageToGeminiContent(message);\n if (content.parts.length > 0) {\n contents.push(content);\n }\n }\n\n return contents;\n}\n\nfunction userMessageToGeminiContent(\n message: Extract<MessageType, { role: \"user\" }>,\n): GeminiContent {\n return {\n role: \"user\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.map(userContentToGeminiPart),\n };\n}\n\nfunction toolMessageToGeminiContent(\n message: Extract<MessageType, { role: \"tool\" }>,\n toolNamesById: Map<string, string>,\n): GeminiContent {\n return {\n role: \"user\",\n parts: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToGeminiPart(content, toolNamesById);\n }),\n };\n}\n\nfunction assistantMessageToGeminiContent(\n message: Extract<MessageType, { role: \"assistant\" }>,\n): GeminiContent {\n return {\n role: \"model\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.flatMap((content): GeminiPart[] => {\n if (content.type === \"text\") {\n const part: GeminiPart = { text: content.text };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"tool-call\") {\n const functionCall: Record<string, unknown> = {\n name: content.toolName,\n args: content.input,\n };\n if (content.callId !== undefined) {\n functionCall.id = content.callId;\n }\n const part: GeminiPart = { functionCall };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap((reasoning): GeminiPart[] => {\n if (reasoning.type !== \"text\" && reasoning.type !== \"summary\") {\n return [];\n }\n const part: GeminiPart = { text: reasoning.text, thought: true };\n if (reasoning.type === \"text\" && reasoning.signature !== undefined) {\n part.thoughtSignature = reasoning.signature;\n }\n return [part];\n });\n }\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Gemini does not support image or file content in assistant history yet\",\n );\n }\n return [];\n }),\n };\n}\n\nfunction userContentToGeminiPart(content: UserContentPart): GeminiPart {\n if (content.type === \"text\") {\n return { text: content.text };\n }\n if (content.type === \"image\") {\n return imageContentToGeminiPart(content);\n }\n return documentContentToGeminiPart(content);\n}\n\nfunction imageContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"image\" }>,\n): GeminiPart {\n if (content.image.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType ?? \"image/png\",\n data: content.image.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.image.url,\n mimeType: content.mediaType ?? mimeTypeFromImageUrl(content.image.url),\n },\n };\n}\n\nfunction mimeTypeFromImageUrl(url: string): string {\n const pathname = safeUrlPathname(url).toLowerCase();\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".gif\")) return \"image/gif\";\n if (pathname.endsWith(\".bmp\")) return \"image/bmp\";\n if (pathname.endsWith(\".heic\")) return \"image/heic\";\n if (pathname.endsWith(\".heif\")) return \"image/heif\";\n return \"image/png\";\n}\n\nfunction safeUrlPathname(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n return url;\n }\n}\n\nfunction documentContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"file\" }>,\n): GeminiPart {\n if (content.data.type === \"text\") {\n return { text: content.data.text };\n }\n\n if (content.data.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType,\n data: content.data.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.data.url,\n mimeType: content.mediaType,\n },\n };\n}\n\nfunction toolContentToGeminiPart(\n content: ToolResultPart,\n toolNamesById: Map<string, string>,\n): GeminiPart {\n const id = content.callId ?? content.toolCallId;\n const functionResponse: Record<string, unknown> = {\n name: content.toolName || toolNamesById.get(id) || content.toolCallId,\n response: toolResultResponse(content),\n };\n if (content.callId !== undefined) {\n functionResponse.id = content.callId;\n }\n return { functionResponse };\n}\n\nfunction toolResultResponse(content: ToolResultPart): Record<string, unknown> {\n const output = content.output;\n if (output.type === \"json\") {\n return { result: output.value };\n }\n if (output.type === \"text\") {\n return { content: output.value };\n }\n if (output.type === \"error-json\" || output.type === \"error-text\") {\n return { error: output.value };\n }\n if (output.type === \"execution-denied\") {\n return { error: output.reason ?? \"Tool execution was denied.\" };\n }\n return {\n content: output.value\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\"),\n };\n}\n\nfunction toolDefinitionToGemini(tool: ToolDefinition): GeminiPart {\n return {\n name: tool.name,\n description: tool.description,\n parametersJsonSchema: tool.parameters,\n };\n}\n\nfunction toolChoiceToGemini(toolChoice: ToolChoice): GeminiPart {\n if (toolChoice === \"auto\") {\n return { functionCallingConfig: { mode: \"AUTO\" } };\n }\n if (toolChoice === \"required\") {\n return { functionCallingConfig: { mode: \"ANY\" } };\n }\n if (toolChoice === \"none\") {\n return { functionCallingConfig: { mode: \"NONE\" } };\n }\n return {\n functionCallingConfig: {\n mode: \"ANY\",\n allowedFunctionNames: [toolChoice.name],\n },\n };\n}\n\nexport function fromGeminiGenerateContentResponse(response: unknown): CompletionResponse {\n const raw = isPlainObject(response) ? response : {};\n const usage = usageFromGemini(raw.usageMetadata);\n const parts = candidateParts(raw, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(raw);\n const finishError = geminiToolFinishError(\n providerFinishReason,\n hasGeminiFunctionCallMarker(raw, parts),\n usage,\n );\n if (finishError !== undefined) throw finishError;\n const choice = assistantContentFromGeminiResponse(raw, usage);\n\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n applyGeminiFinishReason(result, raw);\n const id = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (id !== undefined) {\n result.messageId = id;\n }\n assertSafeGeminiCompletionResponse(result);\n return result;\n}\n\nfunction applyGeminiFinishReason(\n response: CompletionResponse,\n raw: Record<string, unknown>,\n hasStreamedToolCalls = false,\n): void {\n const value = providerFinishReasonFromGeminiResponse(raw);\n if (value === undefined) return;\n applyGeminiFinishReasonValue(response, value, hasStreamedToolCalls);\n}\n\nfunction applyGeminiFinishReasonValue(\n response: CompletionResponse,\n value: string,\n hasStreamedToolCalls: boolean,\n): void {\n response.finishReason = geminiFinishReason(\n value,\n hasStreamedToolCalls || response.choice.some((part) => part.type === \"tool-call\"),\n );\n response.providerFinishReason = value;\n}\n\nfunction geminiFinishReason(value: string, hasToolCalls: boolean): CompletionFinishReason {\n if (value === \"MAX_TOKENS\") return \"length\";\n if (\n value === \"SAFETY\" ||\n value === \"RECITATION\" ||\n value === \"BLOCKLIST\" ||\n value === \"PROHIBITED_CONTENT\" ||\n value === \"SPII\" ||\n value === \"IMAGE_SAFETY\" ||\n value === \"IMAGE_PROHIBITED_CONTENT\"\n ) {\n return \"content-filter\";\n }\n if (value === \"STOP\") {\n return hasToolCalls ? \"tool-calls\" : \"stop\";\n }\n return \"other\";\n}\n\nexport function fromGeminiGenerateContentStreamChunk(chunk: unknown): CompletionModelStreamEvent[] {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n if (mapping.terminalError !== undefined) throw mapping.terminalError;\n return mapping.events;\n}\n\nfunction mapGeminiGenerateContentStreamChunk(chunk: unknown): GeminiStreamChunkMapping {\n if (!isPlainObject(chunk)) {\n return {\n events: [],\n toolCalls: [],\n hasToolCallMarker: false,\n hasSyntheticToolCalls: false,\n };\n }\n\n const events: CompletionModelStreamEvent[] = [];\n const usage = usageFromGemini(chunk.usageMetadata);\n const parts = candidateParts(chunk, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(chunk);\n const hasToolCallMarker = hasGeminiFunctionCallMarker(chunk, parts);\n const terminalError =\n providerFinishReason === undefined\n ? undefined\n : geminiToolFinishError(providerFinishReason, hasToolCallMarker, usage);\n const calls =\n terminalError === undefined ? functionCallsFromGeminiResponse(chunk, parts, usage) : [];\n const directText = textFromGeminiResponse(chunk, parts);\n if (terminalError === undefined && directText.length > 0 && parts.length === 0) {\n events.push({ type: \"text_delta\", delta: directText });\n }\n for (const { part } of terminalError === undefined ? parts : []) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n events.push({ type: \"reasoning_delta\", delta: part.text, contentType: \"summary\" });\n } else {\n events.push({ type: \"text_delta\", delta: part.text });\n }\n }\n }\n for (const call of calls) {\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n name: call.name,\n signature: call.signature,\n }),\n );\n const argumentsDelta = JSON.stringify(call.args);\n if (argumentsDelta === undefined) {\n throw invalidGeminiToolCallArguments(call.toolCallId, usage);\n }\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n argumentsDelta,\n argumentsMode: \"replace\",\n }),\n );\n }\n const id = stringFrom(chunk.responseId) ?? stringFrom(chunk.id);\n if (id !== undefined) {\n events.push({ type: \"message_id\", id });\n }\n if (isPlainObject(chunk.usageMetadata)) {\n if (terminalError === undefined) {\n events.push({ type: \"final\", response: fromGeminiGenerateContentResponse(chunk) });\n } else {\n const response: CompletionResponse = { choice: [], usage, rawResponse: chunk };\n if (providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, providerFinishReason, true);\n }\n events.push({ type: \"final\", response });\n }\n }\n return providerFinishReason === undefined\n ? {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n terminalError,\n }\n : {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n providerFinishReason,\n terminalError,\n };\n}\n\nclass GeminiCompletionStreamState {\n private readonly toolCalls = new Map<\n string,\n Extract<AssistantContentPart, { type: \"tool-call\" }>\n >();\n private providerFinishReason: string | undefined;\n private terminalChunk: unknown;\n private finalResponse: CompletionResponse | undefined;\n private sawToolCallMarker = false;\n private sawSyntheticToolCallChunk = false;\n private terminalError: CompletionProviderOutputError | undefined;\n\n accept(chunk: unknown, mapping: GeminiStreamChunkMapping): void {\n if (mapping.hasSyntheticToolCalls && this.sawSyntheticToolCallChunk) {\n const toolCallId = mapping.toolCalls.find(\n (toolCall) => toolCall.callId === undefined,\n )?.toolCallId;\n throw toolCallId === undefined\n ? new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n usage: this.currentUsage(),\n })\n : invalidGeminiToolCall(toolCallId, this.currentUsage());\n }\n if (\n this.providerFinishReason !== undefined &&\n (mapping.hasToolCallMarker || hasGeminiSemanticProgress(mapping.events))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n for (const toolCall of mapping.toolCalls) {\n const existing = this.toolCalls.get(toolCall.toolCallId);\n if (existing !== undefined) {\n if (\n existing.callId === undefined ||\n toolCall.callId === undefined ||\n !sameGeminiToolCall(existing, toolCall)\n ) {\n throw invalidGeminiToolCall(toolCall.toolCallId, this.currentUsage());\n }\n continue;\n }\n this.toolCalls.set(toolCall.toolCallId, toolCall);\n }\n this.sawToolCallMarker ||= mapping.hasToolCallMarker;\n this.sawSyntheticToolCallChunk ||= mapping.hasSyntheticToolCalls;\n for (const event of mapping.events) {\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n }\n }\n this.terminalError ??= mapping.terminalError;\n\n if (mapping.providerFinishReason !== undefined) {\n if (\n this.providerFinishReason !== undefined &&\n this.providerFinishReason !== mapping.providerFinishReason\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n this.providerFinishReason = mapping.providerFinishReason;\n this.terminalChunk = chunk;\n }\n }\n\n assertComplete(): void {\n if (this.terminalError !== undefined) {\n throw geminiProviderOutputErrorWithUsage(this.terminalError, this.currentUsage());\n }\n if (!this.sawToolCallMarker && this.toolCalls.size === 0) return;\n if (this.providerFinishReason !== undefined) {\n assertSafeGeminiToolFinishReason(this.providerFinishReason, this.currentUsage());\n return;\n }\n const toolCallId = this.toolCalls.keys().next().value as string | undefined;\n throw new CompletionProviderOutputError(\n toolCallId === undefined\n ? { kind: \"incomplete-tool-call\", usage: this.currentUsage() }\n : { kind: \"incomplete-tool-call\", toolCallId, usage: this.currentUsage() },\n );\n }\n\n finalEvent(): Extract<CompletionModelStreamEvent, { type: \"final\" }> | undefined {\n let response = this.finalResponse;\n if (response === undefined) {\n if (this.terminalChunk === undefined) {\n return undefined;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n response = {\n choice: [],\n usage: usageFromGemini(raw.usageMetadata),\n rawResponse: this.terminalChunk,\n };\n const messageId = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (messageId !== undefined) response.messageId = messageId;\n }\n\n response = mergeGeminiStreamToolCalls(response, [...this.toolCalls.values()]);\n if (this.providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, this.providerFinishReason, this.toolCalls.size > 0);\n }\n assertSafeGeminiCompletionResponse(response);\n return { type: \"final\", response };\n }\n\n private currentUsage(): Usage {\n if (this.finalResponse !== undefined) {\n return this.finalResponse.usage;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n return usageFromGemini(raw.usageMetadata);\n }\n}\n\nfunction hasGeminiSemanticProgress(events: readonly CompletionModelStreamEvent[]): boolean {\n return events.some(\n (event) =>\n event.type === \"text_delta\" ||\n event.type === \"reasoning_delta\" ||\n event.type === \"tool_call_delta\" ||\n event.type === \"tool_call\" ||\n event.type === \"provider_tool_call\",\n );\n}\n\nfunction sameGeminiToolCall(\n left: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n right: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n): boolean {\n return (\n left.toolName === right.toolName &&\n left.callId === right.callId &&\n left.signature === right.signature &&\n sameJsonValue(left.input, right.input)\n );\n}\n\nfunction sameJsonValue(left: JsonValue, right: JsonValue): boolean {\n if (Object.is(left, right)) return true;\n if (isJsonArray(left) || isJsonArray(right)) {\n return (\n isJsonArray(left) &&\n isJsonArray(right) &&\n left.length === right.length &&\n left.every((value, index) => {\n const rightValue = right[index];\n return rightValue !== undefined && sameJsonValue(value, rightValue);\n })\n );\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) =>\n Object.hasOwn(right, key) && sameJsonValue(left[key] as JsonValue, right[key] as JsonValue),\n )\n );\n}\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction assistantContentFromGeminiResponse(\n response: Record<string, unknown>,\n usage: Usage,\n): AssistantContentPart[] {\n const parts = candidateParts(response, usage);\n const calls = functionCallsFromGeminiResponse(response, parts, usage);\n if (parts.length === 0) {\n const choice: AssistantContentPart[] = [];\n const text = textFromGeminiResponse(response, parts);\n if (text.length > 0) choice.push({ type: \"text\", text });\n choice.push(...calls.map(toolCallFromGeminiFunctionCall));\n return choice;\n }\n\n const callsByPartIndex = new Map(calls.map((call) => [call.partIndex, call]));\n const choice: AssistantContentPart[] = [];\n for (const { index, part } of parts) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n choice.push({\n type: \"reasoning\",\n text: part.text,\n details: [{ type: \"summary\", text: part.text }],\n });\n } else {\n const signature = thoughtSignatureFrom(part);\n let text: Extract<AssistantContentPart, { type: \"text\" }> = {\n type: \"text\",\n text: part.text,\n };\n if (signature !== undefined) text = { ...text, signature };\n choice.push(text);\n }\n }\n const call = callsByPartIndex.get(index);\n if (call !== undefined) {\n choice.push(toolCallFromGeminiFunctionCall(call));\n }\n }\n return choice;\n}\n\nfunction textFromGeminiResponse(\n response: Record<string, unknown>,\n parts = candidateParts(response),\n): string {\n if (parts.length > 0) {\n return parts\n .flatMap(({ part }) =>\n part.thought !== true && typeof part.text === \"string\" ? [part.text] : [],\n )\n .join(\"\");\n }\n if (hasGeminiCandidatePayload(response)) {\n return \"\";\n }\n const directText = ownDataProperty(response, \"text\");\n return typeof directText === \"string\" ? directText : \"\";\n}\n\nfunction functionCallsFromGeminiResponse(\n response: Record<string, unknown>,\n parts: IndexedGeminiPart[],\n usage: Usage,\n): GeminiFunctionCall[] {\n if (parts.length > 0) {\n const calls = parts.flatMap(({ index, part }) => {\n if (part.functionCall === undefined) {\n return [];\n }\n if (!isPlainObject(part.functionCall)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return [functionCallFromGeminiPart(part.functionCall, part, index, usage)];\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n }\n if (hasGeminiCandidatePayload(response)) {\n return [];\n }\n\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n const directCalls = Array.isArray(camelCaseCalls)\n ? camelCaseCalls\n : Array.isArray(snakeCaseCalls)\n ? snakeCaseCalls\n : [];\n const calls = directCalls.map((call, index) => {\n if (!isPlainObject(call)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return functionCallFromGeminiPart(call, call, index, usage);\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n}\n\nfunction functionCallFromGeminiPart(\n call: Record<string, unknown>,\n part: Record<string, unknown>,\n partIndex: number,\n usage: Usage,\n): GeminiFunctionCall {\n const fallbackId = deterministicGeminiToolCallId(partIndex);\n const rawCallId = call.id;\n const callId = isNonblankString(rawCallId) ? rawCallId : undefined;\n const toolCallId = callId ?? fallbackId;\n if (rawCallId !== undefined && callId === undefined) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n if (\n call.partialArgs !== undefined ||\n call.partial_args !== undefined ||\n call.willContinue !== undefined ||\n call.will_continue !== undefined\n ) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n toolCallId,\n usage,\n });\n }\n const name = call.name;\n if (!isNonblankString(name)) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n const args = call.args;\n if (!isPlainObject(args) || !isJsonValue(args)) {\n throw invalidGeminiToolCallArguments(toolCallId, usage);\n }\n\n const normalized: GeminiFunctionCall = {\n toolCallId,\n name,\n args,\n partIndex,\n };\n const signature = thoughtSignatureFrom(part) ?? thoughtSignatureFrom(call);\n if (callId !== undefined) {\n return signature === undefined\n ? { ...normalized, callId }\n : { ...normalized, callId, signature };\n }\n return signature === undefined ? normalized : { ...normalized, signature };\n}\n\nfunction candidateParts(response: Record<string, unknown>, usage?: Usage): IndexedGeminiPart[] {\n const candidate = primaryGeminiCandidate(response);\n if (candidate === undefined || candidate.content === undefined) {\n return [];\n }\n if (!isPlainObject(candidate.content)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts === undefined) return [];\n if (!Array.isArray(candidate.content.parts)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts.some((part) => !isPlainObject(part))) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n return candidate.content.parts.map((part, index) => ({\n index,\n part: part as Record<string, unknown>,\n }));\n}\n\nfunction primaryGeminiCandidate(\n response: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (response.candidates === undefined) return undefined;\n if (!Array.isArray(response.candidates)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidates = response.candidates;\n if (\n candidates.some(\n (candidate) =>\n !isPlainObject(candidate) ||\n (candidate.index !== undefined &&\n (!Number.isSafeInteger(candidate.index) || (candidate.index as number) < 0)),\n )\n ) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const primaryCandidates = candidates.filter(\n (candidate): candidate is Record<string, unknown> =>\n isPlainObject(candidate) && candidate.index === 0,\n );\n if (primaryCandidates.length === 1) {\n return primaryCandidates[0];\n }\n if (primaryCandidates.length > 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n if (candidates.length === 0) return undefined;\n if (candidates.length !== 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidate = candidates[0] as Record<string, unknown>;\n if (candidate.index !== undefined && candidate.index !== 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n return candidate;\n}\n\nfunction providerFinishReasonFromGeminiResponse(\n response: Record<string, unknown>,\n): string | undefined {\n const candidateFinishReason = stringFrom(primaryGeminiCandidate(response)?.finishReason);\n if (candidateFinishReason !== undefined) return candidateFinishReason;\n const promptFeedback = response.promptFeedback ?? response.prompt_feedback;\n if (promptFeedback === undefined) return undefined;\n if (!isPlainObject(promptFeedback)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n const blockReason = promptFeedback.blockReason ?? promptFeedback.block_reason;\n if (blockReason === undefined) return undefined;\n if (typeof blockReason !== \"string\" || blockReason.length === 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n return blockReason;\n}\n\nfunction hasGeminiCandidatePayload(response: Record<string, unknown>): boolean {\n return Array.isArray(response.candidates) && response.candidates.length > 0;\n}\n\nfunction hasGeminiFunctionCallMarker(\n response: Record<string, unknown>,\n parts: readonly IndexedGeminiPart[],\n): boolean {\n if (parts.some(({ part }) => ownDataProperty(part, \"functionCall\") !== undefined)) {\n return true;\n }\n if (hasGeminiCandidatePayload(response)) return false;\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n return (\n (Array.isArray(camelCaseCalls) && camelCaseCalls.length > 0) ||\n (Array.isArray(snakeCaseCalls) && snakeCaseCalls.length > 0)\n );\n}\n\nfunction deterministicGeminiToolCallId(partIndex: number): string {\n return `gemini-tool-${partIndex.toString()}`;\n}\n\nfunction toolCallFromGeminiFunctionCall(\n call: GeminiFunctionCall,\n): Extract<AssistantContentPart, { type: \"tool-call\" }> {\n let toolCall: Extract<AssistantContentPart, { type: \"tool-call\" }> = {\n type: \"tool-call\",\n toolCallId: call.toolCallId,\n toolName: call.name,\n input: call.args,\n };\n if (call.callId !== undefined) toolCall = { ...toolCall, callId: call.callId };\n if (call.signature !== undefined) toolCall = { ...toolCall, signature: call.signature };\n return toolCall;\n}\n\nfunction mergeGeminiStreamToolCalls(\n response: CompletionResponse,\n toolCalls: readonly Extract<AssistantContentPart, { type: \"tool-call\" }>[],\n): CompletionResponse {\n if (toolCalls.length === 0) return response;\n const finalIds = new Set(\n response.choice.flatMap((part) => (part.type === \"tool-call\" ? [part.toolCallId] : [])),\n );\n const missing = toolCalls.filter((toolCall) => !finalIds.has(toolCall.toolCallId));\n return missing.length === 0\n ? response\n : { ...response, choice: [...response.choice, ...missing] };\n}\n\nfunction assertSafeGeminiToolFinishReason(value: string, usage: Usage): void {\n const error = geminiToolFinishError(value, true, usage);\n if (error !== undefined) throw error;\n}\n\nfunction geminiToolFinishError(\n value: string | undefined,\n hasToolCalls: boolean,\n usage: Usage,\n): CompletionProviderOutputError | undefined {\n if (value === \"MALFORMED_FUNCTION_CALL\") {\n return new CompletionProviderOutputError({ kind: \"malformed-tool-arguments\", usage });\n }\n if (value === \"UNEXPECTED_TOOL_CALL\" || value === \"TOO_MANY_TOOL_CALLS\") {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (!hasToolCalls) return undefined;\n if (value === undefined) {\n return new CompletionProviderOutputError({ kind: \"incomplete-tool-call\", usage });\n }\n const finishReason = geminiFinishReason(value, true);\n if (finishReason === \"tool-calls\") return undefined;\n if (finishReason === \"length\") {\n return new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n return new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction assertSafeGeminiCompletionResponse(response: CompletionResponse): void {\n const toolCalls = response.choice.filter(\n (part): part is Extract<AssistantContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (toolCalls.length > 0) {\n if (response.finishReason === undefined) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n usage: response.usage,\n });\n }\n assertNormalizedGeminiToolFinishReason(response.finishReason, response.usage);\n } else if (toolCalls.length === 0 && response.finishReason === \"tool-calls\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: response.finishReason,\n usage: response.usage,\n });\n }\n\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const toolCall of toolCalls) {\n if (toolCallIds.has(toolCall.toolCallId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n toolCallIds.add(toolCall.toolCallId);\n if (toolCall.callId !== undefined) {\n if (callIds.has(toolCall.callId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n callIds.add(toolCall.callId);\n }\n }\n}\n\nfunction assertDistinctGeminiFunctionCalls(\n calls: readonly GeminiFunctionCall[],\n usage: Usage,\n): void {\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const call of calls) {\n if (toolCallIds.has(call.toolCallId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n toolCallIds.add(call.toolCallId);\n if (call.callId !== undefined) {\n if (callIds.has(call.callId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n callIds.add(call.callId);\n }\n }\n}\n\nfunction assertNormalizedGeminiToolFinishReason(\n finishReason: CompletionFinishReason,\n usage: Usage,\n): void {\n if (finishReason === \"stop\" || finishReason === \"tool-calls\") return;\n if (finishReason === \"length\") {\n throw new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n throw new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction geminiProviderOutputErrorWithUsage(\n error: CompletionProviderOutputError,\n usage: Usage,\n): CompletionProviderOutputError {\n if (error.kind === \"truncated-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"length\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.kind === \"filtered-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"content-filter\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.finishReason === \"length\" || error.finishReason === \"content-filter\") {\n throw error;\n }\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: error.finishReason,\n toolCallId: error.toolCallId,\n usage,\n });\n}\n\nfunction invalidGeminiToolCall(toolCallId: string, usage: Usage): CompletionProviderOutputError {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", toolCallId, usage });\n}\n\nfunction invalidGeminiToolCallArguments(\n toolCallId: string,\n usage: Usage,\n): CompletionProviderOutputError {\n return new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId,\n usage,\n });\n}\n\nfunction ownDataProperty(value: Record<string, unknown>, key: string): unknown {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isNonblankString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction usageFromGemini(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const promptInputTokens = numberFrom(raw.promptTokenCount);\n const toolInputTokens = numberFrom(raw.toolUsePromptTokenCount);\n const inputTokens = promptInputTokens + toolInputTokens;\n const candidateOutputTokens = numberFrom(raw.candidatesTokenCount);\n const reasoningOutputTokens = numberFrom(raw.thoughtsTokenCount);\n const outputTokens = candidateOutputTokens + reasoningOutputTokens;\n const cachedInputTokens = Math.min(promptInputTokens, numberFrom(raw.cachedContentTokenCount));\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n details: {\n input: promptInputTokens - cachedInputTokens,\n input_cached_tokens: cachedInputTokens,\n input_tool_use_tokens: toolInputTokens,\n output: candidateOutputTokens,\n output_reasoning_tokens: reasoningOutputTokens,\n total: totalTokens,\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nfunction stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction thoughtSignatureFrom(value: Record<string, unknown>): string | undefined {\n return stringFrom(value.thoughtSignature) ?? stringFrom(value.thought_signature);\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n argumentsMode?: ToolCallArgumentsMode | undefined;\n signature?: string | undefined;\n },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n if (values.argumentsMode !== undefined) event.argumentsMode = values.argumentsMode;\n if (values.signature !== undefined) event.signature = values.signature;\n return event;\n}\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport function orderedRequestMessages(request: CompletionRequest): MessageType[] {\n const messages: MessageType[] = [];\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","export function disableGeminiNativeRetries(\n config: Record<string, unknown>,\n): Record<string, unknown> {\n const httpOptions = isPlainObject(config.httpOptions) ? config.httpOptions : {};\n const retryOptions = isPlainObject(httpOptions.retryOptions) ? httpOptions.retryOptions : {};\n return {\n ...config,\n httpOptions: {\n ...httpOptions,\n retryOptions: {\n ...retryOptions,\n attempts: 1,\n },\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import {\n defineCompletionModelControls,\n type NoCompletionModelControls,\n type ReasoningEffortControls,\n} from \"@anvia/core/completion\";\nimport type { GeminiCompletionModelId } from \"./models\";\n\nexport const GEMINI_REASONING_EFFORTS = [\"minimal\", \"low\", \"medium\", \"high\"] as const;\n\nexport type GeminiReasoningEffort = (typeof GEMINI_REASONING_EFFORTS)[number];\nexport type GeminiReasoningControls = ReasoningEffortControls<GeminiReasoningEffort>;\n\ntype AllLevelModel =\n | \"gemini-3-flash-preview\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.5-flash\"\n | \"gemini-3.5-flash-lite\"\n | \"gemini-3.6-flash\";\ntype LowMediumHighModel =\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-pro\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.7-flash\";\ntype MinimalHighModel = \"gemini-3.1-flash-lite-image\";\ntype LowHighModel = \"gemini-3-pro-preview\";\n\nexport type GeminiControlsFor<ModelId extends GeminiCompletionModelId> =\n ModelId extends AllLevelModel\n ? GeminiReasoningControls\n : ModelId extends LowMediumHighModel\n ? ReasoningEffortControls<\"low\" | \"medium\" | \"high\">\n : ModelId extends MinimalHighModel\n ? ReasoningEffortControls<\"minimal\" | \"high\">\n : ModelId extends LowHighModel\n ? ReasoningEffortControls<\"low\" | \"high\">\n : NoCompletionModelControls;\n\nconst ALL_LEVEL_HIGH_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"high\");\nconst ALL_LEVEL_MEDIUM_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"medium\");\nconst ALL_LEVEL_MINIMAL_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"minimal\");\nconst LOW_MEDIUM_HIGH_CONTROLS = reasoningControls([\"low\", \"medium\", \"high\"] as const);\nconst LOW_MEDIUM_HIGH_DEFAULT_HIGH_CONTROLS = reasoningControls(\n [\"low\", \"medium\", \"high\"] as const,\n \"high\",\n);\nconst LOW_MEDIUM_HIGH_DEFAULT_MEDIUM_CONTROLS = reasoningControls(\n [\"low\", \"medium\", \"high\"] as const,\n \"medium\",\n);\nconst MINIMAL_HIGH_CONTROLS = reasoningControls([\"minimal\", \"high\"] as const, \"minimal\");\nconst LOW_HIGH_CONTROLS = reasoningControls([\"low\", \"high\"] as const, \"high\");\n\nexport function geminiControlsForModel(modelId: string): GeminiReasoningControls | undefined {\n if (ALL_LEVEL_HIGH_MODELS.has(modelId)) return ALL_LEVEL_HIGH_CONTROLS;\n if (ALL_LEVEL_MEDIUM_MODELS.has(modelId)) return ALL_LEVEL_MEDIUM_CONTROLS;\n if (ALL_LEVEL_MINIMAL_MODELS.has(modelId)) return ALL_LEVEL_MINIMAL_CONTROLS;\n if (GEMINI_2_5_MODELS.has(modelId)) return LOW_MEDIUM_HIGH_CONTROLS;\n if (GEMINI_PRO_MODELS.has(modelId)) return LOW_MEDIUM_HIGH_DEFAULT_HIGH_CONTROLS;\n if (modelId === \"gemini-3.7-flash\") return LOW_MEDIUM_HIGH_DEFAULT_MEDIUM_CONTROLS;\n if (modelId === \"gemini-3.1-flash-lite-image\") return MINIMAL_HIGH_CONTROLS;\n if (modelId === \"gemini-3-pro-preview\") return LOW_HIGH_CONTROLS;\n return undefined;\n}\n\nconst ALL_LEVEL_HIGH_MODELS = new Set<string>([\"gemini-3-flash-preview\"]);\nconst ALL_LEVEL_MEDIUM_MODELS = new Set<string>([\"gemini-3.5-flash\", \"gemini-3.6-flash\"]);\nconst ALL_LEVEL_MINIMAL_MODELS = new Set<string>([\n \"gemini-3.1-flash-lite\",\n \"gemini-3.1-flash-lite-preview\",\n \"gemini-3.5-flash-lite\",\n]);\nconst GEMINI_2_5_MODELS = new Set<string>([\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-pro\",\n]);\nconst GEMINI_PRO_MODELS = new Set<string>([\n \"gemini-3.1-pro-preview\",\n \"gemini-3.1-pro-preview-customtools\",\n]);\n\nfunction reasoningControls<const Efforts extends readonly GeminiReasoningEffort[]>(\n efforts: Efforts,\n defaultValue?: Efforts[number],\n): ReasoningEffortControls<Efforts[number]> {\n return defineCompletionModelControls({\n reasoningEffort: {\n type: \"select\",\n label: \"Reasoning effort\",\n description: \"Controls how much reasoning the model applies before responding.\",\n options: efforts,\n ...(defaultValue === undefined ? {} : { defaultValue }),\n },\n });\n}\n","import type { Embedding, EmbeddingModel, ModelCallOptions } from \"@anvia/core/embeddings\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiEmbeddingModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport type GeminiEmbeddingTaskType =\n | \"TASK_TYPE_UNSPECIFIED\"\n | \"RETRIEVAL_QUERY\"\n | \"RETRIEVAL_DOCUMENT\"\n | \"SEMANTIC_SIMILARITY\"\n | \"CLASSIFICATION\"\n | \"CLUSTERING\"\n | \"QUESTION_ANSWERING\"\n | \"FACT_VERIFICATION\"\n | \"CODE_RETRIEVAL_QUERY\";\n\nexport type GeminiEmbeddingModelOptions = {\n modelId: GeminiEmbeddingModelId;\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n taskType?: GeminiEmbeddingTaskType | undefined;\n title?: string | undefined;\n};\n\nexport class GeminiEmbeddingModel implements EmbeddingModel {\n readonly provider = \"gemini\";\n readonly modelId: GeminiEmbeddingModelId;\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly taskType: GeminiEmbeddingTaskType | undefined;\n private readonly title: string | undefined;\n\n constructor(\n private readonly client: GoogleGenAI,\n options: GeminiEmbeddingModelOptions,\n ) {\n this.modelId = options.modelId;\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.taskType = options.taskType;\n this.title = options.title;\n }\n\n async embedTexts(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch, options)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const config = { ...this.embeddingConfig() };\n if (options?.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.client.models.embedContent({\n model: this.modelId,\n contents: texts,\n config: disableGeminiNativeRetries(config),\n } as never);\n const rawEmbeddings = embeddingsFromResponse(response);\n if (rawEmbeddings.length !== texts.length) {\n throw new Error(\n `Embedding response length ${rawEmbeddings.length} did not match input length ${texts.length}`,\n );\n }\n\n return rawEmbeddings.map((vector, index) => ({\n document: texts[index] as string,\n vector,\n }));\n }\n\n private embeddingConfig(): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n if (this.dimensions !== undefined) config.outputDimensionality = this.dimensions;\n if (this.taskType !== undefined) config.taskType = this.taskType;\n if (this.title !== undefined) config.title = this.title;\n return config;\n }\n}\n\nfunction embeddingsFromResponse(response: unknown): number[][] {\n const raw = response as Record<string, unknown>;\n if (Array.isArray(raw.embeddings)) {\n return raw.embeddings.map((embedding, index) => vectorFromEmbedding(embedding, index));\n }\n if (raw.embedding !== undefined) {\n return [vectorFromEmbedding(raw.embedding, 0)];\n }\n return [];\n}\n\nfunction vectorFromEmbedding(embedding: unknown, position: number): number[] {\n if (!isObject(embedding) || !isNumberArray(embedding.values)) {\n throw new Error(`Invalid Gemini embedding response vector at position ${position}.`);\n }\n return embedding.values;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"number\");\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResult,\n ModelCallOptions,\n} from \"@anvia/core/image-generation\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiGenerateContentImageModelId, GeminiGenerateImagesModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport const GEMINI_2_5_FLASH_IMAGE = \"gemini-2.5-flash-image\";\nexport const GEMINI_3_1_FLASH_IMAGE = \"gemini-3.1-flash-image\";\nexport const GEMINI_3_1_FLASH_LITE_IMAGE = \"gemini-3.1-flash-lite-image\";\nexport const GEMINI_3_PRO_IMAGE = \"gemini-3-pro-image\";\nexport const GEMINI_3_PRO_IMAGE_PREVIEW = \"gemini-3-pro-image-preview\";\nexport const IMAGEN_4_GENERATE = \"imagen-4.0-generate-001\";\n\nexport class GeminiImageGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateContentImageModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const providerImageConfig = isPlainObject(providerConfig.imageConfig)\n ? providerConfig.imageConfig\n : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n responseModalities: [\"TEXT\", \"IMAGE\"],\n imageConfig: {\n ...providerImageConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n },\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n contents: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateContent(params as never);\n return nativeImageResponseFromGemini(response);\n }\n}\n\nexport class GeminiImagenGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateImagesModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n prompt: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateImages(params as never);\n return imagenResponseFromGemini(response);\n }\n}\n\nexport function nativeImageResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n const images = candidates.flatMap((candidate): GeneratedImage[] => {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n return [];\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n return parts.flatMap((part): GeneratedImage[] => {\n if (!isPlainObject(part) || !isPlainObject(part.inlineData)) {\n return [];\n }\n const data = part.inlineData.data;\n if (typeof data !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(data),\n mediaType:\n typeof part.inlineData.mimeType === \"string\" ? part.inlineData.mimeType : \"image/png\",\n },\n ];\n });\n });\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no inline image data.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function imagenResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const images = (Array.isArray(raw.generatedImages) ? raw.generatedImages : []).flatMap(\n (item): GeneratedImage[] => {\n if (!isPlainObject(item) || !isPlainObject(item.image)) {\n return [];\n }\n const imageBytes = item.image.imageBytes;\n if (typeof imageBytes !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(imageBytes),\n mediaType: typeof item.image.mimeType === \"string\" ? item.image.mimeType : \"image/png\",\n },\n ];\n },\n );\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no base64 images.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function aspectRatio(width: number, height: number): string {\n const normalizedWidth = Math.max(1, Math.trunc(width));\n const normalizedHeight = Math.max(1, Math.trunc(height));\n const divisor = gcd(normalizedWidth, normalizedHeight);\n return `${normalizedWidth / divisor}:${normalizedHeight / divisor}`;\n}\n\nfunction gcd(left: number, right: number): number {\n let a = left;\n let b = right;\n while (b !== 0) {\n const next = a % b;\n a = b;\n b = next;\n }\n return a;\n}\n\nfunction decodeBase64Image(value: string): Uint8Array {\n const normalized = value.replace(/\\s/g, \"\").replace(/=+$/, \"\");\n const bytes = Buffer.from(value, \"base64\");\n const roundTrip = bytes.toString(\"base64\").replace(/=+$/, \"\");\n if (normalized.length === 0 || bytes.length === 0 || roundTrip !== normalized) {\n throw new Error(\"Gemini image generation response contained invalid base64 image data.\");\n }\n return new Uint8Array(bytes);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownGeminiCompletionModelId =\n | \"gemini-2.0-flash\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-image\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-flash-preview-tts\"\n | \"gemini-2.5-pro\"\n | \"gemini-2.5-pro-preview-tts\"\n | \"gemini-3-flash-preview\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3-pro-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.5-flash\"\n | \"gemini-3.5-flash-lite\"\n | \"gemini-3.6-flash\"\n | \"gemini-3.7-flash\"\n | \"gemini-3-pro-image\"\n | \"gemini-flash-latest\"\n | \"gemini-flash-lite-latest\"\n | \"gemma-4-26b-a4b-it\"\n | \"gemma-4-31b-it\";\n\nexport type GeminiCompletionModelId = ModelId<KnownGeminiCompletionModelId>;\n\nconst CONTEXT_1M_64K = {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 65_536,\n};\n\nexport const GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"gemini-2.0-flash\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.0-flash-lite\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.5-flash\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-image\": {\n contextWindow: 32_768,\n maxInputTokens: 32_768,\n maxOutputTokens: 32_768,\n },\n \"gemini-2.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-2.5-pro\": CONTEXT_1M_64K,\n \"gemini-2.5-pro-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-3-flash-preview\": CONTEXT_1M_64K,\n \"gemini-3-pro-image-preview\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-image-preview\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 65_536,\n },\n \"gemini-3.1-flash-image\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3.1-flash-lite-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 4_096,\n },\n \"gemini-3.1-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-lite-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview-customtools\": CONTEXT_1M_64K,\n \"gemini-3.5-flash\": CONTEXT_1M_64K,\n \"gemini-3.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.6-flash\": CONTEXT_1M_64K,\n \"gemini-3.7-flash\": CONTEXT_1M_64K,\n \"gemini-3-pro-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 32_768,\n },\n \"gemini-flash-latest\": CONTEXT_1M_64K,\n \"gemini-flash-lite-latest\": CONTEXT_1M_64K,\n \"gemma-4-26b-a4b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n \"gemma-4-31b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n} satisfies Readonly<Record<KnownGeminiCompletionModelId, ModelContextLimits>>;\n\nexport type KnownGeminiEmbeddingModelId =\n | \"gemini-embedding-001\"\n | \"gemini-embedding-2\"\n | \"gemini-embedding-2-preview\";\n\nexport type GeminiEmbeddingModelId = ModelId<KnownGeminiEmbeddingModelId>;\n\nexport type KnownGeminiGenerateContentImageModelId =\n | \"gemini-2.5-flash-image\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3-pro-image\";\n\nexport type KnownGeminiGenerateImagesModelId = \"imagen-4.0-generate-001\";\n\nexport type GeminiGenerateContentImageModelId = ModelId<KnownGeminiGenerateContentImageModelId>;\nexport type GeminiGenerateImagesModelId = ModelId<KnownGeminiGenerateImagesModelId>;\n\nexport type GeminiTranscriptionModelId = GeminiCompletionModelId;\n","import { Buffer } from \"node:buffer\";\nimport type {\n ModelCallOptions,\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResult,\n} from \"@anvia/core/transcription\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiTranscriptionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nconst TRANSCRIPTION_PREAMBLE =\n \"Transcribe the provided audio exactly. Do not add additional information.\";\n\nexport class GeminiTranscriptionModel implements TranscriptionModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiTranscriptionModelId,\n ) {}\n\n async transcription(\n request: TranscriptionRequest,\n options?: ModelCallOptions,\n ): Promise<TranscriptionResult<unknown>> {\n const config: Record<string, unknown> = isPlainObject(request.providerOptions)\n ? { ...request.providerOptions }\n : {};\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n\n const response = await this.client.models.generateContent({\n model: this.modelId,\n contents: [\n {\n role: \"user\",\n parts: [\n {\n inlineData: {\n mimeType: request.mediaType ?? mimeTypeFromFilename(request.filename),\n data: Buffer.from(request.data).toString(\"base64\"),\n },\n },\n ],\n },\n ],\n config: disableGeminiNativeRetries({\n ...config,\n systemInstruction:\n request.prompt === undefined\n ? TRANSCRIPTION_PREAMBLE\n : `${TRANSCRIPTION_PREAMBLE}\\n\\n${request.prompt}`,\n }),\n } as never);\n\n return {\n text: textFromGenerateContentResponse(response),\n rawResponse: response,\n };\n }\n}\n\nexport function textFromGenerateContentResponse(response: unknown): string {\n const raw = response as Record<string, unknown>;\n if (typeof raw.text === \"string\") {\n return raw.text;\n }\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n for (const candidate of candidates) {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n continue;\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n for (const part of parts) {\n if (isPlainObject(part) && typeof part.text === \"string\") {\n return part.text;\n }\n }\n }\n throw new Error(\"Gemini transcription response contained no text.\");\n}\n\nfunction mimeTypeFromFilename(filename: string): string {\n const lower = filename.toLowerCase();\n if (lower.endsWith(\".wav\")) return \"audio/wav\";\n if (lower.endsWith(\".aac\")) return \"audio/aac\";\n if (lower.endsWith(\".ogg\")) return \"audio/ogg\";\n if (lower.endsWith(\".flac\")) return \"audio/flac\";\n if (lower.endsWith(\".m4a\")) return \"audio/m4a\";\n if (lower.endsWith(\".opus\")) return \"audio/opus\";\n return \"audio/mpeg\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,EAEE,iCAAAA;AAAA,EAEA;AAAA,OAEK;AAGP;AAAA,EAGE;AAAA,OACK;AAEP,SAAS,mBAA4C;;;ACdrD;AAAA,EAEE;AAAA,EAMA;AAAA,EAGA;AAAA,EAUA;AAAA,EAEA;AAAA,OACK;;;ACzBP;AAAA,EAGE;AAAA,OACK;AAEA,SAAS,uBAAuB,SAA2C;AAChF,QAAM,WAA0B,CAAC;AACjC,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,QAAM,YAAY,mBAAmB,QAAQ,SAAS;AACtD,MAAI,cAAc,QAAW;AAC3B,aAAS,KAAK,SAAS;AAAA,EACzB;AACA,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,SAAO;AACT;;;ACfO,SAAS,2BACd,QACyB;AACzB,QAAM,cAAc,cAAc,OAAO,WAAW,IAAI,OAAO,cAAc,CAAC;AAC9E,QAAM,eAAe,cAAc,YAAY,YAAY,IAAI,YAAY,eAAe,CAAC;AAC3F,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,GAAG;AAAA,MACH,cAAc;AAAA,QACZ,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;AFwCO,IAAM,wBAAN,MAEkD;AAAA,EAYvD,YACmB,QACR,SACA,eACA,UACT;AAJiB;AACR;AACA;AACA;AAAA,EACR;AAAA,EAJgB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAfF,WAAW;AAAA,EACX,eAA4C;AAAA,IACnD,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EASQ,YAA6C;AACnD,WAAO,KAAK,kBAAkB,SAC1B,SACA,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK,cAAc;AAAA,EAC3D;AAAA,EAEA,aACE,SACA,UAA4C,CAAC,GACjC;AACZ,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,WAAO,uBAAuB,QAAQ,SAAS,OAAO;AAAA,EACxD;AAAA,EAEA,MAAM,WACJ,SACA,SAC6B;AAC7B,qCAAiC,MAAM,OAAO;AAC9C,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,qBAAiB,QAAQ,OAAO;AAChC,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB,MAAe;AACzE,WAAO,iBAAiB,kCAAkC,QAAQ,GAAG,KAAK,UAAU,CAAC;AAAA,EACvF;AAAA,EAEA,OAAO,iBACL,SACA,SAC2C;AAC3C,qCAAiC,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AACnE,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,qBAAiB,QAAQ,OAAO;AAChC,UAAM,SAAS,MAAM,KAAK,OAAO,OAAO,sBAAsB,MAAe;AAC7E,UAAM,cAAc,IAAI,4BAA4B;AACpD,qBAAiB,SAAS,QAA6C;AACrE,YAAM,UAAU,oCAAoC,KAAK;AACzD,kBAAY,OAAO,OAAO,OAAO;AACjC,iBAAW,SAAS,QAAQ,QAAQ;AAClC,YAAI,MAAM,SAAS,SAAS;AAC1B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,gBAAY,eAAe;AAC3B,UAAM,aAAa,YAAY,WAAW;AAC1C,QAAI,eAAe,QAAW;AAC5B,YAAM;AAAA,QACJ,GAAG;AAAA,QACH,UAAU,iBAAiB,WAAW,UAAU,KAAK,UAAU,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,8BACd,SACA,SACsB;AACtB,QAAM,WAAW,gBAAgB,OAAO;AACxC,MACE,QAAQ,oBAAoB,WAC3B,CAACC,eAAc,QAAQ,eAAe,KAAK,CAAC,YAAY,QAAQ,eAAe,IAChF;AACA,UAAM,IAAI,UAAU,+CAA+C;AAAA,EACrE;AACA,QAAM,kBAAkB,QAAQ,mBAAmB,CAAC;AACpD,QAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,MAAI,wBAAwB,UAAa,CAACA,eAAc,mBAAmB,GAAG;AAC5E,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AACA,QAAM,iBAAiB,wBAAwB,SAAY,CAAC,IAAI,EAAE,GAAG,oBAAoB;AACzF,SAAO,eAAe;AACtB,QAAM,eAA6B;AAAA,IACjC,GAAG;AAAA,IACH,GAAG,aAAa,SAAS,QAAQ;AAAA,EACnC;AACA,QAAM,kBAAkB,QAAQ,UAAU;AAC1C,MAAI,oBAAoB,QAAW;AACjC,UAAM,iBAAiBA,eAAc,eAAe,cAAc,IAC9D,EAAE,GAAG,eAAe,eAAe,IACnC,CAAC;AACL,QAAI,QAAQ,WAAW,YAAY,GAAG;AACpC,aAAO,eAAe;AACtB,mBAAa,iBAAiB;AAAA,QAC5B,GAAG;AAAA,QACH,gBAAgB,uBAAuB,eAAe;AAAA,MACxD;AAAA,IACF,OAAO;AACL,aAAO,eAAe;AACtB,mBAAa,iBAAiB,EAAE,GAAG,gBAAgB,eAAe,gBAAgB;AAAA,IACpF;AAAA,EACF;AACA,QAAM,SAAS,2BAA2B,YAAY;AACtD,QAAM,SAA+B;AAAA,IACnC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU,yBAAyB,QAAQ;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,iBAAiC;AAC/D,MAAI,oBAAoB,MAAO,QAAO;AACtC,MAAI,oBAAoB,SAAU,QAAO;AACzC,MAAI,oBAAoB,OAAQ,QAAO;AACvC,QAAM,IAAI,UAAU,4CAA4C,eAAe,EAAE;AACnF;AAEA,SAAS,iBACP,QACA,SACM;AACN,MAAI,SAAS,gBAAgB,OAAW;AACxC,QAAM,SAASA,eAAc,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC;AAC/D,SAAO,SAAS,EAAE,GAAG,QAAQ,aAAa,QAAQ,YAAY;AAChE;AAEA,SAAS,uBACP,QACA,SACA,SACY;AACZ,QAAM,SAASA,eAAc,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC;AAC/D,SAAO,kBAAkB;AAAA,IACvB,UAAU;AAAA,IACV,KAAK,QAAQ,WAAW,OAAO,iCAAiC;AAAA,IAChE,QAAQ,QAAQ,WAAW;AAAA,IAC3B,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,IACzD,eAAe,OAAO,KAAK,MAAM,EAAE,KAAK;AAAA,IACxC,cAAc,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,SAAS,SAAS;AAAA,IACxE,YAAY,OAAO,KAAK,MAAM,EAAE,KAAK;AAAA,IACrC,WAAW,QAAQ,MAAM;AAAA,IACzB,WAAW,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,IAChD,sBAAsB,OAAO,sBAAsB;AAAA,IACnD,iBAAiB,QAAQ,iBAAiB;AAAA,IAC1C,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB,YAAY,kBAAkB,QAAQ,UAAU;AAAA,IAChD,oBAAoBA,eAAc,QAAQ,eAAe,IACrD,OAAO,KAAK,QAAQ,eAAe,EAAE,KAAK,IAC1C;AAAA,EACN,CAAC;AACH;AAEA,SAAS,kBAAkB,YAA2D;AACpF,MAAI,eAAe,UAAa,OAAO,eAAe,UAAU;AAC9D,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,WAAW,MAAM,MAAM,WAAW,KAAK;AACxD;AAEA,SAAS,kBAAkB,QAA6C;AACtE,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,CAAC,YAAY,KAAK,GAAG;AACvB,eAAO,CAAC;AAAA,MACV;AACA,aAAO,CAAC,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,SAA2C;AAClE,SAAO,uBAAuB,OAAO;AACvC;AAEA,SAAS,aAAa,SAA4B,UAAuC;AACvF,QAAM,SAAuB,CAAC;AAC9B,QAAM,oBAAoB,sBAAsB,SAAS,QAAQ;AACjE,MAAI,sBAAsB,QAAW;AACnC,WAAO,oBAAoB;AAAA,EAC7B;AACA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO,cAAc,QAAQ;AAAA,EAC/B;AACA,MAAI,QAAQ,cAAc,QAAW;AACnC,WAAO,kBAAkB,QAAQ;AAAA,EACnC;AACA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,QAAQ,CAAC,EAAE,sBAAsB,QAAQ,MAAM,IAAI,sBAAsB,EAAE,CAAC;AAAA,EACrF;AACA,MAAI,QAAQ,eAAe,QAAW;AACpC,WAAO,aAAa,mBAAmB,QAAQ,UAAU;AAAA,EAC3D;AACA,MAAI,QAAQ,iBAAiB,QAAW;AACtC,WAAO,mBAAmB;AAC1B,WAAO,qBAAqB,QAAQ;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,sBACP,SACA,UACoB;AACpB,QAAM,iBAAiB,SAAS;AAAA,IAAQ,CAAC,YACvC,QAAQ,SAAS,WAAW,CAAC,QAAQ,OAAO,IAAI,CAAC;AAAA,EACnD;AACA,MAAI,QAAQ,iBAAiB,QAAW;AACtC,mBAAe,QAAQ,QAAQ,YAAY;AAAA,EAC7C;AACA,SAAO,eAAe,WAAW,IAAI,SAAY,eAAe,KAAK,MAAM;AAC7E;AAEO,SAAS,yBAAyB,UAA0C;AACjF,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,QAAM,WAA4B,CAAC;AAEnC,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,UAAU;AAC7B;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAMC,WAAU,gCAAgC,OAAO;AACvD,iBAAW,QAAQ,OAAO,QAAQ,YAAY,WAAW,CAAC,IAAI,QAAQ,SAAS;AAC7E,YAAI,KAAK,SAAS,aAAa;AAC7B,wBAAc,IAAI,KAAK,YAAY,KAAK,QAAQ;AAChD,cAAI,KAAK,WAAW,QAAW;AAC7B,0BAAc,IAAI,KAAK,QAAQ,KAAK,QAAQ;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AACA,UAAIA,SAAQ,MAAM,SAAS,GAAG;AAC5B,iBAAS,KAAKA,QAAO;AAAA,MACvB;AACA;AAAA,IACF;AAEA,UAAM,UACJ,QAAQ,SAAS,SACb,2BAA2B,SAAS,aAAa,IACjD,2BAA2B,OAAO;AACxC,QAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,eAAS,KAAK,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BACP,SACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OACE,OAAO,QAAQ,YAAY,WACvB,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC,IAC1B,QAAQ,QAAQ,IAAI,uBAAuB;AAAA,EACnD;AACF;AAEA,SAAS,2BACP,SACA,eACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,QAAQ,QAAQ,IAAI,CAAC,YAAY;AACtC,UAAI,QAAQ,SAAS,eAAe;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO,wBAAwB,SAAS,aAAa;AAAA,IACvD,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gCACP,SACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OACE,OAAO,QAAQ,YAAY,WACvB,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC,IAC1B,QAAQ,QAAQ,QAAQ,CAAC,YAA0B;AACjD,UAAI,QAAQ,SAAS,QAAQ;AAC3B,cAAM,OAAmB,EAAE,MAAM,QAAQ,KAAK;AAC9C,YAAI,QAAQ,cAAc,QAAW;AACnC,eAAK,mBAAmB,QAAQ;AAAA,QAClC;AACA,eAAO,CAAC,IAAI;AAAA,MACd;AACA,UAAI,QAAQ,SAAS,aAAa;AAChC,cAAM,eAAwC;AAAA,UAC5C,MAAM,QAAQ;AAAA,UACd,MAAM,QAAQ;AAAA,QAChB;AACA,YAAI,QAAQ,WAAW,QAAW;AAChC,uBAAa,KAAK,QAAQ;AAAA,QAC5B;AACA,cAAM,OAAmB,EAAE,aAAa;AACxC,YAAI,QAAQ,cAAc,QAAW;AACnC,eAAK,mBAAmB,QAAQ;AAAA,QAClC;AACA,eAAO,CAAC,IAAI;AAAA,MACd;AACA,UAAI,QAAQ,SAAS,eAAe,QAAQ,YAAY,QAAW;AACjE,eAAO,QAAQ,QAAQ,QAAQ,CAAC,cAA4B;AAC1D,cAAI,UAAU,SAAS,UAAU,UAAU,SAAS,WAAW;AAC7D,mBAAO,CAAC;AAAA,UACV;AACA,gBAAM,OAAmB,EAAE,MAAM,UAAU,MAAM,SAAS,KAAK;AAC/D,cAAI,UAAU,SAAS,UAAU,UAAU,cAAc,QAAW;AAClE,iBAAK,mBAAmB,UAAU;AAAA,UACpC;AACA,iBAAO,CAAC,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AACA,UAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,QAAQ;AACvD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO,CAAC;AAAA,IACV,CAAC;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,SAAsC;AACrE,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,EAC9B;AACA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO,yBAAyB,OAAO;AAAA,EACzC;AACA,SAAO,4BAA4B,OAAO;AAC5C;AAEA,SAAS,yBACP,SACY;AACZ,MAAI,QAAQ,MAAM,SAAS,QAAQ;AACjC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,QAAQ,aAAa;AAAA,QAC/B,MAAM,QAAQ,MAAM;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,QAAQ,MAAM;AAAA,MACvB,UAAU,QAAQ,aAAa,qBAAqB,QAAQ,MAAM,GAAG;AAAA,IACvE;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,KAAqB;AACjD,QAAM,WAAW,gBAAgB,GAAG,EAAE,YAAY;AAClD,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,OAAO,EAAG,QAAO;AACpE,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,MAAI,SAAS,SAAS,MAAM,EAAG,QAAO;AACtC,MAAI,SAAS,SAAS,MAAM,EAAG,QAAO;AACtC,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4BACP,SACY;AACZ,MAAI,QAAQ,KAAK,SAAS,QAAQ;AAChC,WAAO,EAAE,MAAM,QAAQ,KAAK,KAAK;AAAA,EACnC;AAEA,MAAI,QAAQ,KAAK,SAAS,QAAQ;AAChC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,QAAQ,KAAK;AAAA,MACtB,UAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AACF;AAEA,SAAS,wBACP,SACA,eACY;AACZ,QAAM,KAAK,QAAQ,UAAU,QAAQ;AACrC,QAAM,mBAA4C;AAAA,IAChD,MAAM,QAAQ,YAAY,cAAc,IAAI,EAAE,KAAK,QAAQ;AAAA,IAC3D,UAAU,mBAAmB,OAAO;AAAA,EACtC;AACA,MAAI,QAAQ,WAAW,QAAW;AAChC,qBAAiB,KAAK,QAAQ;AAAA,EAChC;AACA,SAAO,EAAE,iBAAiB;AAC5B;AAEA,SAAS,mBAAmB,SAAkD;AAC5E,QAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,EAAE,QAAQ,OAAO,MAAM;AAAA,EAChC;AACA,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,EAAE,SAAS,OAAO,MAAM;AAAA,EACjC;AACA,MAAI,OAAO,SAAS,gBAAgB,OAAO,SAAS,cAAc;AAChE,WAAO,EAAE,OAAO,OAAO,MAAM;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,oBAAoB;AACtC,WAAO,EAAE,OAAO,OAAO,UAAU,6BAA6B;AAAA,EAChE;AACA,SAAO;AAAA,IACL,SAAS,OAAO,MACb,IAAI,CAAC,SAAU,KAAK,SAAS,SAAS,KAAK,OAAO,SAAS,KAAK,SAAS,GAAI,EAC7E,KAAK,IAAI;AAAA,EACd;AACF;AAEA,SAAS,uBAAuB,MAAkC;AAChE,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,sBAAsB,KAAK;AAAA,EAC7B;AACF;AAEA,SAAS,mBAAmB,YAAoC;AAC9D,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,EAAE;AAAA,EACnD;AACA,MAAI,eAAe,YAAY;AAC7B,WAAO,EAAE,uBAAuB,EAAE,MAAM,MAAM,EAAE;AAAA,EAClD;AACA,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,EAAE;AAAA,EACnD;AACA,SAAO;AAAA,IACL,uBAAuB;AAAA,MACrB,MAAM;AAAA,MACN,sBAAsB,CAAC,WAAW,IAAI;AAAA,IACxC;AAAA,EACF;AACF;AAEO,SAAS,kCAAkC,UAAuC;AACvF,QAAM,MAAMD,eAAc,QAAQ,IAAI,WAAW,CAAC;AAClD,QAAM,QAAQ,gBAAgB,IAAI,aAAa;AAC/C,QAAM,QAAQ,eAAe,KAAK,KAAK;AACvC,QAAM,uBAAuB,uCAAuC,GAAG;AACvE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,4BAA4B,KAAK,KAAK;AAAA,IACtC;AAAA,EACF;AACA,MAAI,gBAAgB,OAAW,OAAM;AACrC,QAAM,SAAS,mCAAmC,KAAK,KAAK;AAE5D,QAAM,SAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf;AACA,0BAAwB,QAAQ,GAAG;AACnC,QAAM,KAAK,WAAW,IAAI,UAAU,KAAK,WAAW,IAAI,EAAE;AAC1D,MAAI,OAAO,QAAW;AACpB,WAAO,YAAY;AAAA,EACrB;AACA,qCAAmC,MAAM;AACzC,SAAO;AACT;AAEA,SAAS,wBACP,UACA,KACA,uBAAuB,OACjB;AACN,QAAM,QAAQ,uCAAuC,GAAG;AACxD,MAAI,UAAU,OAAW;AACzB,+BAA6B,UAAU,OAAO,oBAAoB;AACpE;AAEA,SAAS,6BACP,UACA,OACA,sBACM;AACN,WAAS,eAAe;AAAA,IACtB;AAAA,IACA,wBAAwB,SAAS,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,WAAW;AAAA,EAClF;AACA,WAAS,uBAAuB;AAClC;AAEA,SAAS,mBAAmB,OAAe,cAA+C;AACxF,MAAI,UAAU,aAAc,QAAO;AACnC,MACE,UAAU,YACV,UAAU,gBACV,UAAU,eACV,UAAU,wBACV,UAAU,UACV,UAAU,kBACV,UAAU,4BACV;AACA,WAAO;AAAA,EACT;AACA,MAAI,UAAU,QAAQ;AACpB,WAAO,eAAe,eAAe;AAAA,EACvC;AACA,SAAO;AACT;AAQA,SAAS,oCAAoC,OAA0C;AACrF,MAAI,CAACE,eAAc,KAAK,GAAG;AACzB,WAAO;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,WAAW,CAAC;AAAA,MACZ,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,SAAuC,CAAC;AAC9C,QAAM,QAAQ,gBAAgB,MAAM,aAAa;AACjD,QAAM,QAAQ,eAAe,OAAO,KAAK;AACzC,QAAM,uBAAuB,uCAAuC,KAAK;AACzE,QAAM,oBAAoB,4BAA4B,OAAO,KAAK;AAClE,QAAM,gBACJ,yBAAyB,SACrB,SACA,sBAAsB,sBAAsB,mBAAmB,KAAK;AAC1E,QAAM,QACJ,kBAAkB,SAAY,gCAAgC,OAAO,OAAO,KAAK,IAAI,CAAC;AACxF,QAAM,aAAa,uBAAuB,OAAO,KAAK;AACtD,MAAI,kBAAkB,UAAa,WAAW,SAAS,KAAK,MAAM,WAAW,GAAG;AAC9E,WAAO,KAAK,EAAE,MAAM,cAAc,OAAO,WAAW,CAAC;AAAA,EACvD;AACA,aAAW,EAAE,KAAK,KAAK,kBAAkB,SAAY,QAAQ,CAAC,GAAG;AAC/D,QAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,GAAG;AACzD,UAAI,KAAK,YAAY,MAAM;AACzB,eAAO,KAAK,EAAE,MAAM,mBAAmB,OAAO,KAAK,MAAM,aAAa,UAAU,CAAC;AAAA,MACnF,OAAO;AACL,eAAO,KAAK,EAAE,MAAM,cAAc,OAAO,KAAK,KAAK,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,WAAO;AAAA,MACL,cAAc,KAAK,YAAY;AAAA,QAC7B,QAAQ,KAAK;AAAA,QACb,MAAM,KAAK;AAAA,QACX,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AACA,UAAM,iBAAiB,KAAK,UAAU,KAAK,IAAI;AAC/C,QAAI,mBAAmB,QAAW;AAChC,YAAM,+BAA+B,KAAK,YAAY,KAAK;AAAA,IAC7D;AACA,WAAO;AAAA,MACL,cAAc,KAAK,YAAY;AAAA,QAC7B,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,KAAK,WAAW,MAAM,UAAU,KAAK,WAAW,MAAM,EAAE;AAC9D,MAAI,OAAO,QAAW;AACpB,WAAO,KAAK,EAAE,MAAM,cAAc,GAAG,CAAC;AAAA,EACxC;AACA,MAAIA,eAAc,MAAM,aAAa,GAAG;AACtC,QAAI,kBAAkB,QAAW;AAC/B,aAAO,KAAK,EAAE,MAAM,SAAS,UAAU,kCAAkC,KAAK,EAAE,CAAC;AAAA,IACnF,OAAO;AACL,YAAM,WAA+B,EAAE,QAAQ,CAAC,GAAG,OAAO,aAAa,MAAM;AAC7E,UAAI,yBAAyB,QAAW;AACtC,qCAA6B,UAAU,sBAAsB,IAAI;AAAA,MACnE;AACA,aAAO,KAAK,EAAE,MAAM,SAAS,SAAS,CAAC;AAAA,IACzC;AAAA,EACF;AACA,SAAO,yBAAyB,SAC5B;AAAA,IACE;AAAA,IACA,WAAW,MAAM,IAAI,8BAA8B;AAAA,IACnD;AAAA,IACA,uBAAuB,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAS;AAAA,IACrE;AAAA,EACF,IACA;AAAA,IACE;AAAA,IACA,WAAW,MAAM,IAAI,8BAA8B;AAAA,IACnD;AAAA,IACA,uBAAuB,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAS;AAAA,IACrE;AAAA,IACA;AAAA,EACF;AACN;AAEA,IAAM,8BAAN,MAAkC;AAAA,EACf,YAAY,oBAAI,IAG/B;AAAA,EACM;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,4BAA4B;AAAA,EAC5B;AAAA,EAER,OAAO,OAAgB,SAAyC;AAC9D,QAAI,QAAQ,yBAAyB,KAAK,2BAA2B;AACnE,YAAM,aAAa,QAAQ,UAAU;AAAA,QACnC,CAAC,aAAa,SAAS,WAAW;AAAA,MACpC,GAAG;AACH,YAAM,eAAe,SACjB,IAAI,8BAA8B;AAAA,QAChC,MAAM;AAAA,QACN,OAAO,KAAK,aAAa;AAAA,MAC3B,CAAC,IACD,sBAAsB,YAAY,KAAK,aAAa,CAAC;AAAA,IAC3D;AACA,QACE,KAAK,yBAAyB,WAC7B,QAAQ,qBAAqB,0BAA0B,QAAQ,MAAM,IACtE;AACA,YAAM,IAAI,8BAA8B;AAAA,QACtC,MAAM;AAAA,QACN,cAAc;AAAA,QACd,OAAO,KAAK,aAAa;AAAA,MAC3B,CAAC;AAAA,IACH;AACA,eAAW,YAAY,QAAQ,WAAW;AACxC,YAAM,WAAW,KAAK,UAAU,IAAI,SAAS,UAAU;AACvD,UAAI,aAAa,QAAW;AAC1B,YACE,SAAS,WAAW,UACpB,SAAS,WAAW,UACpB,CAAC,mBAAmB,UAAU,QAAQ,GACtC;AACA,gBAAM,sBAAsB,SAAS,YAAY,KAAK,aAAa,CAAC;AAAA,QACtE;AACA;AAAA,MACF;AACA,WAAK,UAAU,IAAI,SAAS,YAAY,QAAQ;AAAA,IAClD;AACA,SAAK,sBAAsB,QAAQ;AACnC,SAAK,8BAA8B,QAAQ;AAC3C,eAAW,SAAS,QAAQ,QAAQ;AAClC,UAAI,MAAM,SAAS,SAAS;AAC1B,aAAK,gBAAgB,MAAM;AAAA,MAC7B;AAAA,IACF;AACA,SAAK,kBAAkB,QAAQ;AAE/B,QAAI,QAAQ,yBAAyB,QAAW;AAC9C,UACE,KAAK,yBAAyB,UAC9B,KAAK,yBAAyB,QAAQ,sBACtC;AACA,cAAM,IAAI,8BAA8B;AAAA,UACtC,MAAM;AAAA,UACN,cAAc;AAAA,UACd,OAAO,KAAK,aAAa;AAAA,QAC3B,CAAC;AAAA,MACH;AACA,WAAK,uBAAuB,QAAQ;AACpC,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,QAAI,KAAK,kBAAkB,QAAW;AACpC,YAAM,mCAAmC,KAAK,eAAe,KAAK,aAAa,CAAC;AAAA,IAClF;AACA,QAAI,CAAC,KAAK,qBAAqB,KAAK,UAAU,SAAS,EAAG;AAC1D,QAAI,KAAK,yBAAyB,QAAW;AAC3C,uCAAiC,KAAK,sBAAsB,KAAK,aAAa,CAAC;AAC/E;AAAA,IACF;AACA,UAAM,aAAa,KAAK,UAAU,KAAK,EAAE,KAAK,EAAE;AAChD,UAAM,IAAI;AAAA,MACR,eAAe,SACX,EAAE,MAAM,wBAAwB,OAAO,KAAK,aAAa,EAAE,IAC3D,EAAE,MAAM,wBAAwB,YAAY,OAAO,KAAK,aAAa,EAAE;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,aAAiF;AAC/E,QAAI,WAAW,KAAK;AACpB,QAAI,aAAa,QAAW;AAC1B,UAAI,KAAK,kBAAkB,QAAW;AACpC,eAAO;AAAA,MACT;AACA,YAAM,MAAMA,eAAc,KAAK,aAAa,IAAI,KAAK,gBAAgB,CAAC;AACtE,iBAAW;AAAA,QACT,QAAQ,CAAC;AAAA,QACT,OAAO,gBAAgB,IAAI,aAAa;AAAA,QACxC,aAAa,KAAK;AAAA,MACpB;AACA,YAAM,YAAY,WAAW,IAAI,UAAU,KAAK,WAAW,IAAI,EAAE;AACjE,UAAI,cAAc,OAAW,UAAS,YAAY;AAAA,IACpD;AAEA,eAAW,2BAA2B,UAAU,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,CAAC;AAC5E,QAAI,KAAK,yBAAyB,QAAW;AAC3C,mCAA6B,UAAU,KAAK,sBAAsB,KAAK,UAAU,OAAO,CAAC;AAAA,IAC3F;AACA,uCAAmC,QAAQ;AAC3C,WAAO,EAAE,MAAM,SAAS,SAAS;AAAA,EACnC;AAAA,EAEQ,eAAsB;AAC5B,QAAI,KAAK,kBAAkB,QAAW;AACpC,aAAO,KAAK,cAAc;AAAA,IAC5B;AACA,UAAM,MAAMA,eAAc,KAAK,aAAa,IAAI,KAAK,gBAAgB,CAAC;AACtE,WAAO,gBAAgB,IAAI,aAAa;AAAA,EAC1C;AACF;AAEA,SAAS,0BAA0B,QAAwD;AACzF,SAAO,OAAO;AAAA,IACZ,CAAC,UACC,MAAM,SAAS,gBACf,MAAM,SAAS,qBACf,MAAM,SAAS,qBACf,MAAM,SAAS,eACf,MAAM,SAAS;AAAA,EACnB;AACF;AAEA,SAAS,mBACP,MACA,OACS;AACT,SACE,KAAK,aAAa,MAAM,YACxB,KAAK,WAAW,MAAM,UACtB,KAAK,cAAc,MAAM,aACzB,cAAc,KAAK,OAAO,MAAM,KAAK;AAEzC;AAEA,SAAS,cAAc,MAAiB,OAA2B;AACjE,MAAI,OAAO,GAAG,MAAM,KAAK,EAAG,QAAO;AACnC,MAAI,YAAY,IAAI,KAAK,YAAY,KAAK,GAAG;AAC3C,WACE,YAAY,IAAI,KAChB,YAAY,KAAK,KACjB,KAAK,WAAW,MAAM,UACtB,KAAK,MAAM,CAAC,OAAO,UAAU;AAC3B,YAAM,aAAa,MAAM,KAAK;AAC9B,aAAO,eAAe,UAAa,cAAc,OAAO,UAAU;AAAA,IACpE,CAAC;AAAA,EAEL;AACA,MAAI,SAAS,QAAQ,UAAU,QAAQ,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AAC5F,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,KAAK,IAAI;AACjC,QAAM,YAAY,OAAO,KAAK,KAAK;AACnC,SACE,SAAS,WAAW,UAAU,UAC9B,SAAS;AAAA,IACP,CAAC,QACC,OAAO,OAAO,OAAO,GAAG,KAAK,cAAc,KAAK,GAAG,GAAgB,MAAM,GAAG,CAAc;AAAA,EAC9F;AAEJ;AAEA,SAAS,YAAY,OAAiD;AACpE,SAAO,MAAM,QAAQ,KAAK;AAC5B;AAEA,SAAS,mCACP,UACA,OACwB;AACxB,QAAM,QAAQ,eAAe,UAAU,KAAK;AAC5C,QAAM,QAAQ,gCAAgC,UAAU,OAAO,KAAK;AACpE,MAAI,MAAM,WAAW,GAAG;AACtB,UAAMC,UAAiC,CAAC;AACxC,UAAM,OAAO,uBAAuB,UAAU,KAAK;AACnD,QAAI,KAAK,SAAS,EAAG,CAAAA,QAAO,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AACvD,IAAAA,QAAO,KAAK,GAAG,MAAM,IAAI,8BAA8B,CAAC;AACxD,WAAOA;AAAA,EACT;AAEA,QAAM,mBAAmB,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC;AAC5E,QAAM,SAAiC,CAAC;AACxC,aAAW,EAAE,OAAO,KAAK,KAAK,OAAO;AACnC,QAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,GAAG;AACzD,UAAI,KAAK,YAAY,MAAM;AACzB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,SAAS,CAAC,EAAE,MAAM,WAAW,MAAM,KAAK,KAAK,CAAC;AAAA,QAChD,CAAC;AAAA,MACH,OAAO;AACL,cAAM,YAAY,qBAAqB,IAAI;AAC3C,YAAI,OAAwD;AAAA,UAC1D,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,QACb;AACA,YAAI,cAAc,OAAW,QAAO,EAAE,GAAG,MAAM,UAAU;AACzD,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AACA,UAAM,OAAO,iBAAiB,IAAI,KAAK;AACvC,QAAI,SAAS,QAAW;AACtB,aAAO,KAAK,+BAA+B,IAAI,CAAC;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBACP,UACA,QAAQ,eAAe,QAAQ,GACvB;AACR,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,MACJ;AAAA,MAAQ,CAAC,EAAE,KAAK,MACf,KAAK,YAAY,QAAQ,OAAO,KAAK,SAAS,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC1E,EACC,KAAK,EAAE;AAAA,EACZ;AACA,MAAI,0BAA0B,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AACA,QAAM,aAAa,gBAAgB,UAAU,MAAM;AACnD,SAAO,OAAO,eAAe,WAAW,aAAa;AACvD;AAEA,SAAS,gCACP,UACA,OACA,OACsB;AACtB,MAAI,MAAM,SAAS,GAAG;AACpB,UAAMC,SAAQ,MAAM,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM;AAC/C,UAAI,KAAK,iBAAiB,QAAW;AACnC,eAAO,CAAC;AAAA,MACV;AACA,UAAI,CAACF,eAAc,KAAK,YAAY,GAAG;AACrC,cAAM,sBAAsB,8BAA8B,KAAK,GAAG,KAAK;AAAA,MACzE;AACA,aAAO,CAAC,2BAA2B,KAAK,cAAc,MAAM,OAAO,KAAK,CAAC;AAAA,IAC3E,CAAC;AACD,sCAAkCE,QAAO,KAAK;AAC9C,WAAOA;AAAA,EACT;AACA,MAAI,0BAA0B,QAAQ,GAAG;AACvC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,iBAAiB,gBAAgB,UAAU,eAAe;AAChE,QAAM,iBAAiB,gBAAgB,UAAU,gBAAgB;AACjE,QAAM,cAAc,MAAM,QAAQ,cAAc,IAC5C,iBACA,MAAM,QAAQ,cAAc,IAC1B,iBACA,CAAC;AACP,QAAM,QAAQ,YAAY,IAAI,CAAC,MAAM,UAAU;AAC7C,QAAI,CAACF,eAAc,IAAI,GAAG;AACxB,YAAM,sBAAsB,8BAA8B,KAAK,GAAG,KAAK;AAAA,IACzE;AACA,WAAO,2BAA2B,MAAM,MAAM,OAAO,KAAK;AAAA,EAC5D,CAAC;AACD,oCAAkC,OAAO,KAAK;AAC9C,SAAO;AACT;AAEA,SAAS,2BACP,MACA,MACA,WACA,OACoB;AACpB,QAAM,aAAa,8BAA8B,SAAS;AAC1D,QAAM,YAAY,KAAK;AACvB,QAAM,SAAS,iBAAiB,SAAS,IAAI,YAAY;AACzD,QAAM,aAAa,UAAU;AAC7B,MAAI,cAAc,UAAa,WAAW,QAAW;AACnD,UAAM,sBAAsB,YAAY,KAAK;AAAA,EAC/C;AACA,MACE,KAAK,gBAAgB,UACrB,KAAK,iBAAiB,UACtB,KAAK,iBAAiB,UACtB,KAAK,kBAAkB,QACvB;AACA,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B,UAAM,sBAAsB,YAAY,KAAK;AAAA,EAC/C;AACA,QAAM,OAAO,KAAK;AAClB,MAAI,CAACA,eAAc,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG;AAC9C,UAAM,+BAA+B,YAAY,KAAK;AAAA,EACxD;AAEA,QAAM,aAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY,qBAAqB,IAAI,KAAK,qBAAqB,IAAI;AACzE,MAAI,WAAW,QAAW;AACxB,WAAO,cAAc,SACjB,EAAE,GAAG,YAAY,OAAO,IACxB,EAAE,GAAG,YAAY,QAAQ,UAAU;AAAA,EACzC;AACA,SAAO,cAAc,SAAY,aAAa,EAAE,GAAG,YAAY,UAAU;AAC3E;AAEA,SAAS,eAAe,UAAmC,OAAoC;AAC7F,QAAM,YAAY,uBAAuB,QAAQ;AACjD,MAAI,cAAc,UAAa,UAAU,YAAY,QAAW;AAC9D,WAAO,CAAC;AAAA,EACV;AACA,MAAI,CAACA,eAAc,UAAU,OAAO,GAAG;AACrC,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO,CAAC;AACnD,MAAI,CAAC,MAAM,QAAQ,UAAU,QAAQ,KAAK,GAAG;AAC3C,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,MAAI,UAAU,QAAQ,MAAM,KAAK,CAAC,SAAS,CAACA,eAAc,IAAI,CAAC,GAAG;AAChE,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,SAAO,UAAU,QAAQ,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,IACnD;AAAA,IACA;AAAA,EACF,EAAE;AACJ;AAEA,SAAS,uBACP,UACqC;AACrC,MAAI,SAAS,eAAe,OAAW,QAAO;AAC9C,MAAI,CAAC,MAAM,QAAQ,SAAS,UAAU,GAAG;AACvC,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,aAAa,SAAS;AAC5B,MACE,WAAW;AAAA,IACT,CAACG,eACC,CAACH,eAAcG,UAAS,KACvBA,WAAU,UAAU,WAClB,CAAC,OAAO,cAAcA,WAAU,KAAK,KAAMA,WAAU,QAAmB;AAAA,EAC/E,GACA;AACA,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,oBAAoB,WAAW;AAAA,IACnC,CAACA,eACCH,eAAcG,UAAS,KAAKA,WAAU,UAAU;AAAA,EACpD;AACA,MAAI,kBAAkB,WAAW,GAAG;AAClC,WAAO,kBAAkB,CAAC;AAAA,EAC5B;AACA,MAAI,kBAAkB,SAAS,GAAG;AAChC,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,YAAY,WAAW,CAAC;AAC9B,MAAI,UAAU,UAAU,UAAa,UAAU,UAAU,GAAG;AAC1D,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,uCACP,UACoB;AACpB,QAAM,wBAAwB,WAAW,uBAAuB,QAAQ,GAAG,YAAY;AACvF,MAAI,0BAA0B,OAAW,QAAO;AAChD,QAAM,iBAAiB,SAAS,kBAAkB,SAAS;AAC3D,MAAI,mBAAmB,OAAW,QAAO;AACzC,MAAI,CAACH,eAAc,cAAc,GAAG;AAClC,UAAM,IAAI,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAAA,EACtE;AACA,QAAM,cAAc,eAAe,eAAe,eAAe;AACjE,MAAI,gBAAgB,OAAW,QAAO;AACtC,MAAI,OAAO,gBAAgB,YAAY,YAAY,WAAW,GAAG;AAC/D,UAAM,IAAI,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,UAA4C;AAC7E,SAAO,MAAM,QAAQ,SAAS,UAAU,KAAK,SAAS,WAAW,SAAS;AAC5E;AAEA,SAAS,4BACP,UACA,OACS;AACT,MAAI,MAAM,KAAK,CAAC,EAAE,KAAK,MAAM,gBAAgB,MAAM,cAAc,MAAM,MAAS,GAAG;AACjF,WAAO;AAAA,EACT;AACA,MAAI,0BAA0B,QAAQ,EAAG,QAAO;AAChD,QAAM,iBAAiB,gBAAgB,UAAU,eAAe;AAChE,QAAM,iBAAiB,gBAAgB,UAAU,gBAAgB;AACjE,SACG,MAAM,QAAQ,cAAc,KAAK,eAAe,SAAS,KACzD,MAAM,QAAQ,cAAc,KAAK,eAAe,SAAS;AAE9D;AAEA,SAAS,8BAA8B,WAA2B;AAChE,SAAO,eAAe,UAAU,SAAS,CAAC;AAC5C;AAEA,SAAS,+BACP,MACsD;AACtD,MAAI,WAAiE;AAAA,IACnE,MAAM;AAAA,IACN,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,EACd;AACA,MAAI,KAAK,WAAW,OAAW,YAAW,EAAE,GAAG,UAAU,QAAQ,KAAK,OAAO;AAC7E,MAAI,KAAK,cAAc,OAAW,YAAW,EAAE,GAAG,UAAU,WAAW,KAAK,UAAU;AACtF,SAAO;AACT;AAEA,SAAS,2BACP,UACA,WACoB;AACpB,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAM,WAAW,IAAI;AAAA,IACnB,SAAS,OAAO,QAAQ,CAAC,SAAU,KAAK,SAAS,cAAc,CAAC,KAAK,UAAU,IAAI,CAAC,CAAE;AAAA,EACxF;AACA,QAAM,UAAU,UAAU,OAAO,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,UAAU,CAAC;AACjF,SAAO,QAAQ,WAAW,IACtB,WACA,EAAE,GAAG,UAAU,QAAQ,CAAC,GAAG,SAAS,QAAQ,GAAG,OAAO,EAAE;AAC9D;AAEA,SAAS,iCAAiC,OAAe,OAAoB;AAC3E,QAAM,QAAQ,sBAAsB,OAAO,MAAM,KAAK;AACtD,MAAI,UAAU,OAAW,OAAM;AACjC;AAEA,SAAS,sBACP,OACA,cACA,OAC2C;AAC3C,MAAI,UAAU,2BAA2B;AACvC,WAAO,IAAI,8BAA8B,EAAE,MAAM,4BAA4B,MAAM,CAAC;AAAA,EACtF;AACA,MAAI,UAAU,0BAA0B,UAAU,uBAAuB;AACvE,WAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC/E;AACA,MAAI,CAAC,aAAc,QAAO;AAC1B,MAAI,UAAU,QAAW;AACvB,WAAO,IAAI,8BAA8B,EAAE,MAAM,wBAAwB,MAAM,CAAC;AAAA,EAClF;AACA,QAAM,eAAe,mBAAmB,OAAO,IAAI;AACnD,MAAI,iBAAiB,aAAc,QAAO;AAC1C,MAAI,iBAAiB,UAAU;AAC7B,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,kBAAkB;AACrC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,cAAc,MAAM,CAAC;AAC7F;AAEA,SAAS,mCAAmC,UAAoC;AAC9E,QAAM,YAAY,SAAS,OAAO;AAAA,IAChC,CAAC,SACC,KAAK,SAAS;AAAA,EAClB;AACA,MAAI,UAAU,SAAS,GAAG;AACxB,QAAI,SAAS,iBAAiB,QAAW;AACvC,YAAM,IAAI,8BAA8B;AAAA,QACtC,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,MAClB,CAAC;AAAA,IACH;AACA,2CAAuC,SAAS,cAAc,SAAS,KAAK;AAAA,EAC9E,WAAW,UAAU,WAAW,KAAK,SAAS,iBAAiB,cAAc;AAC3E,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN,cAAc,SAAS;AAAA,MACvB,OAAO,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,YAAY,WAAW;AAChC,QAAI,YAAY,IAAI,SAAS,UAAU,GAAG;AACxC,YAAM,sBAAsB,SAAS,YAAY,SAAS,KAAK;AAAA,IACjE;AACA,gBAAY,IAAI,SAAS,UAAU;AACnC,QAAI,SAAS,WAAW,QAAW;AACjC,UAAI,QAAQ,IAAI,SAAS,MAAM,GAAG;AAChC,cAAM,sBAAsB,SAAS,YAAY,SAAS,KAAK;AAAA,MACjE;AACA,cAAQ,IAAI,SAAS,MAAM;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,SAAS,kCACP,OACA,OACM;AACN,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,QAAQ,OAAO;AACxB,QAAI,YAAY,IAAI,KAAK,UAAU,GAAG;AACpC,YAAM,sBAAsB,KAAK,YAAY,KAAK;AAAA,IACpD;AACA,gBAAY,IAAI,KAAK,UAAU;AAC/B,QAAI,KAAK,WAAW,QAAW;AAC7B,UAAI,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC5B,cAAM,sBAAsB,KAAK,YAAY,KAAK;AAAA,MACpD;AACA,cAAQ,IAAI,KAAK,MAAM;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,uCACP,cACA,OACM;AACN,MAAI,iBAAiB,UAAU,iBAAiB,aAAc;AAC9D,MAAI,iBAAiB,UAAU;AAC7B,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,kBAAkB;AACrC,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,cAAc,MAAM,CAAC;AAC5F;AAEA,SAAS,mCACP,OACA,OAC+B;AAC/B,MAAI,MAAM,SAAS,uBAAuB;AACxC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,cAAc;AAAA,MACd,YAAY,MAAM;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,MAAM,SAAS,sBAAsB;AACvC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,cAAc;AAAA,MACd,YAAY,MAAM;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,MAAM,iBAAiB,YAAY,MAAM,iBAAiB,kBAAkB;AAC9E,UAAM;AAAA,EACR;AACA,SAAO,IAAI,8BAA8B;AAAA,IACvC,MAAM,MAAM;AAAA,IACZ,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEA,SAAS,sBAAsB,YAAoB,OAA6C;AAC9F,SAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,YAAY,MAAM,CAAC;AAC3F;AAEA,SAAS,+BACP,YACA,OAC+B;AAC/B,SAAO,IAAI,8BAA8B;AAAA,IACvC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAgC,KAAsB;AAC7E,MAAI;AACF,UAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,WAAO,eAAe,UAAa,WAAW,aAAa,WAAW,QAAQ;AAAA,EAChF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,OAAiC;AACzD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAC5D;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,QAAM,MAAMA,eAAc,KAAK,IAAI,QAAQ,CAAC;AAC5C,QAAM,oBAAoB,WAAW,IAAI,gBAAgB;AACzD,QAAM,kBAAkB,WAAW,IAAI,uBAAuB;AAC9D,QAAM,cAAc,oBAAoB;AACxC,QAAM,wBAAwB,WAAW,IAAI,oBAAoB;AACjE,QAAM,wBAAwB,WAAW,IAAI,kBAAkB;AAC/D,QAAM,eAAe,wBAAwB;AAC7C,QAAM,oBAAoB,KAAK,IAAI,mBAAmB,WAAW,IAAI,uBAAuB,CAAC;AAC7F,QAAM,cAAc,cAAc;AAClC,SAAO;AAAA,IACL,GAAG,MAAM,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,OAAO,oBAAoB;AAAA,MAC3B,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAASA,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAwB;AAC1C,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI;AACpF;AAEA,SAAS,WAAW,OAAoC;AACtD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,qBAAqB,OAAoD;AAChF,SAAO,WAAW,MAAM,gBAAgB,KAAK,WAAW,MAAM,iBAAiB;AACjF;AAEA,SAAS,cACP,IACA,QAO4B;AAC5B,QAAM,QAAoC,EAAE,MAAM,mBAAmB,GAAG;AACxE,MAAI,OAAO,WAAW,OAAW,OAAM,SAAS,OAAO;AACvD,MAAI,OAAO,SAAS,OAAW,OAAM,OAAO,OAAO;AACnD,MAAI,OAAO,mBAAmB,OAAW,OAAM,iBAAiB,OAAO;AACvE,MAAI,OAAO,kBAAkB,OAAW,OAAM,gBAAgB,OAAO;AACrE,MAAI,OAAO,cAAc,OAAW,OAAM,YAAY,OAAO;AAC7D,SAAO;AACT;;;AGh3CA;AAAA,EACE;AAAA,OAGK;AAGA,IAAM,2BAA2B,CAAC,WAAW,OAAO,UAAU,MAAM;AAiC3E,IAAM,0BAA0B,kBAAkB,0BAA0B,MAAM;AAClF,IAAM,4BAA4B,kBAAkB,0BAA0B,QAAQ;AACtF,IAAM,6BAA6B,kBAAkB,0BAA0B,SAAS;AACxF,IAAM,2BAA2B,kBAAkB,CAAC,OAAO,UAAU,MAAM,CAAU;AACrF,IAAM,wCAAwC;AAAA,EAC5C,CAAC,OAAO,UAAU,MAAM;AAAA,EACxB;AACF;AACA,IAAM,0CAA0C;AAAA,EAC9C,CAAC,OAAO,UAAU,MAAM;AAAA,EACxB;AACF;AACA,IAAM,wBAAwB,kBAAkB,CAAC,WAAW,MAAM,GAAY,SAAS;AACvF,IAAM,oBAAoB,kBAAkB,CAAC,OAAO,MAAM,GAAY,MAAM;AAErE,SAAS,uBAAuB,SAAsD;AAC3F,MAAI,sBAAsB,IAAI,OAAO,EAAG,QAAO;AAC/C,MAAI,wBAAwB,IAAI,OAAO,EAAG,QAAO;AACjD,MAAI,yBAAyB,IAAI,OAAO,EAAG,QAAO;AAClD,MAAI,kBAAkB,IAAI,OAAO,EAAG,QAAO;AAC3C,MAAI,kBAAkB,IAAI,OAAO,EAAG,QAAO;AAC3C,MAAI,YAAY,mBAAoB,QAAO;AAC3C,MAAI,YAAY,8BAA+B,QAAO;AACtD,MAAI,YAAY,uBAAwB,QAAO;AAC/C,SAAO;AACT;AAEA,IAAM,wBAAwB,oBAAI,IAAY,CAAC,wBAAwB,CAAC;AACxE,IAAM,0BAA0B,oBAAI,IAAY,CAAC,oBAAoB,kBAAkB,CAAC;AACxF,IAAM,2BAA2B,oBAAI,IAAY;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,oBAAoB,oBAAI,IAAY;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,oBAAoB,oBAAI,IAAY;AAAA,EACxC;AAAA,EACA;AACF,CAAC;AAED,SAAS,kBACP,SACA,cAC0C;AAC1C,SAAO,8BAA8B;AAAA,IACnC,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,MACT,GAAI,iBAAiB,SAAY,CAAC,IAAI,EAAE,aAAa;AAAA,IACvD;AAAA,EACF,CAAC;AACH;;;ACzEO,IAAM,uBAAN,MAAqD;AAAA,EAQ1D,YACmB,QACjB,SACA;AAFiB;AAGjB,SAAK,UAAU,QAAQ;AACvB,SAAK,aAAa,QAAQ;AAC1B,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EARmB;AAAA,EARV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EAajB,MAAM,WAAW,OAAiB,SAAkD;AAClF,UAAM,aAA0B,CAAC;AACjC,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,KAAK,cAAc;AACpE,YAAM,QAAQ,MAAM,MAAM,OAAO,QAAQ,KAAK,YAAY;AAC1D,iBAAW,KAAK,GAAI,MAAM,KAAK,WAAW,OAAO,OAAO,CAAE;AAAA,IAC5D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,WAAW,OAAiB,SAAkD;AAC1F,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,SAAS,EAAE,GAAG,KAAK,gBAAgB,EAAE;AAC3C,QAAI,SAAS,gBAAgB,QAAW;AACtC,aAAO,OAAO,QAAQ,EAAE,aAAa,QAAQ,YAAY,CAAC;AAAA,IAC5D;AACA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,aAAa;AAAA,MACrD,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ,2BAA2B,MAAM;AAAA,IAC3C,CAAU;AACV,UAAM,gBAAgB,uBAAuB,QAAQ;AACrD,QAAI,cAAc,WAAW,MAAM,QAAQ;AACzC,YAAM,IAAI;AAAA,QACR,6BAA6B,cAAc,MAAM,+BAA+B,MAAM,MAAM;AAAA,MAC9F;AAAA,IACF;AAEA,WAAO,cAAc,IAAI,CAAC,QAAQ,WAAW;AAAA,MAC3C,UAAU,MAAM,KAAK;AAAA,MACrB;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEQ,kBAA2C;AACjD,UAAM,SAAkC,CAAC;AACzC,QAAI,KAAK,eAAe,OAAW,QAAO,uBAAuB,KAAK;AACtE,QAAI,KAAK,aAAa,OAAW,QAAO,WAAW,KAAK;AACxD,QAAI,KAAK,UAAU,OAAW,QAAO,QAAQ,KAAK;AAClD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,uBAAuB,UAA+B;AAC7D,QAAM,MAAM;AACZ,MAAI,MAAM,QAAQ,IAAI,UAAU,GAAG;AACjC,WAAO,IAAI,WAAW,IAAI,CAAC,WAAW,UAAU,oBAAoB,WAAW,KAAK,CAAC;AAAA,EACvF;AACA,MAAI,IAAI,cAAc,QAAW;AAC/B,WAAO,CAAC,oBAAoB,IAAI,WAAW,CAAC,CAAC;AAAA,EAC/C;AACA,SAAO,CAAC;AACV;AAEA,SAAS,oBAAoB,WAAoB,UAA4B;AAC3E,MAAI,CAAC,SAAS,SAAS,KAAK,CAAC,cAAc,UAAU,MAAM,GAAG;AAC5D,UAAM,IAAI,MAAM,wDAAwD,QAAQ,GAAG;AAAA,EACrF;AACA,SAAO,UAAU;AACnB;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,cAAc,OAAmC;AACxD,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAC/E;;;AChHA,SAAS,UAAAI,eAAc;AAYhB,IAAM,yBAAyB;AAC/B,IAAM,yBAAyB;AAC/B,IAAM,8BAA8B;AACpC,IAAM,qBAAqB;AAC3B,IAAM,6BAA6B;AACnC,IAAM,oBAAoB;AAE1B,IAAM,6BAAN,MAA0E;AAAA,EAG/E,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,gBACJ,SACA,SACyC;AACzC,UAAM,kBAAkBC,eAAc,QAAQ,eAAe,IAAI,QAAQ,kBAAkB,CAAC;AAC5F,UAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,UAAM,iBAAiBA,eAAc,mBAAmB,IAAI,sBAAsB,CAAC;AACnF,UAAM,sBAAsBA,eAAc,eAAe,WAAW,IAChE,eAAe,cACf,CAAC;AACL,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,oBAAoB,CAAC,QAAQ,OAAO;AAAA,MACpC,aAAa;AAAA,QACX,GAAG;AAAA,QACH,aAAa,YAAY,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACxD;AAAA,IACF;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AACrE,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,UAAU,QAAQ;AAAA,MAClB,QAAQ,2BAA2B,MAAM;AAAA,IAC3C;AAEA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB,MAAe;AACzE,WAAO,8BAA8B,QAAQ;AAAA,EAC/C;AACF;AAEO,IAAM,8BAAN,MAA2E;AAAA,EAGhF,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,gBACJ,SACA,SACyC;AACzC,UAAM,kBAAkBA,eAAc,QAAQ,eAAe,IAAI,QAAQ,kBAAkB,CAAC;AAC5F,UAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,UAAM,iBAAiBA,eAAc,mBAAmB,IAAI,sBAAsB,CAAC;AACnF,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,aAAa,YAAY,QAAQ,OAAO,QAAQ,MAAM;AAAA,IACxD;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AACrE,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,QAAQ,QAAQ;AAAA,MAChB,QAAQ,2BAA2B,MAAM;AAAA,IAC3C;AAEA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,eAAe,MAAe;AACxE,WAAO,yBAAyB,QAAQ;AAAA,EAC1C;AACF;AAEO,SAAS,8BAA8B,UAAmD;AAC/F,QAAM,MAAM;AACZ,QAAM,aAAa,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AACrE,QAAM,SAAS,WAAW,QAAQ,CAAC,cAAgC;AACjE,QAAI,CAACA,eAAc,SAAS,KAAK,CAACA,eAAc,UAAU,OAAO,GAAG;AAClE,aAAO,CAAC;AAAA,IACV;AACA,UAAM,QAAQ,MAAM,QAAQ,UAAU,QAAQ,KAAK,IAAI,UAAU,QAAQ,QAAQ,CAAC;AAClF,WAAO,MAAM,QAAQ,CAAC,SAA2B;AAC/C,UAAI,CAACA,eAAc,IAAI,KAAK,CAACA,eAAc,KAAK,UAAU,GAAG;AAC3D,eAAO,CAAC;AAAA,MACV;AACA,YAAM,OAAO,KAAK,WAAW;AAC7B,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO,CAAC;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,UACE,MAAM,kBAAkB,IAAI;AAAA,UAC5B,WACE,OAAO,KAAK,WAAW,aAAa,WAAW,KAAK,WAAW,WAAW;AAAA,QAC9E;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,EACf;AACF;AAEO,SAAS,yBAAyB,UAAmD;AAC1F,QAAM,MAAM;AACZ,QAAM,UAAU,MAAM,QAAQ,IAAI,eAAe,IAAI,IAAI,kBAAkB,CAAC,GAAG;AAAA,IAC7E,CAAC,SAA2B;AAC1B,UAAI,CAACA,eAAc,IAAI,KAAK,CAACA,eAAc,KAAK,KAAK,GAAG;AACtD,eAAO,CAAC;AAAA,MACV;AACA,YAAM,aAAa,KAAK,MAAM;AAC9B,UAAI,OAAO,eAAe,UAAU;AAClC,eAAO,CAAC;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,UACE,MAAM,kBAAkB,UAAU;AAAA,UAClC,WAAW,OAAO,KAAK,MAAM,aAAa,WAAW,KAAK,MAAM,WAAW;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,EACf;AACF;AAEO,SAAS,YAAY,OAAe,QAAwB;AACjE,QAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACrD,QAAM,mBAAmB,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC;AACvD,QAAM,UAAU,IAAI,iBAAiB,gBAAgB;AACrD,SAAO,GAAG,kBAAkB,OAAO,IAAI,mBAAmB,OAAO;AACnE;AAEA,SAAS,IAAI,MAAc,OAAuB;AAChD,MAAI,IAAI;AACR,MAAI,IAAI;AACR,SAAO,MAAM,GAAG;AACd,UAAM,OAAO,IAAI;AACjB,QAAI;AACJ,QAAI;AAAA,EACN;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAA2B;AACpD,QAAM,aAAa,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AAC7D,QAAM,QAAQC,QAAO,KAAK,OAAO,QAAQ;AACzC,QAAM,YAAY,MAAM,SAAS,QAAQ,EAAE,QAAQ,OAAO,EAAE;AAC5D,MAAI,WAAW,WAAW,KAAK,MAAM,WAAW,KAAK,cAAc,YAAY;AAC7E,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO,IAAI,WAAW,KAAK;AAC7B;AAEA,SAASD,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ACxJA,IAAM,iBAAiB;AAAA,EACrB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,iBAAiB;AACnB;AAEO,IAAM,yCAAyC;AAAA,EACpD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,IACvB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,IACxB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,IAC9B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,EAClB,8BAA8B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,wBAAwB;AAAA,EACxB,kCAAkC;AAAA,IAChC,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,0BAA0B;AAAA,IACxB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,+BAA+B;AAAA,IAC7B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,EACzB,iCAAiC;AAAA,EACjC,0BAA0B;AAAA,EAC1B,sCAAsC;AAAA,EACtC,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,IACpB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,sBAAsB;AAAA,IACpB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,IAChB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AACF;;;ACpHA,SAAS,UAAAE,eAAc;AAWvB,IAAM,yBACJ;AAEK,IAAM,2BAAN,MAAsE;AAAA,EAG3E,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,cACJ,SACA,SACuC;AACvC,UAAM,SAAkCC,eAAc,QAAQ,eAAe,IACzE,EAAE,GAAG,QAAQ,gBAAgB,IAC7B,CAAC;AACL,QAAI,QAAQ,gBAAgB,QAAW;AACrC,aAAO,cAAc,QAAQ;AAAA,IAC/B;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AAErE,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB;AAAA,MACxD,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,cACE,YAAY;AAAA,gBACV,UAAU,QAAQ,aAAa,qBAAqB,QAAQ,QAAQ;AAAA,gBACpE,MAAMC,QAAO,KAAK,QAAQ,IAAI,EAAE,SAAS,QAAQ;AAAA,cACnD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,2BAA2B;AAAA,QACjC,GAAG;AAAA,QACH,mBACE,QAAQ,WAAW,SACf,yBACA,GAAG,sBAAsB;AAAA;AAAA,EAAO,QAAQ,MAAM;AAAA,MACtD,CAAC;AAAA,IACH,CAAU;AAEV,WAAO;AAAA,MACL,MAAM,gCAAgC,QAAQ;AAAA,MAC9C,aAAa;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,gCAAgC,UAA2B;AACzE,QAAM,MAAM;AACZ,MAAI,OAAO,IAAI,SAAS,UAAU;AAChC,WAAO,IAAI;AAAA,EACb;AACA,QAAM,aAAa,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AACrE,aAAW,aAAa,YAAY;AAClC,QAAI,CAACD,eAAc,SAAS,KAAK,CAACA,eAAc,UAAU,OAAO,GAAG;AAClE;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,QAAQ,UAAU,QAAQ,KAAK,IAAI,UAAU,QAAQ,QAAQ,CAAC;AAClF,eAAW,QAAQ,OAAO;AACxB,UAAIA,eAAc,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU;AACxD,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI,MAAM,kDAAkD;AACpE;AAEA,SAAS,qBAAqB,UAA0B;AACtD,QAAM,QAAQ,SAAS,YAAY;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,OAAO,EAAG,QAAO;AACpC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,OAAO,EAAG,QAAO;AACpC,SAAO;AACT;AAEA,SAASA,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ARnBO,IAAM,eAAN,MAAiD;AAAA,EACrC;AAAA,EAEjB,YAAY,SAA8B;AACxC,QAAI,QAAQ,WAAW,QAAW;AAChC,6CAAuC,SAAS,CAAC,UAAU,UAAU,CAAC;AACtE,WAAK,MAAM,QAAQ;AACnB;AAAA,IACF;AACA,SAAK,MAAM,IAAI,YAAY,qBAAqB,OAAO,CAAC;AAAA,EAC1D;AAAA,EAEA,gBAIE,SACuC;AACvC,UAAM,UAAU,eAAe,QAAQ,OAAO;AAC9C,UAAM,WACJ,QAAQ,aAAa,SACjB,uBAAuB,OAAO,IAC9BE,+BAA8B,QAAQ,QAAQ;AAEpD,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe,SAAkE;AAC/E,mBAAe,QAAQ,OAAO;AAC9B,wCAAoC,QAAQ,YAAY,YAAY;AACpE,wCAAoC,QAAQ,cAAc,cAAc;AACxE,WAAO,IAAI,qBAAqB,KAAK,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,qBACE,SACkC;AAClC,UAAM,UAAU,eAAe,QAAQ,OAAO;AAC9C,WAAO,QAAQ,QAAQ,oBACnB,IAAI,2BAA2B,KAAK,KAAK,OAAO,IAChD,IAAI,4BAA4B,KAAK,KAAK,OAAO;AAAA,EACvD;AAAA,EAEA,mBAAmB,SAA0E;AAC3F,WAAO,IAAI,yBAAyB,KAAK,KAAK,eAAe,QAAQ,OAAO,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,WAAW,UAAqD,CAAC,GAAuB;AAC5F,QAAI;AACF,YAAM,SAAS,EAAE,UAAU,IAAK;AAChC,UAAI,QAAQ,gBAAgB,QAAW;AACrC,eAAO,OAAO,QAAQ,EAAE,aAAa,QAAQ,YAAY,CAAC;AAAA,MAC5D;AACA,YAAM,WAAW,MAAM,KAAK,IAAI,OAAO,KAAK;AAAA,QAC1C,QAAQ,2BAA2B,MAAM;AAAA,MAC3C,CAAC;AACD,YAAM,QAAQ,MAAM,0BAA0B,QAAQ,GACnD,IAAI,aAAa,EACjB,OAAO,aAAa;AACvB,aAAO,EAAE,KAAK;AAAA,IAChB,SAAS,OAAO;AACd,YAAM,oBAAoB,UAAU,KAAK;AAAA,IAC3C;AAAA,EACF;AACF;AAEA,SAAS,uCAAuC,SAAiB,MAA+B;AAC9F,QAAM,WAAW,KAAK,KAAK,CAAC,QAAQ,OAAO,OAAO;AAClD,MAAI,aAAa,QAAW;AAC1B,UAAM,IAAI,UAAU,2CAA2C,QAAQ,GAAG;AAAA,EAC5E;AACF;AAEO,SAAS,qBAAqB,SAAkD;AACrF,MAAI,YAAY,WAAW,QAAQ,WAAW,QAAW;AACvD,UAAM,IAAI,UAAU,0DAA0D;AAAA,EAChF;AACA,MAAI,cAAc,WAAW,QAAQ,aAAa,QAAW;AAC3D,UAAM,aAAiC;AAAA,MACrC,UAAU;AAAA,MACV,SAAS,cAAc,QAAQ,SAAS,WAAW,aAAa,eAAe;AAAA,MAC/E,UAAU,cAAc,QAAQ,SAAS,UAAU,YAAY,eAAe;AAAA,IAChF;AACA,QAAI,QAAQ,SAAS,sBAAsB,QAAW;AACpD,iBAAW,oBAAoB,QAAQ,SAAS;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,QAAQ,cAAc,QAAQ,QAAQ,UAAU,QAAQ;AAAA,EAC1D;AACF;AAEA,SAAS,cAAc,OAA2B,MAAc,OAAuB;AACrF,MAAI,UAAU,UAAa,MAAM,KAAK,EAAE,WAAW,GAAG;AACpD,UAAM,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI,UAAU,IAAI,kCAAkC;AAAA,EAC1F;AAEA,SAAO;AACT;AAEA,SAAS,eAAuC,SAA2B;AACzE,MAAI,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC/B,UAAM,IAAI,UAAU,oCAAoC;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,SAAS,oCAAoC,OAA2B,MAAoB;AAC1F,MAAI,UAAU,WAAc,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI;AACvE,UAAM,IAAI,UAAU,GAAG,IAAI,kCAAkC;AAAA,EAC/D;AACF;AAEA,eAAe,0BAA0B,UAAuC;AAC9E,MAAI,gBAAgB,QAAQ,GAAG;AAC7B,UAAM,SAAoB,CAAC;AAC3B,qBAAiB,SAAS,UAAU;AAClC,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAIC,UAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,MAAM,GAAG;AACxD,WAAO,SAAS;AAAA,EAClB;AAEA,MAAIA,UAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,IAAI,GAAG;AACtD,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,cAAc,OAAuD;AAC5E,MAAI,CAACA,UAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,KACJ,YAAY,MAAM,WAAW,KAC7B,YAAY,MAAM,aAAa,KAC/B,uBAAuB,YAAY,MAAM,IAAI,CAAC;AAEhD,MAAI,OAAO,QAAW;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,cAAyC;AAAA,IAC7C;AAAA,EACF;AACA,MAAI,OAAO,MAAM,gBAAgB,UAAU;AACzC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,iBAAiB,UAAU;AAC1C,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,gBAAgB,UAAU;AACzC,gBAAY,cAAc,MAAM;AAAA,EAClC;AACA,MAAI,OAAO,MAAM,SAAS,UAAU;AAClC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,oBAAoB,UAAU;AAC7C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,MAAI,OAAO,MAAM,sBAAsB,UAAU;AAC/C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,MAA8C;AAC5E,QAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,aAAa,EAAE;AACpD,SAAO,YAAY,UAAa,QAAQ,WAAW,IAAI,SAAY;AACrE;AAEA,SAAS,YAAY,OAAoC;AACvD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,WAAW,IAAI,SAAY;AAC5C;AAEA,SAAS,cACP,OACoC;AACpC,SAAO,UAAU;AACnB;AAEA,SAAS,oBAAoB,UAAkB,OAAmC;AAChF,MAAI,iBAAiB,mBAAmB;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,cAAc,KAAK;AACtC,SAAO,IAAI,kBAAkB,GAAG,QAAQ,0BAA0B,gBAAgB,KAAK,CAAC,IAAI;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI,CAACA,UAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,MAAM,WAAW,UAAU;AACpC,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,OAAO,MAAM,eAAe,UAAU;AACxC,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEA,SAASA,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBAAgB,OAAiD;AACxE,SAAOA,UAAS,KAAK,KAAK,OAAO,iBAAiB;AACpD;","names":["defineCompletionModelControls","isPlainObject","content","isPlainObject","choice","calls","candidate","Buffer","isPlainObject","Buffer","Buffer","isPlainObject","Buffer","defineCompletionModelControls","isObject"]}
|
|
1
|
+
{"version":3,"sources":["../src/gemini/index.ts","../src/gemini/client.ts","../src/gemini/completion.ts","../src/request-messages.ts","../src/gemini/retry.ts","../src/gemini/controls.ts","../src/gemini/embedding.ts","../src/gemini/image-generation.ts","../src/gemini/models.ts","../src/gemini/transcription.ts"],"sourcesContent":["export {\n GeminiClient,\n type GeminiClientOptions,\n type GeminiCompletionModelHandle,\n type GeminiCompletionModelOptions,\n type GeminiEmbeddingModelHandle,\n type GeminiImageGenerationModelHandle,\n type GeminiImageGenerationModelOptions,\n type GeminiTranscriptionModelHandle,\n type GeminiTranscriptionModelOptions,\n} from \"./client\";\nexport {\n GEMINI_REASONING_EFFORTS,\n type GeminiControlsFor,\n type GeminiReasoningControls,\n type GeminiReasoningEffort,\n} from \"./controls\";\nexport type { GeminiEmbeddingModelOptions, GeminiEmbeddingTaskType } from \"./embedding\";\nexport {\n GEMINI_2_5_FLASH_IMAGE,\n GEMINI_3_1_FLASH_IMAGE,\n GEMINI_3_1_FLASH_LITE_IMAGE,\n GEMINI_3_PRO_IMAGE,\n GEMINI_3_PRO_IMAGE_PREVIEW,\n IMAGEN_4_GENERATE,\n} from \"./image-generation\";\nexport type {\n GeminiCompletionModelId,\n GeminiEmbeddingModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n KnownGeminiCompletionModelId,\n KnownGeminiEmbeddingModelId,\n KnownGeminiGenerateContentImageModelId,\n KnownGeminiGenerateImagesModelId,\n} from \"./models\";\n","import {\n type CompletionModelControls,\n defineCompletionModelControls,\n type ModelContextLimits,\n resolveModelContextLimits,\n type StreamingCompletionModel,\n} from \"@anvia/core/completion\";\nimport type { EmbeddingModel } from \"@anvia/core/embeddings\";\nimport type { ImageGenerationModel } from \"@anvia/core/image-generation\";\nimport {\n type ModelList,\n type ModelListingClient,\n ModelListingError,\n} from \"@anvia/core/model-listing\";\nimport type { TranscriptionModel } from \"@anvia/core/transcription\";\nimport { GoogleGenAI, type GoogleGenAIOptions } from \"@google/genai\";\nimport { GeminiCompletionModel } from \"./completion\";\nimport { geminiControlsForModel, type GeminiControlsFor } from \"./controls\";\nimport { GeminiEmbeddingModel, type GeminiEmbeddingModelOptions } from \"./embedding\";\nimport { GeminiImageGenerationModel, GeminiImagenGenerationModel } from \"./image-generation\";\nimport type {\n GeminiCompletionModelId,\n GeminiGenerateContentImageModelId,\n GeminiGenerateImagesModelId,\n GeminiTranscriptionModelId,\n} from \"./models\";\nimport { GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\nimport { GeminiTranscriptionModel } from \"./transcription\";\n\ntype GeminiApiClientOptions = {\n apiKey: string;\n vertexAi?: never;\n client?: never;\n};\n\ntype VertexClientOptions = {\n vertexAi: {\n projectId: string;\n location: string;\n googleAuthOptions?: GoogleGenAIOptions[\"googleAuthOptions\"];\n };\n apiKey?: never;\n client?: never;\n};\n\ntype InjectedClientOptions = {\n client: GoogleGenAI;\n apiKey?: never;\n vertexAi?: never;\n};\n\nexport type GeminiClientOptions =\n | GeminiApiClientOptions\n | VertexClientOptions\n | InjectedClientOptions;\n\nexport type GeminiCompletionModelOptions<\n ModelId extends GeminiCompletionModelId = GeminiCompletionModelId,\n Controls extends CompletionModelControls = GeminiControlsFor<ModelId>,\n> = {\n modelId: ModelId;\n contextLimits?: ModelContextLimits | undefined;\n controls?: Controls | undefined;\n};\n\nexport type GeminiImageGenerationModelOptions =\n | { api: \"generateContent\"; modelId: GeminiGenerateContentImageModelId }\n | { api: \"generateImages\"; modelId: GeminiGenerateImagesModelId };\n\nexport type GeminiTranscriptionModelOptions = { modelId: GeminiTranscriptionModelId };\n\nexport type GeminiCompletionModelHandle<\n Controls extends CompletionModelControls = CompletionModelControls,\n> = StreamingCompletionModel<unknown, Controls>;\nexport type GeminiEmbeddingModelHandle = EmbeddingModel;\nexport type GeminiImageGenerationModelHandle = ImageGenerationModel<unknown>;\nexport type GeminiTranscriptionModelHandle = TranscriptionModel<unknown>;\n\nexport class GeminiClient implements ModelListingClient {\n private readonly sdk: GoogleGenAI;\n\n constructor(options: GeminiClientOptions) {\n if (options.client !== undefined) {\n rejectManagedOptionsWithInjectedClient(options, [\"apiKey\", \"vertexAi\"]);\n this.sdk = options.client;\n return;\n }\n this.sdk = new GoogleGenAI(toGoogleGenAIOptions(options));\n }\n\n completionModel<\n const ModelId extends GeminiCompletionModelId,\n const Controls extends CompletionModelControls = GeminiControlsFor<ModelId>,\n >(\n options: GeminiCompletionModelOptions<ModelId, Controls>,\n ): GeminiCompletionModelHandle<Controls> {\n const modelId = requireModelId(options.modelId);\n const controls = (\n options.controls === undefined\n ? geminiControlsForModel(modelId)\n : defineCompletionModelControls(options.controls)\n ) as Controls | undefined;\n return new GeminiCompletionModel(\n this.sdk,\n modelId,\n resolveModelContextLimits(\n modelId,\n GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS,\n options.contextLimits,\n ),\n controls,\n );\n }\n\n embeddingModel(options: GeminiEmbeddingModelOptions): GeminiEmbeddingModelHandle {\n requireModelId(options.modelId);\n validateOptionalPositiveSafeInteger(options.dimensions, \"dimensions\");\n validateOptionalPositiveSafeInteger(options.maxBatchSize, \"maxBatchSize\");\n return new GeminiEmbeddingModel(this.sdk, options);\n }\n\n imageGenerationModel(\n options: GeminiImageGenerationModelOptions,\n ): GeminiImageGenerationModelHandle {\n const modelId = requireModelId(options.modelId);\n return options.api === \"generateContent\"\n ? new GeminiImageGenerationModel(this.sdk, modelId)\n : new GeminiImagenGenerationModel(this.sdk, modelId);\n }\n\n transcriptionModel(options: GeminiTranscriptionModelOptions): GeminiTranscriptionModelHandle {\n return new GeminiTranscriptionModel(this.sdk, requireModelId(options.modelId));\n }\n\n async listModels(options: { abortSignal?: AbortSignal | undefined } = {}): Promise<ModelList> {\n try {\n const config = { pageSize: 1000 };\n if (options.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.sdk.models.list({\n config: disableGeminiNativeRetries(config),\n });\n const data = (await collectModelsFromResponse(response))\n .map(toListedModel)\n .filter(isListedModel);\n return { data };\n } catch (error) {\n throw toModelListingError(\"Gemini\", error);\n }\n }\n}\n\nfunction rejectManagedOptionsWithInjectedClient(options: object, keys: readonly string[]): void {\n const conflict = keys.find((key) => key in options);\n if (conflict !== undefined) {\n throw new TypeError(`GeminiClient cannot combine client with ${conflict}.`);\n }\n}\n\nexport function toGoogleGenAIOptions(options: GeminiClientOptions): GoogleGenAIOptions {\n if (\"client\" in options && options.client !== undefined) {\n throw new TypeError(\"Injected Gemini clients do not have managed SDK options.\");\n }\n if (\"vertexAi\" in options && options.vertexAi !== undefined) {\n const sdkOptions: GoogleGenAIOptions = {\n vertexai: true,\n project: requireOption(options.vertexAi.projectId, \"projectId\", \"Vertex Gemini\"),\n location: requireOption(options.vertexAi.location, \"location\", \"Vertex Gemini\"),\n };\n if (options.vertexAi.googleAuthOptions !== undefined) {\n sdkOptions.googleAuthOptions = options.vertexAi.googleAuthOptions;\n }\n return sdkOptions;\n }\n\n return {\n apiKey: requireOption(options.apiKey, \"apiKey\", \"Gemini\"),\n };\n}\n\nfunction requireOption(value: string | undefined, name: string, label: string): string {\n if (value === undefined || value.trim().length === 0) {\n throw new Error(`Missing ${label} ${name}. Pass ${name} when constructing GeminiClient.`);\n }\n\n return value;\n}\n\nfunction requireModelId<ModelId extends string>(modelId: ModelId): ModelId {\n if (modelId.trim().length === 0) {\n throw new TypeError(\"modelId must be a non-empty string\");\n }\n return modelId;\n}\n\nfunction validateOptionalPositiveSafeInteger(value: number | undefined, name: string): void {\n if (value !== undefined && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(`${name} must be a positive safe integer`);\n }\n}\n\nasync function collectModelsFromResponse(response: unknown): Promise<unknown[]> {\n if (isAsyncIterable(response)) {\n const models: unknown[] = [];\n for await (const model of response) {\n models.push(model);\n }\n return models;\n }\n\n if (Array.isArray(response)) {\n return response;\n }\n\n if (isObject(response) && Array.isArray(response.models)) {\n return response.models;\n }\n\n if (isObject(response) && Array.isArray(response.data)) {\n return response.data;\n }\n\n return [];\n}\n\nfunction toListedModel(model: unknown): ModelList[\"data\"][number] | undefined {\n if (!isObject(model)) {\n return undefined;\n }\n\n const id =\n stringValue(model.baseModelId) ??\n stringValue(model.base_model_id) ??\n normalizeGeminiModelId(stringValue(model.name));\n\n if (id === undefined) {\n return undefined;\n }\n\n const listedModel: ModelList[\"data\"][number] = {\n id,\n };\n if (typeof model.displayName === \"string\") {\n listedModel.name = model.displayName;\n }\n if (typeof model.display_name === \"string\") {\n listedModel.name = model.display_name;\n }\n if (typeof model.description === \"string\") {\n listedModel.description = model.description;\n }\n if (typeof model.type === \"string\") {\n listedModel.type = model.type;\n }\n if (typeof model.inputTokenLimit === \"number\") {\n listedModel.contextLength = model.inputTokenLimit;\n }\n if (typeof model.input_token_limit === \"number\") {\n listedModel.contextLength = model.input_token_limit;\n }\n return listedModel;\n}\n\nfunction normalizeGeminiModelId(name: string | undefined): string | undefined {\n const trimmed = name?.trim().replace(/^models\\//, \"\");\n return trimmed === undefined || trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmed = value.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction isListedModel(\n model: ModelList[\"data\"][number] | undefined,\n): model is ModelList[\"data\"][number] {\n return model !== undefined;\n}\n\nfunction toModelListingError(provider: string, error: unknown): ModelListingError {\n if (error instanceof ModelListingError) {\n return error;\n }\n\n const statusCode = getStatusCode(error);\n return new ModelListingError(`${provider} model listing failed: ${getErrorMessage(error)}`, {\n provider,\n statusCode,\n cause: error,\n });\n}\n\nfunction getStatusCode(error: unknown): number | undefined {\n if (!isObject(error)) {\n return undefined;\n }\n\n if (typeof error.status === \"number\") {\n return error.status;\n }\n\n if (typeof error.statusCode === \"number\") {\n return error.statusCode;\n }\n\n return undefined;\n}\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return isObject(value) && Symbol.asyncIterator in value;\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport {\n type AssistantContentPart,\n assertCompletionRequestSupported,\n type CompletionFinishReason,\n type CompletionModelCapabilities,\n type CompletionModelControls,\n type CompletionModelInfo,\n type CompletionModelStreamEvent,\n CompletionProviderOutputError,\n type CompletionRequest,\n type CompletionResponse,\n isJsonValue,\n type JsonObject,\n type JsonValue,\n type Message as MessageType,\n type ModelCallOptions,\n type StreamingCompletionModel,\n type ToolCallArgumentsMode,\n type ToolChoice,\n type ToolDefinition,\n type ToolResultPart,\n Usage,\n type UserContentPart,\n withContextUsage,\n} from \"@anvia/core/completion\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport { orderedRequestMessages } from \"../request-messages\";\nimport type { GeminiCompletionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\ntype GeminiGenerateParams = Record<string, unknown>;\ntype GeminiConfig = Record<string, unknown>;\ntype GeminiContent = {\n role: \"user\" | \"model\";\n parts: GeminiPart[];\n};\ntype GeminiPart = Record<string, unknown>;\ntype IndexedGeminiPart = Readonly<{\n index: number;\n part: GeminiPart;\n}>;\ntype GeminiFunctionCall = Readonly<{\n toolCallId: string;\n callId?: string | undefined;\n name: string;\n args: JsonObject;\n signature?: string | undefined;\n partIndex: number;\n}>;\ntype GeminiStreamChunkMapping = Readonly<{\n events: CompletionModelStreamEvent[];\n toolCalls: Extract<AssistantContentPart, { type: \"tool-call\" }>[];\n hasToolCallMarker: boolean;\n hasSyntheticToolCalls: boolean;\n providerFinishReason?: string | undefined;\n terminalError?: CompletionProviderOutputError | undefined;\n}>;\n\nexport class GeminiCompletionModel<\n Controls extends CompletionModelControls = CompletionModelControls,\n> implements StreamingCompletionModel<unknown, Controls> {\n readonly provider = \"gemini\";\n readonly capabilities: CompletionModelCapabilities = {\n streaming: true,\n tools: true,\n toolChoice: true,\n imageInput: true,\n documentInput: true,\n outputSchema: true,\n reasoning: true,\n };\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiCompletionModelId,\n readonly contextLimits?: ModelContextLimits,\n readonly controls?: Controls,\n ) {}\n\n private modelInfo(): CompletionModelInfo | undefined {\n return this.contextLimits === undefined\n ? undefined\n : { modelId: this.modelId, context: this.contextLimits };\n }\n\n traceRequest(\n request: CompletionRequest,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject {\n const params = toGeminiGenerateContentParams(this.modelId, request);\n return providerRequestSummary(params, request, options);\n }\n\n async completion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this, request);\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const response = await this.client.models.generateContent(params as never);\n return withContextUsage(fromGeminiGenerateContentResponse(response), this.modelInfo());\n }\n\n async *streamCompletion(\n request: CompletionRequest,\n options?: ModelCallOptions,\n ): AsyncIterable<CompletionModelStreamEvent> {\n assertCompletionRequestSupported(this, request, { streaming: true });\n const params = toGeminiGenerateContentParams(this.modelId, request);\n applyAbortSignal(params, options);\n const stream = await this.client.models.generateContentStream(params as never);\n const streamState = new GeminiCompletionStreamState();\n for await (const chunk of stream as unknown as AsyncIterable<unknown>) {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n streamState.accept(chunk, mapping);\n for (const event of mapping.events) {\n if (event.type !== \"final\") {\n yield event;\n }\n }\n }\n streamState.assertComplete();\n const finalEvent = streamState.finalEvent();\n if (finalEvent !== undefined) {\n yield {\n ...finalEvent,\n response: withContextUsage(finalEvent.response, this.modelInfo()),\n };\n }\n }\n}\n\nexport function toGeminiGenerateContentParams(\n modelId: GeminiCompletionModelId,\n request: CompletionRequest,\n): GeminiGenerateParams {\n const messages = requestMessages(request);\n if (\n request.providerOptions !== undefined &&\n (!isPlainObject(request.providerOptions) || !isJsonValue(request.providerOptions))\n ) {\n throw new TypeError(\"Gemini providerOptions must be a JSON object.\");\n }\n const providerOptions = request.providerOptions ?? {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n if (providerConfigValue !== undefined && !isPlainObject(providerConfigValue)) {\n throw new TypeError(\"Gemini providerOptions.config must be a JSON object.\");\n }\n const providerConfig = providerConfigValue === undefined ? {} : { ...providerConfigValue };\n delete providerConfig.tools;\n const configValues: GeminiConfig = {\n ...providerConfig,\n ...geminiConfig(request, messages),\n };\n const reasoningEffort = request.controls?.reasoningEffort;\n if (reasoningEffort !== undefined) {\n const thinkingConfig = isPlainObject(providerConfig.thinkingConfig)\n ? { ...providerConfig.thinkingConfig }\n : {};\n if (modelId.startsWith(\"gemini-2.5\")) {\n delete thinkingConfig.thinkingLevel;\n configValues.thinkingConfig = {\n ...thinkingConfig,\n thinkingBudget: gemini25ThinkingBudget(reasoningEffort),\n };\n } else {\n delete thinkingConfig.thinkingBudget;\n configValues.thinkingConfig = { ...thinkingConfig, thinkingLevel: reasoningEffort };\n }\n }\n const config = disableGeminiNativeRetries(configValues);\n const params: GeminiGenerateParams = {\n ...providerTopLevel,\n model: modelId,\n contents: messagesToGeminiContents(messages),\n config,\n };\n\n return params;\n}\n\nfunction gemini25ThinkingBudget(reasoningEffort: string): number {\n if (reasoningEffort === \"low\") return 1_024;\n if (reasoningEffort === \"medium\") return 8_192;\n if (reasoningEffort === \"high\") return 24_576;\n throw new TypeError(`Unsupported Gemini 2.5 reasoning effort: ${reasoningEffort}`);\n}\n\nfunction applyAbortSignal(\n params: GeminiGenerateParams,\n options: ModelCallOptions | undefined,\n): void {\n if (options?.abortSignal === undefined) return;\n const config = isPlainObject(params.config) ? params.config : {};\n params.config = { ...config, abortSignal: options.abortSignal };\n}\n\nfunction providerRequestSummary(\n params: GeminiGenerateParams,\n request: CompletionRequest,\n options: { stream?: boolean | undefined },\n): JsonObject {\n const config = isPlainObject(params.config) ? params.config : {};\n return compactJsonObject({\n provider: \"gemini\",\n api: options.stream === true ? \"models.generateContentStream\" : \"models.generateContent\",\n stream: options.stream === true,\n model: typeof params.model === \"string\" ? params.model : undefined,\n parameterKeys: Object.keys(params).sort(),\n contentCount: Array.isArray(params.contents) ? params.contents.length : undefined,\n configKeys: Object.keys(config).sort(),\n toolCount: request.tools.length,\n toolNames: request.tools.map((tool) => tool.name),\n hasSystemInstruction: config.systemInstruction !== undefined,\n hasOutputSchema: request.outputSchema !== undefined,\n temperature: request.temperature,\n maxTokens: request.maxTokens,\n toolChoice: toolChoiceSummary(request.toolChoice),\n providerOptionKeys: isPlainObject(request.providerOptions)\n ? Object.keys(request.providerOptions).sort()\n : undefined,\n });\n}\n\nfunction toolChoiceSummary(toolChoice: ToolChoice | undefined): JsonValue | undefined {\n if (toolChoice === undefined || typeof toolChoice === \"string\") {\n return toolChoice;\n }\n return { type: toolChoice.type, name: toolChoice.name };\n}\n\nfunction compactJsonObject(values: Record<string, unknown>): JsonObject {\n return Object.fromEntries(\n Object.entries(values).flatMap(([key, value]) => {\n if (!isJsonValue(value)) {\n return [];\n }\n return [[key, value]];\n }),\n ) as JsonObject;\n}\n\nfunction requestMessages(request: CompletionRequest): MessageType[] {\n return orderedRequestMessages(request);\n}\n\nfunction geminiConfig(request: CompletionRequest, messages: MessageType[]): GeminiConfig {\n const config: GeminiConfig = {};\n const systemInstruction = systemInstructionFrom(request, messages);\n if (systemInstruction !== undefined) {\n config.systemInstruction = systemInstruction;\n }\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (request.maxTokens !== undefined) {\n config.maxOutputTokens = request.maxTokens;\n }\n if (request.tools.length > 0) {\n config.tools = [{ functionDeclarations: request.tools.map(toolDefinitionToGemini) }];\n }\n if (request.toolChoice !== undefined) {\n config.toolConfig = toolChoiceToGemini(request.toolChoice);\n }\n if (request.outputSchema !== undefined) {\n config.responseMimeType = \"application/json\";\n config.responseJsonSchema = request.outputSchema;\n }\n return config;\n}\n\nfunction systemInstructionFrom(\n request: CompletionRequest,\n messages: MessageType[],\n): string | undefined {\n const systemMessages = messages.flatMap((message) =>\n message.role === \"system\" ? [message.content] : [],\n );\n if (request.instructions !== undefined) {\n systemMessages.unshift(request.instructions);\n }\n return systemMessages.length === 0 ? undefined : systemMessages.join(\"\\n\\n\");\n}\n\nexport function messagesToGeminiContents(messages: MessageType[]): GeminiContent[] {\n const toolNamesById = new Map<string, string>();\n const contents: GeminiContent[] = [];\n\n for (const message of messages) {\n if (message.role === \"system\") {\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content = assistantMessageToGeminiContent(message);\n for (const item of typeof message.content === \"string\" ? [] : message.content) {\n if (item.type === \"tool-call\") {\n toolNamesById.set(item.toolCallId, item.toolName);\n if (item.callId !== undefined) {\n toolNamesById.set(item.callId, item.toolName);\n }\n }\n }\n if (content.parts.length > 0) {\n contents.push(content);\n }\n continue;\n }\n\n const content =\n message.role === \"tool\"\n ? toolMessageToGeminiContent(message, toolNamesById)\n : userMessageToGeminiContent(message);\n if (content.parts.length > 0) {\n contents.push(content);\n }\n }\n\n return contents;\n}\n\nfunction userMessageToGeminiContent(\n message: Extract<MessageType, { role: \"user\" }>,\n): GeminiContent {\n return {\n role: \"user\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.map(userContentToGeminiPart),\n };\n}\n\nfunction toolMessageToGeminiContent(\n message: Extract<MessageType, { role: \"tool\" }>,\n toolNamesById: Map<string, string>,\n): GeminiContent {\n return {\n role: \"user\",\n parts: message.content.map((content) => {\n if (content.type !== \"tool-result\") {\n throw new TypeError(\n \"Anvia interaction responses must be resolved by Agent before provider calls.\",\n );\n }\n return toolContentToGeminiPart(content, toolNamesById);\n }),\n };\n}\n\nfunction assistantMessageToGeminiContent(\n message: Extract<MessageType, { role: \"assistant\" }>,\n): GeminiContent {\n return {\n role: \"model\",\n parts:\n typeof message.content === \"string\"\n ? [{ text: message.content }]\n : message.content.flatMap((content): GeminiPart[] => {\n if (content.type === \"text\") {\n const part: GeminiPart = { text: content.text };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"tool-call\") {\n const functionCall: Record<string, unknown> = {\n name: content.toolName,\n args: content.input,\n };\n if (content.callId !== undefined) {\n functionCall.id = content.callId;\n }\n const part: GeminiPart = { functionCall };\n if (content.signature !== undefined) {\n part.thoughtSignature = content.signature;\n }\n return [part];\n }\n if (content.type === \"reasoning\" && content.details !== undefined) {\n return content.details.flatMap((reasoning): GeminiPart[] => {\n if (reasoning.type !== \"text\" && reasoning.type !== \"summary\") {\n return [];\n }\n const part: GeminiPart = { text: reasoning.text, thought: true };\n if (reasoning.type === \"text\" && reasoning.signature !== undefined) {\n part.thoughtSignature = reasoning.signature;\n }\n return [part];\n });\n }\n if (content.type === \"image\" || content.type === \"file\") {\n throw new Error(\n \"Gemini does not support image or file content in assistant history yet\",\n );\n }\n return [];\n }),\n };\n}\n\nfunction userContentToGeminiPart(content: UserContentPart): GeminiPart {\n if (content.type === \"text\") {\n return { text: content.text };\n }\n if (content.type === \"image\") {\n return imageContentToGeminiPart(content);\n }\n return documentContentToGeminiPart(content);\n}\n\nfunction imageContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"image\" }>,\n): GeminiPart {\n if (content.image.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType ?? \"image/png\",\n data: content.image.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.image.url,\n mimeType: content.mediaType ?? mimeTypeFromImageUrl(content.image.url),\n },\n };\n}\n\nfunction mimeTypeFromImageUrl(url: string): string {\n const pathname = safeUrlPathname(url).toLowerCase();\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".gif\")) return \"image/gif\";\n if (pathname.endsWith(\".bmp\")) return \"image/bmp\";\n if (pathname.endsWith(\".heic\")) return \"image/heic\";\n if (pathname.endsWith(\".heif\")) return \"image/heif\";\n return \"image/png\";\n}\n\nfunction safeUrlPathname(url: string): string {\n try {\n return new URL(url).pathname;\n } catch {\n return url;\n }\n}\n\nfunction documentContentToGeminiPart(\n content: Extract<UserContentPart, { type: \"file\" }>,\n): GeminiPart {\n if (content.data.type === \"text\") {\n return { text: content.data.text };\n }\n\n if (content.data.type === \"data\") {\n return {\n inlineData: {\n mimeType: content.mediaType,\n data: content.data.data,\n },\n };\n }\n\n return {\n fileData: {\n fileUri: content.data.url,\n mimeType: content.mediaType,\n },\n };\n}\n\nfunction toolContentToGeminiPart(\n content: ToolResultPart,\n toolNamesById: Map<string, string>,\n): GeminiPart {\n const id = content.callId ?? content.toolCallId;\n const functionResponse: Record<string, unknown> = {\n name: content.toolName || toolNamesById.get(id) || content.toolCallId,\n response: toolResultResponse(content),\n };\n if (content.callId !== undefined) {\n functionResponse.id = content.callId;\n }\n return { functionResponse };\n}\n\nfunction toolResultResponse(content: ToolResultPart): Record<string, unknown> {\n const output = content.output;\n if (output.type === \"json\") {\n return { result: output.value };\n }\n if (output.type === \"text\") {\n return { content: output.value };\n }\n if (output.type === \"error-json\" || output.type === \"error-text\") {\n return { error: output.value };\n }\n if (output.type === \"execution-denied\") {\n return { error: output.reason ?? \"Tool execution was denied.\" };\n }\n return {\n content: output.value\n .map((item) => (item.type === \"text\" ? item.text : `[file:${item.mediaType}]`))\n .join(\"\\n\"),\n };\n}\n\nfunction toolDefinitionToGemini(tool: ToolDefinition): GeminiPart {\n return {\n name: tool.name,\n description: tool.description,\n parametersJsonSchema: tool.parameters,\n };\n}\n\nfunction toolChoiceToGemini(toolChoice: ToolChoice): GeminiPart {\n if (toolChoice === \"auto\") {\n return { functionCallingConfig: { mode: \"AUTO\" } };\n }\n if (toolChoice === \"required\") {\n return { functionCallingConfig: { mode: \"ANY\" } };\n }\n if (toolChoice === \"none\") {\n return { functionCallingConfig: { mode: \"NONE\" } };\n }\n return {\n functionCallingConfig: {\n mode: \"ANY\",\n allowedFunctionNames: [toolChoice.name],\n },\n };\n}\n\nexport function fromGeminiGenerateContentResponse(response: unknown): CompletionResponse {\n const raw = isPlainObject(response) ? response : {};\n const usage = usageFromGemini(raw.usageMetadata);\n const parts = candidateParts(raw, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(raw);\n const finishError = geminiToolFinishError(\n providerFinishReason,\n hasGeminiFunctionCallMarker(raw, parts),\n usage,\n );\n if (finishError !== undefined) throw finishError;\n const choice = assistantContentFromGeminiResponse(raw, usage);\n\n const result: CompletionResponse = {\n choice,\n usage,\n rawResponse: response,\n };\n applyGeminiFinishReason(result, raw);\n const id = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (id !== undefined) {\n result.messageId = id;\n }\n assertSafeGeminiCompletionResponse(result);\n return result;\n}\n\nfunction applyGeminiFinishReason(\n response: CompletionResponse,\n raw: Record<string, unknown>,\n hasStreamedToolCalls = false,\n): void {\n const value = providerFinishReasonFromGeminiResponse(raw);\n if (value === undefined) return;\n applyGeminiFinishReasonValue(response, value, hasStreamedToolCalls);\n}\n\nfunction applyGeminiFinishReasonValue(\n response: CompletionResponse,\n value: string,\n hasStreamedToolCalls: boolean,\n): void {\n response.finishReason = geminiFinishReason(\n value,\n hasStreamedToolCalls || response.choice.some((part) => part.type === \"tool-call\"),\n );\n response.providerFinishReason = value;\n}\n\nfunction geminiFinishReason(value: string, hasToolCalls: boolean): CompletionFinishReason {\n if (value === \"MAX_TOKENS\") return \"length\";\n if (\n value === \"SAFETY\" ||\n value === \"RECITATION\" ||\n value === \"BLOCKLIST\" ||\n value === \"PROHIBITED_CONTENT\" ||\n value === \"SPII\" ||\n value === \"IMAGE_SAFETY\" ||\n value === \"IMAGE_PROHIBITED_CONTENT\"\n ) {\n return \"content-filter\";\n }\n if (value === \"STOP\") {\n return hasToolCalls ? \"tool-calls\" : \"stop\";\n }\n return \"other\";\n}\n\nexport function fromGeminiGenerateContentStreamChunk(chunk: unknown): CompletionModelStreamEvent[] {\n const mapping = mapGeminiGenerateContentStreamChunk(chunk);\n if (mapping.terminalError !== undefined) throw mapping.terminalError;\n return mapping.events;\n}\n\nfunction mapGeminiGenerateContentStreamChunk(chunk: unknown): GeminiStreamChunkMapping {\n if (!isPlainObject(chunk)) {\n return {\n events: [],\n toolCalls: [],\n hasToolCallMarker: false,\n hasSyntheticToolCalls: false,\n };\n }\n\n const events: CompletionModelStreamEvent[] = [];\n const usage = usageFromGemini(chunk.usageMetadata);\n const parts = candidateParts(chunk, usage);\n const providerFinishReason = providerFinishReasonFromGeminiResponse(chunk);\n const hasToolCallMarker = hasGeminiFunctionCallMarker(chunk, parts);\n const terminalError =\n providerFinishReason === undefined\n ? undefined\n : geminiToolFinishError(providerFinishReason, hasToolCallMarker, usage);\n const calls =\n terminalError === undefined ? functionCallsFromGeminiResponse(chunk, parts, usage) : [];\n const directText = textFromGeminiResponse(chunk, parts);\n if (terminalError === undefined && directText.length > 0 && parts.length === 0) {\n events.push({ type: \"text_delta\", delta: directText });\n }\n for (const { part } of terminalError === undefined ? parts : []) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n events.push({ type: \"reasoning_delta\", delta: part.text, contentType: \"summary\" });\n } else {\n events.push({ type: \"text_delta\", delta: part.text });\n }\n }\n }\n for (const call of calls) {\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n name: call.name,\n signature: call.signature,\n }),\n );\n const argumentsDelta = JSON.stringify(call.args);\n if (argumentsDelta === undefined) {\n throw invalidGeminiToolCallArguments(call.toolCallId, usage);\n }\n events.push(\n toolCallDelta(call.toolCallId, {\n callId: call.callId,\n argumentsDelta,\n argumentsMode: \"replace\",\n }),\n );\n }\n const id = stringFrom(chunk.responseId) ?? stringFrom(chunk.id);\n if (id !== undefined) {\n events.push({ type: \"message_id\", id });\n }\n if (isPlainObject(chunk.usageMetadata)) {\n if (terminalError === undefined) {\n events.push({ type: \"final\", response: fromGeminiGenerateContentResponse(chunk) });\n } else {\n const response: CompletionResponse = { choice: [], usage, rawResponse: chunk };\n if (providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, providerFinishReason, true);\n }\n events.push({ type: \"final\", response });\n }\n }\n return providerFinishReason === undefined\n ? {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n terminalError,\n }\n : {\n events,\n toolCalls: calls.map(toolCallFromGeminiFunctionCall),\n hasToolCallMarker,\n hasSyntheticToolCalls: calls.some((call) => call.callId === undefined),\n providerFinishReason,\n terminalError,\n };\n}\n\nclass GeminiCompletionStreamState {\n private readonly toolCalls = new Map<\n string,\n Extract<AssistantContentPart, { type: \"tool-call\" }>\n >();\n private providerFinishReason: string | undefined;\n private terminalChunk: unknown;\n private finalResponse: CompletionResponse | undefined;\n private sawToolCallMarker = false;\n private sawSyntheticToolCallChunk = false;\n private terminalError: CompletionProviderOutputError | undefined;\n\n accept(chunk: unknown, mapping: GeminiStreamChunkMapping): void {\n if (mapping.hasSyntheticToolCalls && this.sawSyntheticToolCallChunk) {\n const toolCallId = mapping.toolCalls.find(\n (toolCall) => toolCall.callId === undefined,\n )?.toolCallId;\n throw toolCallId === undefined\n ? new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n usage: this.currentUsage(),\n })\n : invalidGeminiToolCall(toolCallId, this.currentUsage());\n }\n if (\n this.providerFinishReason !== undefined &&\n (mapping.hasToolCallMarker || hasGeminiSemanticProgress(mapping.events))\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n for (const toolCall of mapping.toolCalls) {\n const existing = this.toolCalls.get(toolCall.toolCallId);\n if (existing !== undefined) {\n if (\n existing.callId === undefined ||\n toolCall.callId === undefined ||\n !sameGeminiToolCall(existing, toolCall)\n ) {\n throw invalidGeminiToolCall(toolCall.toolCallId, this.currentUsage());\n }\n continue;\n }\n this.toolCalls.set(toolCall.toolCallId, toolCall);\n }\n this.sawToolCallMarker ||= mapping.hasToolCallMarker;\n this.sawSyntheticToolCallChunk ||= mapping.hasSyntheticToolCalls;\n for (const event of mapping.events) {\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n }\n }\n this.terminalError ??= mapping.terminalError;\n\n if (mapping.providerFinishReason !== undefined) {\n if (\n this.providerFinishReason !== undefined &&\n this.providerFinishReason !== mapping.providerFinishReason\n ) {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: \"other\",\n usage: this.currentUsage(),\n });\n }\n this.providerFinishReason = mapping.providerFinishReason;\n this.terminalChunk = chunk;\n }\n }\n\n assertComplete(): void {\n if (this.terminalError !== undefined) {\n throw geminiProviderOutputErrorWithUsage(this.terminalError, this.currentUsage());\n }\n if (!this.sawToolCallMarker && this.toolCalls.size === 0) return;\n if (this.providerFinishReason !== undefined) {\n assertSafeGeminiToolFinishReason(this.providerFinishReason, this.currentUsage());\n return;\n }\n const toolCallId = this.toolCalls.keys().next().value as string | undefined;\n throw new CompletionProviderOutputError(\n toolCallId === undefined\n ? { kind: \"incomplete-tool-call\", usage: this.currentUsage() }\n : { kind: \"incomplete-tool-call\", toolCallId, usage: this.currentUsage() },\n );\n }\n\n finalEvent(): Extract<CompletionModelStreamEvent, { type: \"final\" }> | undefined {\n let response = this.finalResponse;\n if (response === undefined) {\n if (this.terminalChunk === undefined) {\n return undefined;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n response = {\n choice: [],\n usage: usageFromGemini(raw.usageMetadata),\n rawResponse: this.terminalChunk,\n };\n const messageId = stringFrom(raw.responseId) ?? stringFrom(raw.id);\n if (messageId !== undefined) response.messageId = messageId;\n }\n\n response = mergeGeminiStreamToolCalls(response, [...this.toolCalls.values()]);\n if (this.providerFinishReason !== undefined) {\n applyGeminiFinishReasonValue(response, this.providerFinishReason, this.toolCalls.size > 0);\n }\n assertSafeGeminiCompletionResponse(response);\n return { type: \"final\", response };\n }\n\n private currentUsage(): Usage {\n if (this.finalResponse !== undefined) {\n return this.finalResponse.usage;\n }\n const raw = isPlainObject(this.terminalChunk) ? this.terminalChunk : {};\n return usageFromGemini(raw.usageMetadata);\n }\n}\n\nfunction hasGeminiSemanticProgress(events: readonly CompletionModelStreamEvent[]): boolean {\n return events.some(\n (event) =>\n event.type === \"text_delta\" ||\n event.type === \"reasoning_delta\" ||\n event.type === \"tool_call_delta\" ||\n event.type === \"tool_call\" ||\n event.type === \"provider_tool_call\",\n );\n}\n\nfunction sameGeminiToolCall(\n left: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n right: Extract<AssistantContentPart, { type: \"tool-call\" }>,\n): boolean {\n return (\n left.toolName === right.toolName &&\n left.callId === right.callId &&\n left.signature === right.signature &&\n sameJsonValue(left.input, right.input)\n );\n}\n\nfunction sameJsonValue(left: JsonValue, right: JsonValue): boolean {\n if (Object.is(left, right)) return true;\n if (isJsonArray(left) || isJsonArray(right)) {\n return (\n isJsonArray(left) &&\n isJsonArray(right) &&\n left.length === right.length &&\n left.every((value, index) => {\n const rightValue = right[index];\n return rightValue !== undefined && sameJsonValue(value, rightValue);\n })\n );\n }\n if (left === null || right === null || typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n const leftKeys = Object.keys(left);\n const rightKeys = Object.keys(right);\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) =>\n Object.hasOwn(right, key) && sameJsonValue(left[key] as JsonValue, right[key] as JsonValue),\n )\n );\n}\n\nfunction isJsonArray(value: JsonValue): value is readonly JsonValue[] {\n return Array.isArray(value);\n}\n\nfunction assistantContentFromGeminiResponse(\n response: Record<string, unknown>,\n usage: Usage,\n): AssistantContentPart[] {\n const parts = candidateParts(response, usage);\n const calls = functionCallsFromGeminiResponse(response, parts, usage);\n if (parts.length === 0) {\n const choice: AssistantContentPart[] = [];\n const text = textFromGeminiResponse(response, parts);\n if (text.length > 0) choice.push({ type: \"text\", text });\n choice.push(...calls.map(toolCallFromGeminiFunctionCall));\n return choice;\n }\n\n const callsByPartIndex = new Map(calls.map((call) => [call.partIndex, call]));\n const choice: AssistantContentPart[] = [];\n for (const { index, part } of parts) {\n if (typeof part.text === \"string\" && part.text.length > 0) {\n if (part.thought === true) {\n choice.push({\n type: \"reasoning\",\n text: part.text,\n details: [{ type: \"summary\", text: part.text }],\n });\n } else {\n const signature = thoughtSignatureFrom(part);\n let text: Extract<AssistantContentPart, { type: \"text\" }> = {\n type: \"text\",\n text: part.text,\n };\n if (signature !== undefined) text = { ...text, signature };\n choice.push(text);\n }\n }\n const call = callsByPartIndex.get(index);\n if (call !== undefined) {\n choice.push(toolCallFromGeminiFunctionCall(call));\n }\n }\n return choice;\n}\n\nfunction textFromGeminiResponse(\n response: Record<string, unknown>,\n parts = candidateParts(response),\n): string {\n if (parts.length > 0) {\n return parts\n .flatMap(({ part }) =>\n part.thought !== true && typeof part.text === \"string\" ? [part.text] : [],\n )\n .join(\"\");\n }\n if (hasGeminiCandidatePayload(response)) {\n return \"\";\n }\n const directText = ownDataProperty(response, \"text\");\n return typeof directText === \"string\" ? directText : \"\";\n}\n\nfunction functionCallsFromGeminiResponse(\n response: Record<string, unknown>,\n parts: IndexedGeminiPart[],\n usage: Usage,\n): GeminiFunctionCall[] {\n if (parts.length > 0) {\n const calls = parts.flatMap(({ index, part }) => {\n if (part.functionCall === undefined) {\n return [];\n }\n if (!isPlainObject(part.functionCall)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return [functionCallFromGeminiPart(part.functionCall, part, index, usage)];\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n }\n if (hasGeminiCandidatePayload(response)) {\n return [];\n }\n\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n const directCalls = Array.isArray(camelCaseCalls)\n ? camelCaseCalls\n : Array.isArray(snakeCaseCalls)\n ? snakeCaseCalls\n : [];\n const calls = directCalls.map((call, index) => {\n if (!isPlainObject(call)) {\n throw invalidGeminiToolCall(deterministicGeminiToolCallId(index), usage);\n }\n return functionCallFromGeminiPart(call, call, index, usage);\n });\n assertDistinctGeminiFunctionCalls(calls, usage);\n return calls;\n}\n\nfunction functionCallFromGeminiPart(\n call: Record<string, unknown>,\n part: Record<string, unknown>,\n partIndex: number,\n usage: Usage,\n): GeminiFunctionCall {\n const fallbackId = deterministicGeminiToolCallId(partIndex);\n const rawCallId = call.id;\n const callId = isNonblankString(rawCallId) ? rawCallId : undefined;\n const toolCallId = callId ?? fallbackId;\n if (rawCallId !== undefined && callId === undefined) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n if (\n call.partialArgs !== undefined ||\n call.partial_args !== undefined ||\n call.willContinue !== undefined ||\n call.will_continue !== undefined\n ) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n toolCallId,\n usage,\n });\n }\n const name = call.name;\n if (!isNonblankString(name)) {\n throw invalidGeminiToolCall(toolCallId, usage);\n }\n const args = call.args;\n if (!isPlainObject(args) || !isJsonValue(args)) {\n throw invalidGeminiToolCallArguments(toolCallId, usage);\n }\n\n const normalized: GeminiFunctionCall = {\n toolCallId,\n name,\n args,\n partIndex,\n };\n const signature = thoughtSignatureFrom(part) ?? thoughtSignatureFrom(call);\n if (callId !== undefined) {\n return signature === undefined\n ? { ...normalized, callId }\n : { ...normalized, callId, signature };\n }\n return signature === undefined ? normalized : { ...normalized, signature };\n}\n\nfunction candidateParts(response: Record<string, unknown>, usage?: Usage): IndexedGeminiPart[] {\n const candidate = primaryGeminiCandidate(response);\n if (candidate === undefined || candidate.content === undefined) {\n return [];\n }\n if (!isPlainObject(candidate.content)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts === undefined) return [];\n if (!Array.isArray(candidate.content.parts)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (candidate.content.parts.some((part) => !isPlainObject(part))) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n return candidate.content.parts.map((part, index) => ({\n index,\n part: part as Record<string, unknown>,\n }));\n}\n\nfunction primaryGeminiCandidate(\n response: Record<string, unknown>,\n): Record<string, unknown> | undefined {\n if (response.candidates === undefined) return undefined;\n if (!Array.isArray(response.candidates)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidates = response.candidates;\n if (\n candidates.some(\n (candidate) =>\n !isPlainObject(candidate) ||\n (candidate.index !== undefined &&\n (!Number.isSafeInteger(candidate.index) || (candidate.index as number) < 0)),\n )\n ) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const primaryCandidates = candidates.filter(\n (candidate): candidate is Record<string, unknown> =>\n isPlainObject(candidate) && candidate.index === 0,\n );\n if (primaryCandidates.length === 1) {\n return primaryCandidates[0];\n }\n if (primaryCandidates.length > 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n if (candidates.length === 0) return undefined;\n if (candidates.length !== 1) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n const candidate = candidates[0] as Record<string, unknown>;\n if (candidate.index !== undefined && candidate.index !== 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\" });\n }\n return candidate;\n}\n\nfunction providerFinishReasonFromGeminiResponse(\n response: Record<string, unknown>,\n): string | undefined {\n const candidateFinishReason = stringFrom(primaryGeminiCandidate(response)?.finishReason);\n if (candidateFinishReason !== undefined) return candidateFinishReason;\n const promptFeedback = response.promptFeedback ?? response.prompt_feedback;\n if (promptFeedback === undefined) return undefined;\n if (!isPlainObject(promptFeedback)) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n const blockReason = promptFeedback.blockReason ?? promptFeedback.block_reason;\n if (blockReason === undefined) return undefined;\n if (typeof blockReason !== \"string\" || blockReason.length === 0) {\n throw new CompletionProviderOutputError({ kind: \"invalid-response\" });\n }\n return blockReason;\n}\n\nfunction hasGeminiCandidatePayload(response: Record<string, unknown>): boolean {\n return Array.isArray(response.candidates) && response.candidates.length > 0;\n}\n\nfunction hasGeminiFunctionCallMarker(\n response: Record<string, unknown>,\n parts: readonly IndexedGeminiPart[],\n): boolean {\n if (parts.some(({ part }) => ownDataProperty(part, \"functionCall\") !== undefined)) {\n return true;\n }\n if (hasGeminiCandidatePayload(response)) return false;\n const camelCaseCalls = ownDataProperty(response, \"functionCalls\");\n const snakeCaseCalls = ownDataProperty(response, \"function_calls\");\n return (\n (Array.isArray(camelCaseCalls) && camelCaseCalls.length > 0) ||\n (Array.isArray(snakeCaseCalls) && snakeCaseCalls.length > 0)\n );\n}\n\nfunction deterministicGeminiToolCallId(partIndex: number): string {\n return `gemini-tool-${partIndex.toString()}`;\n}\n\nfunction toolCallFromGeminiFunctionCall(\n call: GeminiFunctionCall,\n): Extract<AssistantContentPart, { type: \"tool-call\" }> {\n let toolCall: Extract<AssistantContentPart, { type: \"tool-call\" }> = {\n type: \"tool-call\",\n toolCallId: call.toolCallId,\n toolName: call.name,\n input: call.args,\n };\n if (call.callId !== undefined) toolCall = { ...toolCall, callId: call.callId };\n if (call.signature !== undefined) toolCall = { ...toolCall, signature: call.signature };\n return toolCall;\n}\n\nfunction mergeGeminiStreamToolCalls(\n response: CompletionResponse,\n toolCalls: readonly Extract<AssistantContentPart, { type: \"tool-call\" }>[],\n): CompletionResponse {\n if (toolCalls.length === 0) return response;\n const finalIds = new Set(\n response.choice.flatMap((part) => (part.type === \"tool-call\" ? [part.toolCallId] : [])),\n );\n const missing = toolCalls.filter((toolCall) => !finalIds.has(toolCall.toolCallId));\n return missing.length === 0\n ? response\n : { ...response, choice: [...response.choice, ...missing] };\n}\n\nfunction assertSafeGeminiToolFinishReason(value: string, usage: Usage): void {\n const error = geminiToolFinishError(value, true, usage);\n if (error !== undefined) throw error;\n}\n\nfunction geminiToolFinishError(\n value: string | undefined,\n hasToolCalls: boolean,\n usage: Usage,\n): CompletionProviderOutputError | undefined {\n if (value === \"MALFORMED_FUNCTION_CALL\") {\n return new CompletionProviderOutputError({ kind: \"malformed-tool-arguments\", usage });\n }\n if (value === \"UNEXPECTED_TOOL_CALL\" || value === \"TOO_MANY_TOOL_CALLS\") {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", usage });\n }\n if (!hasToolCalls) return undefined;\n if (value === undefined) {\n return new CompletionProviderOutputError({ kind: \"incomplete-tool-call\", usage });\n }\n const finishReason = geminiFinishReason(value, true);\n if (finishReason === \"tool-calls\") return undefined;\n if (finishReason === \"length\") {\n return new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n return new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction assertSafeGeminiCompletionResponse(response: CompletionResponse): void {\n const toolCalls = response.choice.filter(\n (part): part is Extract<AssistantContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\",\n );\n if (toolCalls.length > 0) {\n if (response.finishReason === undefined) {\n throw new CompletionProviderOutputError({\n kind: \"incomplete-tool-call\",\n usage: response.usage,\n });\n }\n assertNormalizedGeminiToolFinishReason(response.finishReason, response.usage);\n } else if (toolCalls.length === 0 && response.finishReason === \"tool-calls\") {\n throw new CompletionProviderOutputError({\n kind: \"invalid-tool-call\",\n finishReason: response.finishReason,\n usage: response.usage,\n });\n }\n\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const toolCall of toolCalls) {\n if (toolCallIds.has(toolCall.toolCallId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n toolCallIds.add(toolCall.toolCallId);\n if (toolCall.callId !== undefined) {\n if (callIds.has(toolCall.callId)) {\n throw invalidGeminiToolCall(toolCall.toolCallId, response.usage);\n }\n callIds.add(toolCall.callId);\n }\n }\n}\n\nfunction assertDistinctGeminiFunctionCalls(\n calls: readonly GeminiFunctionCall[],\n usage: Usage,\n): void {\n const toolCallIds = new Set<string>();\n const callIds = new Set<string>();\n for (const call of calls) {\n if (toolCallIds.has(call.toolCallId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n toolCallIds.add(call.toolCallId);\n if (call.callId !== undefined) {\n if (callIds.has(call.callId)) {\n throw invalidGeminiToolCall(call.toolCallId, usage);\n }\n callIds.add(call.callId);\n }\n }\n}\n\nfunction assertNormalizedGeminiToolFinishReason(\n finishReason: CompletionFinishReason,\n usage: Usage,\n): void {\n if (finishReason === \"stop\" || finishReason === \"tool-calls\") return;\n if (finishReason === \"length\") {\n throw new CompletionProviderOutputError({\n kind: \"truncated-tool-call\",\n finishReason,\n usage,\n });\n }\n if (finishReason === \"content-filter\") {\n throw new CompletionProviderOutputError({\n kind: \"filtered-tool-call\",\n finishReason,\n usage,\n });\n }\n throw new CompletionProviderOutputError({ kind: \"invalid-tool-call\", finishReason, usage });\n}\n\nfunction geminiProviderOutputErrorWithUsage(\n error: CompletionProviderOutputError,\n usage: Usage,\n): CompletionProviderOutputError {\n if (error.kind === \"truncated-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"length\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.kind === \"filtered-tool-call\") {\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: \"content-filter\",\n toolCallId: error.toolCallId,\n usage,\n });\n }\n if (error.finishReason === \"length\" || error.finishReason === \"content-filter\") {\n throw error;\n }\n return new CompletionProviderOutputError({\n kind: error.kind,\n finishReason: error.finishReason,\n toolCallId: error.toolCallId,\n usage,\n });\n}\n\nfunction invalidGeminiToolCall(toolCallId: string, usage: Usage): CompletionProviderOutputError {\n return new CompletionProviderOutputError({ kind: \"invalid-tool-call\", toolCallId, usage });\n}\n\nfunction invalidGeminiToolCallArguments(\n toolCallId: string,\n usage: Usage,\n): CompletionProviderOutputError {\n return new CompletionProviderOutputError({\n kind: \"invalid-tool-arguments\",\n toolCallId,\n usage,\n });\n}\n\nfunction ownDataProperty(value: Record<string, unknown>, key: string): unknown {\n try {\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n return descriptor !== undefined && \"value\" in descriptor ? descriptor.value : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction isNonblankString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction usageFromGemini(usage: unknown): Usage {\n const raw = isPlainObject(usage) ? usage : {};\n const promptInputTokens = numberFrom(raw.promptTokenCount);\n const toolInputTokens = numberFrom(raw.toolUsePromptTokenCount);\n const inputTokens = promptInputTokens + toolInputTokens;\n const candidateOutputTokens = numberFrom(raw.candidatesTokenCount);\n const reasoningOutputTokens = numberFrom(raw.thoughtsTokenCount);\n const outputTokens = candidateOutputTokens + reasoningOutputTokens;\n const cachedInputTokens = Math.min(promptInputTokens, numberFrom(raw.cachedContentTokenCount));\n const totalTokens = inputTokens + outputTokens;\n return {\n ...Usage.empty(),\n inputTokens,\n outputTokens,\n totalTokens,\n cachedInputTokens,\n details: {\n input: promptInputTokens - cachedInputTokens,\n input_cached_tokens: cachedInputTokens,\n input_tool_use_tokens: toolInputTokens,\n output: candidateOutputTokens,\n output_reasoning_tokens: reasoningOutputTokens,\n total: totalTokens,\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction numberFrom(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? Math.max(0, value) : 0;\n}\n\nfunction stringFrom(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction thoughtSignatureFrom(value: Record<string, unknown>): string | undefined {\n return stringFrom(value.thoughtSignature) ?? stringFrom(value.thought_signature);\n}\n\nfunction toolCallDelta(\n id: string,\n values: {\n callId?: string | undefined;\n name?: string | undefined;\n argumentsDelta?: string | undefined;\n argumentsMode?: ToolCallArgumentsMode | undefined;\n signature?: string | undefined;\n },\n): CompletionModelStreamEvent {\n const event: CompletionModelStreamEvent = { type: \"tool_call_delta\", id };\n if (values.callId !== undefined) event.callId = values.callId;\n if (values.name !== undefined) event.name = values.name;\n if (values.argumentsDelta !== undefined) event.argumentsDelta = values.argumentsDelta;\n if (values.argumentsMode !== undefined) event.argumentsMode = values.argumentsMode;\n if (values.signature !== undefined) event.signature = values.signature;\n return event;\n}\n","import {\n type CompletionRequest,\n type Message as MessageType,\n normalizeDocuments,\n} from \"@anvia/core/completion\";\n\nexport function orderedRequestMessages(request: CompletionRequest): MessageType[] {\n const messages: MessageType[] = [];\n messages.push(...request.chatHistory.filter((message) => message.role === \"system\"));\n const documents = normalizeDocuments(request.documents);\n if (documents !== undefined) {\n messages.push(documents);\n }\n messages.push(...request.chatHistory.filter((message) => message.role !== \"system\"));\n return messages;\n}\n","export function disableGeminiNativeRetries(\n config: Record<string, unknown>,\n): Record<string, unknown> {\n const httpOptions = isPlainObject(config.httpOptions) ? config.httpOptions : {};\n const retryOptions = isPlainObject(httpOptions.retryOptions) ? httpOptions.retryOptions : {};\n return {\n ...config,\n httpOptions: {\n ...httpOptions,\n retryOptions: {\n ...retryOptions,\n attempts: 1,\n },\n },\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import {\n defineCompletionModelControls,\n type CompletionModelSelectControl,\n type NoCompletionModelControls,\n type ReasoningEffortControls,\n} from \"@anvia/core/completion\";\nimport type { GeminiCompletionModelId } from \"./models\";\nimport type { Writable } from \"./type-utils\";\n\nexport const GEMINI_REASONING_EFFORTS = [\"minimal\", \"low\", \"medium\", \"high\"] as const;\n\nexport type GeminiReasoningEffort = (typeof GEMINI_REASONING_EFFORTS)[number];\nexport type GeminiReasoningControls = ReasoningEffortControls<GeminiReasoningEffort>;\n\ntype AllLevelModel =\n | \"gemini-3-flash-preview\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.5-flash\"\n | \"gemini-3.5-flash-lite\"\n | \"gemini-3.6-flash\";\ntype LowMediumHighModel =\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-pro\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.7-flash\";\ntype MinimalHighModel = \"gemini-3.1-flash-lite-image\";\ntype LowHighModel = \"gemini-3-pro-preview\";\n\nexport type GeminiControlsFor<ModelId extends GeminiCompletionModelId> =\n ModelId extends AllLevelModel\n ? GeminiReasoningControls\n : ModelId extends LowMediumHighModel\n ? ReasoningEffortControls<\"low\" | \"medium\" | \"high\">\n : ModelId extends MinimalHighModel\n ? ReasoningEffortControls<\"minimal\" | \"high\">\n : ModelId extends LowHighModel\n ? ReasoningEffortControls<\"low\" | \"high\">\n : NoCompletionModelControls;\n\nconst ALL_LEVEL_HIGH_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"high\");\nconst ALL_LEVEL_MEDIUM_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"medium\");\nconst ALL_LEVEL_MINIMAL_CONTROLS = reasoningControls(GEMINI_REASONING_EFFORTS, \"minimal\");\nconst LOW_MEDIUM_HIGH_CONTROLS = reasoningControls([\"low\", \"medium\", \"high\"] as const);\nconst LOW_MEDIUM_HIGH_DEFAULT_HIGH_CONTROLS = reasoningControls(\n [\"low\", \"medium\", \"high\"] as const,\n \"high\",\n);\nconst LOW_MEDIUM_HIGH_DEFAULT_MEDIUM_CONTROLS = reasoningControls(\n [\"low\", \"medium\", \"high\"] as const,\n \"medium\",\n);\nconst MINIMAL_HIGH_CONTROLS = reasoningControls([\"minimal\", \"high\"] as const, \"minimal\");\nconst LOW_HIGH_CONTROLS = reasoningControls([\"low\", \"high\"] as const, \"high\");\n\nexport function geminiControlsForModel(modelId: string): GeminiReasoningControls | undefined {\n if (ALL_LEVEL_HIGH_MODELS.has(modelId)) return ALL_LEVEL_HIGH_CONTROLS;\n if (ALL_LEVEL_MEDIUM_MODELS.has(modelId)) return ALL_LEVEL_MEDIUM_CONTROLS;\n if (ALL_LEVEL_MINIMAL_MODELS.has(modelId)) return ALL_LEVEL_MINIMAL_CONTROLS;\n if (GEMINI_2_5_MODELS.has(modelId)) return LOW_MEDIUM_HIGH_CONTROLS;\n if (GEMINI_PRO_MODELS.has(modelId)) return LOW_MEDIUM_HIGH_DEFAULT_HIGH_CONTROLS;\n if (modelId === \"gemini-3.7-flash\") return LOW_MEDIUM_HIGH_DEFAULT_MEDIUM_CONTROLS;\n if (modelId === \"gemini-3.1-flash-lite-image\") return MINIMAL_HIGH_CONTROLS;\n if (modelId === \"gemini-3-pro-preview\") return LOW_HIGH_CONTROLS;\n return undefined;\n}\n\nconst ALL_LEVEL_HIGH_MODELS = new Set<string>([\"gemini-3-flash-preview\"]);\nconst ALL_LEVEL_MEDIUM_MODELS = new Set<string>([\"gemini-3.5-flash\", \"gemini-3.6-flash\"]);\nconst ALL_LEVEL_MINIMAL_MODELS = new Set<string>([\n \"gemini-3.1-flash-lite\",\n \"gemini-3.1-flash-lite-preview\",\n \"gemini-3.5-flash-lite\",\n]);\nconst GEMINI_2_5_MODELS = new Set<string>([\n \"gemini-2.5-flash\",\n \"gemini-2.5-flash-lite\",\n \"gemini-2.5-pro\",\n]);\nconst GEMINI_PRO_MODELS = new Set<string>([\n \"gemini-3.1-pro-preview\",\n \"gemini-3.1-pro-preview-customtools\",\n]);\n\nfunction reasoningControls<const Efforts extends readonly GeminiReasoningEffort[]>(\n efforts: Efforts,\n defaultValue?: Efforts[number],\n): ReasoningEffortControls<Efforts[number]> {\n const effortControl: Writable<CompletionModelSelectControl<Efforts[number]>> = {\n type: \"select\",\n label: \"Reasoning effort\",\n description: \"Controls how much reasoning the model applies before responding.\",\n options: efforts,\n };\n if (defaultValue !== undefined) effortControl.defaultValue = defaultValue;\n return defineCompletionModelControls({\n reasoningEffort: effortControl,\n });\n}\n","import type { Embedding, EmbeddingModel, ModelCallOptions } from \"@anvia/core/embeddings\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiEmbeddingModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport type GeminiEmbeddingTaskType =\n | \"TASK_TYPE_UNSPECIFIED\"\n | \"RETRIEVAL_QUERY\"\n | \"RETRIEVAL_DOCUMENT\"\n | \"SEMANTIC_SIMILARITY\"\n | \"CLASSIFICATION\"\n | \"CLUSTERING\"\n | \"QUESTION_ANSWERING\"\n | \"FACT_VERIFICATION\"\n | \"CODE_RETRIEVAL_QUERY\";\n\nexport type GeminiEmbeddingModelOptions = {\n modelId: GeminiEmbeddingModelId;\n dimensions?: number | undefined;\n maxBatchSize?: number | undefined;\n taskType?: GeminiEmbeddingTaskType | undefined;\n title?: string | undefined;\n};\n\nexport class GeminiEmbeddingModel implements EmbeddingModel {\n readonly provider = \"gemini\";\n readonly modelId: GeminiEmbeddingModelId;\n readonly dimensions: number | undefined;\n readonly maxBatchSize: number;\n private readonly taskType: GeminiEmbeddingTaskType | undefined;\n private readonly title: string | undefined;\n\n constructor(\n private readonly client: GoogleGenAI,\n options: GeminiEmbeddingModelOptions,\n ) {\n this.modelId = options.modelId;\n this.dimensions = options.dimensions;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.taskType = options.taskType;\n this.title = options.title;\n }\n\n async embedTexts(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n const embeddings: Embedding[] = [];\n for (let index = 0; index < texts.length; index += this.maxBatchSize) {\n const batch = texts.slice(index, index + this.maxBatchSize);\n embeddings.push(...(await this.embedBatch(batch, options)));\n }\n return embeddings;\n }\n\n private async embedBatch(texts: string[], options?: ModelCallOptions): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const config = { ...this.embeddingConfig() };\n if (options?.abortSignal !== undefined) {\n Object.assign(config, { abortSignal: options.abortSignal });\n }\n const response = await this.client.models.embedContent({\n model: this.modelId,\n contents: texts,\n config: disableGeminiNativeRetries(config),\n } as never);\n const rawEmbeddings = embeddingsFromResponse(response);\n if (rawEmbeddings.length !== texts.length) {\n throw new Error(\n `Embedding response length ${rawEmbeddings.length} did not match input length ${texts.length}`,\n );\n }\n\n return rawEmbeddings.map((vector, index) => ({\n document: texts[index] as string,\n vector,\n }));\n }\n\n private embeddingConfig(): Record<string, unknown> {\n const config: Record<string, unknown> = {};\n if (this.dimensions !== undefined) config.outputDimensionality = this.dimensions;\n if (this.taskType !== undefined) config.taskType = this.taskType;\n if (this.title !== undefined) config.title = this.title;\n return config;\n }\n}\n\nfunction embeddingsFromResponse(response: unknown): number[][] {\n const raw = response as Record<string, unknown>;\n if (Array.isArray(raw.embeddings)) {\n return raw.embeddings.map((embedding, index) => vectorFromEmbedding(embedding, index));\n }\n if (raw.embedding !== undefined) {\n return [vectorFromEmbedding(raw.embedding, 0)];\n }\n return [];\n}\n\nfunction vectorFromEmbedding(embedding: unknown, position: number): number[] {\n if (!isObject(embedding) || !isNumberArray(embedding.values)) {\n throw new Error(`Invalid Gemini embedding response vector at position ${position}.`);\n }\n return embedding.values;\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((item) => typeof item === \"number\");\n}\n","import { Buffer } from \"node:buffer\";\nimport type {\n GeneratedImage,\n ImageGenerationModel,\n ImageGenerationRequest,\n ImageGenerationResult,\n ModelCallOptions,\n} from \"@anvia/core/image-generation\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiGenerateContentImageModelId, GeminiGenerateImagesModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nexport const GEMINI_2_5_FLASH_IMAGE = \"gemini-2.5-flash-image\";\nexport const GEMINI_3_1_FLASH_IMAGE = \"gemini-3.1-flash-image\";\nexport const GEMINI_3_1_FLASH_LITE_IMAGE = \"gemini-3.1-flash-lite-image\";\nexport const GEMINI_3_PRO_IMAGE = \"gemini-3-pro-image\";\nexport const GEMINI_3_PRO_IMAGE_PREVIEW = \"gemini-3-pro-image-preview\";\nexport const IMAGEN_4_GENERATE = \"imagen-4.0-generate-001\";\n\nexport class GeminiImageGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateContentImageModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const providerImageConfig = isPlainObject(providerConfig.imageConfig)\n ? providerConfig.imageConfig\n : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n responseModalities: [\"TEXT\", \"IMAGE\"],\n imageConfig: {\n ...providerImageConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n },\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n contents: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateContent(params as never);\n return nativeImageResponseFromGemini(response);\n }\n}\n\nexport class GeminiImagenGenerationModel implements ImageGenerationModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiGenerateImagesModelId,\n ) {}\n\n async imageGeneration(\n request: ImageGenerationRequest,\n options?: ModelCallOptions,\n ): Promise<ImageGenerationResult<unknown>> {\n const providerOptions = isPlainObject(request.providerOptions) ? request.providerOptions : {};\n const { config: providerConfigValue, ...providerTopLevel } = providerOptions;\n const providerConfig = isPlainObject(providerConfigValue) ? providerConfigValue : {};\n const config: Record<string, unknown> = {\n ...providerConfig,\n aspectRatio: aspectRatio(request.width, request.height),\n };\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n const params: Record<string, unknown> = {\n ...providerTopLevel,\n model: this.modelId,\n prompt: request.prompt,\n config: disableGeminiNativeRetries(config),\n };\n\n const response = await this.client.models.generateImages(params as never);\n return imagenResponseFromGemini(response);\n }\n}\n\nexport function nativeImageResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n const images = candidates.flatMap((candidate): GeneratedImage[] => {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n return [];\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n return parts.flatMap((part): GeneratedImage[] => {\n if (!isPlainObject(part) || !isPlainObject(part.inlineData)) {\n return [];\n }\n const data = part.inlineData.data;\n if (typeof data !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(data),\n mediaType:\n typeof part.inlineData.mimeType === \"string\" ? part.inlineData.mimeType : \"image/png\",\n },\n ];\n });\n });\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no inline image data.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function imagenResponseFromGemini(response: unknown): ImageGenerationResult<unknown> {\n const raw = response as Record<string, unknown>;\n const images = (Array.isArray(raw.generatedImages) ? raw.generatedImages : []).flatMap(\n (item): GeneratedImage[] => {\n if (!isPlainObject(item) || !isPlainObject(item.image)) {\n return [];\n }\n const imageBytes = item.image.imageBytes;\n if (typeof imageBytes !== \"string\") {\n return [];\n }\n return [\n {\n data: decodeBase64Image(imageBytes),\n mediaType: typeof item.image.mimeType === \"string\" ? item.image.mimeType : \"image/png\",\n },\n ];\n },\n );\n\n if (images.length === 0) {\n throw new Error(\"Gemini image generation response contained no base64 images.\");\n }\n\n return {\n images: images as [GeneratedImage, ...GeneratedImage[]],\n rawResponse: response,\n };\n}\n\nexport function aspectRatio(width: number, height: number): string {\n const normalizedWidth = Math.max(1, Math.trunc(width));\n const normalizedHeight = Math.max(1, Math.trunc(height));\n const divisor = gcd(normalizedWidth, normalizedHeight);\n return `${normalizedWidth / divisor}:${normalizedHeight / divisor}`;\n}\n\nfunction gcd(left: number, right: number): number {\n let a = left;\n let b = right;\n while (b !== 0) {\n const next = a % b;\n a = b;\n b = next;\n }\n return a;\n}\n\nfunction decodeBase64Image(value: string): Uint8Array {\n const normalized = value.replace(/\\s/g, \"\").replace(/=+$/, \"\");\n const bytes = Buffer.from(value, \"base64\");\n const roundTrip = bytes.toString(\"base64\").replace(/=+$/, \"\");\n if (normalized.length === 0 || bytes.length === 0 || roundTrip !== normalized) {\n throw new Error(\"Gemini image generation response contained invalid base64 image data.\");\n }\n return new Uint8Array(bytes);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ModelContextLimits } from \"@anvia/core/completion\";\nimport type { ModelId } from \"@anvia/core/model-listing\";\n\nexport type KnownGeminiCompletionModelId =\n | \"gemini-2.0-flash\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.5-flash\"\n | \"gemini-2.5-flash-image\"\n | \"gemini-2.5-flash-lite\"\n | \"gemini-2.5-flash-preview-tts\"\n | \"gemini-2.5-pro\"\n | \"gemini-2.5-pro-preview-tts\"\n | \"gemini-3-flash-preview\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3-pro-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3.1-flash-lite\"\n | \"gemini-3.1-flash-lite-preview\"\n | \"gemini-3.1-pro-preview\"\n | \"gemini-3.1-pro-preview-customtools\"\n | \"gemini-3.5-flash\"\n | \"gemini-3.5-flash-lite\"\n | \"gemini-3.6-flash\"\n | \"gemini-3.7-flash\"\n | \"gemini-3-pro-image\"\n | \"gemini-flash-latest\"\n | \"gemini-flash-lite-latest\"\n | \"gemma-4-26b-a4b-it\"\n | \"gemma-4-31b-it\";\n\nexport type GeminiCompletionModelId = ModelId<KnownGeminiCompletionModelId>;\n\nconst CONTEXT_1M_64K = {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 65_536,\n};\n\nexport const GEMINI_COMPLETION_MODEL_CONTEXT_LIMITS = {\n \"gemini-2.0-flash\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.0-flash-lite\": {\n contextWindow: 1_048_576,\n maxInputTokens: 1_048_576,\n maxOutputTokens: 8_192,\n },\n \"gemini-2.5-flash\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-image\": {\n contextWindow: 32_768,\n maxInputTokens: 32_768,\n maxOutputTokens: 32_768,\n },\n \"gemini-2.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-2.5-flash-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-2.5-pro\": CONTEXT_1M_64K,\n \"gemini-2.5-pro-preview-tts\": {\n contextWindow: 8_192,\n maxInputTokens: 8_192,\n maxOutputTokens: 16_384,\n },\n \"gemini-3-flash-preview\": CONTEXT_1M_64K,\n \"gemini-3-pro-image-preview\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-image-preview\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 65_536,\n },\n \"gemini-3.1-flash-image\": {\n contextWindow: 131_072,\n maxInputTokens: 131_072,\n maxOutputTokens: 32_768,\n },\n \"gemini-3.1-flash-lite-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 4_096,\n },\n \"gemini-3.1-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.1-flash-lite-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview\": CONTEXT_1M_64K,\n \"gemini-3.1-pro-preview-customtools\": CONTEXT_1M_64K,\n \"gemini-3.5-flash\": CONTEXT_1M_64K,\n \"gemini-3.5-flash-lite\": CONTEXT_1M_64K,\n \"gemini-3.6-flash\": CONTEXT_1M_64K,\n \"gemini-3.7-flash\": CONTEXT_1M_64K,\n \"gemini-3-pro-image\": {\n contextWindow: 65_536,\n maxInputTokens: 65_536,\n maxOutputTokens: 32_768,\n },\n \"gemini-flash-latest\": CONTEXT_1M_64K,\n \"gemini-flash-lite-latest\": CONTEXT_1M_64K,\n \"gemma-4-26b-a4b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n \"gemma-4-31b-it\": {\n contextWindow: 262_144,\n maxInputTokens: 262_144,\n maxOutputTokens: 32_768,\n },\n} satisfies Readonly<Record<KnownGeminiCompletionModelId, ModelContextLimits>>;\n\nexport type KnownGeminiEmbeddingModelId =\n | \"gemini-embedding-001\"\n | \"gemini-embedding-2\"\n | \"gemini-embedding-2-preview\";\n\nexport type GeminiEmbeddingModelId = ModelId<KnownGeminiEmbeddingModelId>;\n\nexport type KnownGeminiGenerateContentImageModelId =\n | \"gemini-2.5-flash-image\"\n | \"gemini-3.1-flash-image\"\n | \"gemini-3.1-flash-lite-image\"\n | \"gemini-3-pro-image-preview\"\n | \"gemini-3.1-flash-image-preview\"\n | \"gemini-3-pro-image\";\n\nexport type KnownGeminiGenerateImagesModelId = \"imagen-4.0-generate-001\";\n\nexport type GeminiGenerateContentImageModelId = ModelId<KnownGeminiGenerateContentImageModelId>;\nexport type GeminiGenerateImagesModelId = ModelId<KnownGeminiGenerateImagesModelId>;\n\nexport type GeminiTranscriptionModelId = GeminiCompletionModelId;\n","import { Buffer } from \"node:buffer\";\nimport type {\n ModelCallOptions,\n TranscriptionModel,\n TranscriptionRequest,\n TranscriptionResult,\n} from \"@anvia/core/transcription\";\nimport type { GoogleGenAI } from \"@google/genai\";\nimport type { GeminiTranscriptionModelId } from \"./models\";\nimport { disableGeminiNativeRetries } from \"./retry\";\n\nconst TRANSCRIPTION_PREAMBLE =\n \"Transcribe the provided audio exactly. Do not add additional information.\";\n\nexport class GeminiTranscriptionModel implements TranscriptionModel<unknown> {\n readonly provider = \"gemini\";\n\n constructor(\n private readonly client: GoogleGenAI,\n readonly modelId: GeminiTranscriptionModelId,\n ) {}\n\n async transcription(\n request: TranscriptionRequest,\n options?: ModelCallOptions,\n ): Promise<TranscriptionResult<unknown>> {\n const config: Record<string, unknown> = isPlainObject(request.providerOptions)\n ? { ...request.providerOptions }\n : {};\n if (request.temperature !== undefined) {\n config.temperature = request.temperature;\n }\n if (options?.abortSignal !== undefined) config.abortSignal = options.abortSignal;\n\n const response = await this.client.models.generateContent({\n model: this.modelId,\n contents: [\n {\n role: \"user\",\n parts: [\n {\n inlineData: {\n mimeType: request.mediaType ?? mimeTypeFromFilename(request.filename),\n data: Buffer.from(request.data).toString(\"base64\"),\n },\n },\n ],\n },\n ],\n config: disableGeminiNativeRetries({\n ...config,\n systemInstruction:\n request.prompt === undefined\n ? TRANSCRIPTION_PREAMBLE\n : `${TRANSCRIPTION_PREAMBLE}\\n\\n${request.prompt}`,\n }),\n } as never);\n\n return {\n text: textFromGenerateContentResponse(response),\n rawResponse: response,\n };\n }\n}\n\nexport function textFromGenerateContentResponse(response: unknown): string {\n const raw = response as Record<string, unknown>;\n if (typeof raw.text === \"string\") {\n return raw.text;\n }\n const candidates = Array.isArray(raw.candidates) ? raw.candidates : [];\n for (const candidate of candidates) {\n if (!isPlainObject(candidate) || !isPlainObject(candidate.content)) {\n continue;\n }\n const parts = Array.isArray(candidate.content.parts) ? candidate.content.parts : [];\n for (const part of parts) {\n if (isPlainObject(part) && typeof part.text === \"string\") {\n return part.text;\n }\n }\n }\n throw new Error(\"Gemini transcription response contained no text.\");\n}\n\nfunction mimeTypeFromFilename(filename: string): string {\n const lower = filename.toLowerCase();\n if (lower.endsWith(\".wav\")) return \"audio/wav\";\n if (lower.endsWith(\".aac\")) return \"audio/aac\";\n if (lower.endsWith(\".ogg\")) return \"audio/ogg\";\n if (lower.endsWith(\".flac\")) return \"audio/flac\";\n if (lower.endsWith(\".m4a\")) return \"audio/m4a\";\n if (lower.endsWith(\".opus\")) return \"audio/opus\";\n return \"audio/mpeg\";\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":";;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,EAEE,iCAAAA;AAAA,EAEA;AAAA,OAEK;AAGP;AAAA,EAGE;AAAA,OACK;AAEP,SAAS,mBAA4C;;;ACdrD;AAAA,EAEE;AAAA,EAMA;AAAA,EAGA;AAAA,EAUA;AAAA,EAEA;AAAA,OACK;;;ACzBP;AAAA,EAGE;AAAA,OACK;AAEA,SAAS,uBAAuB,SAA2C;AAChF,QAAM,WAA0B,CAAC;AACjC,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,QAAM,YAAY,mBAAmB,QAAQ,SAAS;AACtD,MAAI,cAAc,QAAW;AAC3B,aAAS,KAAK,SAAS;AAAA,EACzB;AACA,WAAS,KAAK,GAAG,QAAQ,YAAY,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,CAAC;AACnF,SAAO;AACT;;;ACfO,SAAS,2BACd,QACyB;AACzB,QAAM,cAAc,cAAc,OAAO,WAAW,IAAI,OAAO,cAAc,CAAC;AAC9E,QAAM,eAAe,cAAc,YAAY,YAAY,IAAI,YAAY,eAAe,CAAC;AAC3F,SAAO;AAAA,IACL,GAAG;AAAA,IACH,aAAa;AAAA,MACX,GAAG;AAAA,MACH,cAAc;AAAA,QACZ,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;AFwCO,IAAM,wBAAN,MAEkD;AAAA,EAYvD,YACmB,QACR,SACA,eACA,UACT;AAJiB;AACR;AACA;AACA;AAAA,EACR;AAAA,EAJgB;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EAfF,WAAW;AAAA,EACX,eAA4C;AAAA,IACnD,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,WAAW;AAAA,EACb;AAAA,EASQ,YAA6C;AACnD,WAAO,KAAK,kBAAkB,SAC1B,SACA,EAAE,SAAS,KAAK,SAAS,SAAS,KAAK,cAAc;AAAA,EAC3D;AAAA,EAEA,aACE,SACA,UAA4C,CAAC,GACjC;AACZ,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,WAAO,uBAAuB,QAAQ,SAAS,OAAO;AAAA,EACxD;AAAA,EAEA,MAAM,WACJ,SACA,SAC6B;AAC7B,qCAAiC,MAAM,OAAO;AAC9C,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,qBAAiB,QAAQ,OAAO;AAChC,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB,MAAe;AACzE,WAAO,iBAAiB,kCAAkC,QAAQ,GAAG,KAAK,UAAU,CAAC;AAAA,EACvF;AAAA,EAEA,OAAO,iBACL,SACA,SAC2C;AAC3C,qCAAiC,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AACnE,UAAM,SAAS,8BAA8B,KAAK,SAAS,OAAO;AAClE,qBAAiB,QAAQ,OAAO;AAChC,UAAM,SAAS,MAAM,KAAK,OAAO,OAAO,sBAAsB,MAAe;AAC7E,UAAM,cAAc,IAAI,4BAA4B;AACpD,qBAAiB,SAAS,QAA6C;AACrE,YAAM,UAAU,oCAAoC,KAAK;AACzD,kBAAY,OAAO,OAAO,OAAO;AACjC,iBAAW,SAAS,QAAQ,QAAQ;AAClC,YAAI,MAAM,SAAS,SAAS;AAC1B,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,gBAAY,eAAe;AAC3B,UAAM,aAAa,YAAY,WAAW;AAC1C,QAAI,eAAe,QAAW;AAC5B,YAAM;AAAA,QACJ,GAAG;AAAA,QACH,UAAU,iBAAiB,WAAW,UAAU,KAAK,UAAU,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,8BACd,SACA,SACsB;AACtB,QAAM,WAAW,gBAAgB,OAAO;AACxC,MACE,QAAQ,oBAAoB,WAC3B,CAACC,eAAc,QAAQ,eAAe,KAAK,CAAC,YAAY,QAAQ,eAAe,IAChF;AACA,UAAM,IAAI,UAAU,+CAA+C;AAAA,EACrE;AACA,QAAM,kBAAkB,QAAQ,mBAAmB,CAAC;AACpD,QAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,MAAI,wBAAwB,UAAa,CAACA,eAAc,mBAAmB,GAAG;AAC5E,UAAM,IAAI,UAAU,sDAAsD;AAAA,EAC5E;AACA,QAAM,iBAAiB,wBAAwB,SAAY,CAAC,IAAI,EAAE,GAAG,oBAAoB;AACzF,SAAO,eAAe;AACtB,QAAM,eAA6B;AAAA,IACjC,GAAG;AAAA,IACH,GAAG,aAAa,SAAS,QAAQ;AAAA,EACnC;AACA,QAAM,kBAAkB,QAAQ,UAAU;AAC1C,MAAI,oBAAoB,QAAW;AACjC,UAAM,iBAAiBA,eAAc,eAAe,cAAc,IAC9D,EAAE,GAAG,eAAe,eAAe,IACnC,CAAC;AACL,QAAI,QAAQ,WAAW,YAAY,GAAG;AACpC,aAAO,eAAe;AACtB,mBAAa,iBAAiB;AAAA,QAC5B,GAAG;AAAA,QACH,gBAAgB,uBAAuB,eAAe;AAAA,MACxD;AAAA,IACF,OAAO;AACL,aAAO,eAAe;AACtB,mBAAa,iBAAiB,EAAE,GAAG,gBAAgB,eAAe,gBAAgB;AAAA,IACpF;AAAA,EACF;AACA,QAAM,SAAS,2BAA2B,YAAY;AACtD,QAAM,SAA+B;AAAA,IACnC,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU,yBAAyB,QAAQ;AAAA,IAC3C;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,uBAAuB,iBAAiC;AAC/D,MAAI,oBAAoB,MAAO,QAAO;AACtC,MAAI,oBAAoB,SAAU,QAAO;AACzC,MAAI,oBAAoB,OAAQ,QAAO;AACvC,QAAM,IAAI,UAAU,4CAA4C,eAAe,EAAE;AACnF;AAEA,SAAS,iBACP,QACA,SACM;AACN,MAAI,SAAS,gBAAgB,OAAW;AACxC,QAAM,SAASA,eAAc,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC;AAC/D,SAAO,SAAS,EAAE,GAAG,QAAQ,aAAa,QAAQ,YAAY;AAChE;AAEA,SAAS,uBACP,QACA,SACA,SACY;AACZ,QAAM,SAASA,eAAc,OAAO,MAAM,IAAI,OAAO,SAAS,CAAC;AAC/D,SAAO,kBAAkB;AAAA,IACvB,UAAU;AAAA,IACV,KAAK,QAAQ,WAAW,OAAO,iCAAiC;AAAA,IAChE,QAAQ,QAAQ,WAAW;AAAA,IAC3B,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,IACzD,eAAe,OAAO,KAAK,MAAM,EAAE,KAAK;AAAA,IACxC,cAAc,MAAM,QAAQ,OAAO,QAAQ,IAAI,OAAO,SAAS,SAAS;AAAA,IACxE,YAAY,OAAO,KAAK,MAAM,EAAE,KAAK;AAAA,IACrC,WAAW,QAAQ,MAAM;AAAA,IACzB,WAAW,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,IAAI;AAAA,IAChD,sBAAsB,OAAO,sBAAsB;AAAA,IACnD,iBAAiB,QAAQ,iBAAiB;AAAA,IAC1C,aAAa,QAAQ;AAAA,IACrB,WAAW,QAAQ;AAAA,IACnB,YAAY,kBAAkB,QAAQ,UAAU;AAAA,IAChD,oBAAoBA,eAAc,QAAQ,eAAe,IACrD,OAAO,KAAK,QAAQ,eAAe,EAAE,KAAK,IAC1C;AAAA,EACN,CAAC;AACH;AAEA,SAAS,kBAAkB,YAA2D;AACpF,MAAI,eAAe,UAAa,OAAO,eAAe,UAAU;AAC9D,WAAO;AAAA,EACT;AACA,SAAO,EAAE,MAAM,WAAW,MAAM,MAAM,WAAW,KAAK;AACxD;AAEA,SAAS,kBAAkB,QAA6C;AACtE,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,UAAI,CAAC,YAAY,KAAK,GAAG;AACvB,eAAO,CAAC;AAAA,MACV;AACA,aAAO,CAAC,CAAC,KAAK,KAAK,CAAC;AAAA,IACtB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,SAA2C;AAClE,SAAO,uBAAuB,OAAO;AACvC;AAEA,SAAS,aAAa,SAA4B,UAAuC;AACvF,QAAM,SAAuB,CAAC;AAC9B,QAAM,oBAAoB,sBAAsB,SAAS,QAAQ;AACjE,MAAI,sBAAsB,QAAW;AACnC,WAAO,oBAAoB;AAAA,EAC7B;AACA,MAAI,QAAQ,gBAAgB,QAAW;AACrC,WAAO,cAAc,QAAQ;AAAA,EAC/B;AACA,MAAI,QAAQ,cAAc,QAAW;AACnC,WAAO,kBAAkB,QAAQ;AAAA,EACnC;AACA,MAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,WAAO,QAAQ,CAAC,EAAE,sBAAsB,QAAQ,MAAM,IAAI,sBAAsB,EAAE,CAAC;AAAA,EACrF;AACA,MAAI,QAAQ,eAAe,QAAW;AACpC,WAAO,aAAa,mBAAmB,QAAQ,UAAU;AAAA,EAC3D;AACA,MAAI,QAAQ,iBAAiB,QAAW;AACtC,WAAO,mBAAmB;AAC1B,WAAO,qBAAqB,QAAQ;AAAA,EACtC;AACA,SAAO;AACT;AAEA,SAAS,sBACP,SACA,UACoB;AACpB,QAAM,iBAAiB,SAAS;AAAA,IAAQ,CAAC,YACvC,QAAQ,SAAS,WAAW,CAAC,QAAQ,OAAO,IAAI,CAAC;AAAA,EACnD;AACA,MAAI,QAAQ,iBAAiB,QAAW;AACtC,mBAAe,QAAQ,QAAQ,YAAY;AAAA,EAC7C;AACA,SAAO,eAAe,WAAW,IAAI,SAAY,eAAe,KAAK,MAAM;AAC7E;AAEO,SAAS,yBAAyB,UAA0C;AACjF,QAAM,gBAAgB,oBAAI,IAAoB;AAC9C,QAAM,WAA4B,CAAC;AAEnC,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,UAAU;AAC7B;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,aAAa;AAChC,YAAMC,WAAU,gCAAgC,OAAO;AACvD,iBAAW,QAAQ,OAAO,QAAQ,YAAY,WAAW,CAAC,IAAI,QAAQ,SAAS;AAC7E,YAAI,KAAK,SAAS,aAAa;AAC7B,wBAAc,IAAI,KAAK,YAAY,KAAK,QAAQ;AAChD,cAAI,KAAK,WAAW,QAAW;AAC7B,0BAAc,IAAI,KAAK,QAAQ,KAAK,QAAQ;AAAA,UAC9C;AAAA,QACF;AAAA,MACF;AACA,UAAIA,SAAQ,MAAM,SAAS,GAAG;AAC5B,iBAAS,KAAKA,QAAO;AAAA,MACvB;AACA;AAAA,IACF;AAEA,UAAM,UACJ,QAAQ,SAAS,SACb,2BAA2B,SAAS,aAAa,IACjD,2BAA2B,OAAO;AACxC,QAAI,QAAQ,MAAM,SAAS,GAAG;AAC5B,eAAS,KAAK,OAAO;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,2BACP,SACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OACE,OAAO,QAAQ,YAAY,WACvB,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC,IAC1B,QAAQ,QAAQ,IAAI,uBAAuB;AAAA,EACnD;AACF;AAEA,SAAS,2BACP,SACA,eACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO,QAAQ,QAAQ,IAAI,CAAC,YAAY;AACtC,UAAI,QAAQ,SAAS,eAAe;AAClC,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO,wBAAwB,SAAS,aAAa;AAAA,IACvD,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gCACP,SACe;AACf,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OACE,OAAO,QAAQ,YAAY,WACvB,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC,IAC1B,QAAQ,QAAQ,QAAQ,CAAC,YAA0B;AACjD,UAAI,QAAQ,SAAS,QAAQ;AAC3B,cAAM,OAAmB,EAAE,MAAM,QAAQ,KAAK;AAC9C,YAAI,QAAQ,cAAc,QAAW;AACnC,eAAK,mBAAmB,QAAQ;AAAA,QAClC;AACA,eAAO,CAAC,IAAI;AAAA,MACd;AACA,UAAI,QAAQ,SAAS,aAAa;AAChC,cAAM,eAAwC;AAAA,UAC5C,MAAM,QAAQ;AAAA,UACd,MAAM,QAAQ;AAAA,QAChB;AACA,YAAI,QAAQ,WAAW,QAAW;AAChC,uBAAa,KAAK,QAAQ;AAAA,QAC5B;AACA,cAAM,OAAmB,EAAE,aAAa;AACxC,YAAI,QAAQ,cAAc,QAAW;AACnC,eAAK,mBAAmB,QAAQ;AAAA,QAClC;AACA,eAAO,CAAC,IAAI;AAAA,MACd;AACA,UAAI,QAAQ,SAAS,eAAe,QAAQ,YAAY,QAAW;AACjE,eAAO,QAAQ,QAAQ,QAAQ,CAAC,cAA4B;AAC1D,cAAI,UAAU,SAAS,UAAU,UAAU,SAAS,WAAW;AAC7D,mBAAO,CAAC;AAAA,UACV;AACA,gBAAM,OAAmB,EAAE,MAAM,UAAU,MAAM,SAAS,KAAK;AAC/D,cAAI,UAAU,SAAS,UAAU,UAAU,cAAc,QAAW;AAClE,iBAAK,mBAAmB,UAAU;AAAA,UACpC;AACA,iBAAO,CAAC,IAAI;AAAA,QACd,CAAC;AAAA,MACH;AACA,UAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,QAAQ;AACvD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AACA,aAAO,CAAC;AAAA,IACV,CAAC;AAAA,EACT;AACF;AAEA,SAAS,wBAAwB,SAAsC;AACrE,MAAI,QAAQ,SAAS,QAAQ;AAC3B,WAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,EAC9B;AACA,MAAI,QAAQ,SAAS,SAAS;AAC5B,WAAO,yBAAyB,OAAO;AAAA,EACzC;AACA,SAAO,4BAA4B,OAAO;AAC5C;AAEA,SAAS,yBACP,SACY;AACZ,MAAI,QAAQ,MAAM,SAAS,QAAQ;AACjC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,QAAQ,aAAa;AAAA,QAC/B,MAAM,QAAQ,MAAM;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,QAAQ,MAAM;AAAA,MACvB,UAAU,QAAQ,aAAa,qBAAqB,QAAQ,MAAM,GAAG;AAAA,IACvE;AAAA,EACF;AACF;AAEA,SAAS,qBAAqB,KAAqB;AACjD,QAAM,WAAW,gBAAgB,GAAG,EAAE,YAAY;AAClD,MAAI,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,OAAO,EAAG,QAAO;AACpE,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,MAAI,SAAS,SAAS,MAAM,EAAG,QAAO;AACtC,MAAI,SAAS,SAAS,MAAM,EAAG,QAAO;AACtC,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,SAAO;AACT;AAEA,SAAS,gBAAgB,KAAqB;AAC5C,MAAI;AACF,WAAO,IAAI,IAAI,GAAG,EAAE;AAAA,EACtB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,4BACP,SACY;AACZ,MAAI,QAAQ,KAAK,SAAS,QAAQ;AAChC,WAAO,EAAE,MAAM,QAAQ,KAAK,KAAK;AAAA,EACnC;AAEA,MAAI,QAAQ,KAAK,SAAS,QAAQ;AAChC,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,QAAQ;AAAA,QAClB,MAAM,QAAQ,KAAK;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU;AAAA,MACR,SAAS,QAAQ,KAAK;AAAA,MACtB,UAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AACF;AAEA,SAAS,wBACP,SACA,eACY;AACZ,QAAM,KAAK,QAAQ,UAAU,QAAQ;AACrC,QAAM,mBAA4C;AAAA,IAChD,MAAM,QAAQ,YAAY,cAAc,IAAI,EAAE,KAAK,QAAQ;AAAA,IAC3D,UAAU,mBAAmB,OAAO;AAAA,EACtC;AACA,MAAI,QAAQ,WAAW,QAAW;AAChC,qBAAiB,KAAK,QAAQ;AAAA,EAChC;AACA,SAAO,EAAE,iBAAiB;AAC5B;AAEA,SAAS,mBAAmB,SAAkD;AAC5E,QAAM,SAAS,QAAQ;AACvB,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,EAAE,QAAQ,OAAO,MAAM;AAAA,EAChC;AACA,MAAI,OAAO,SAAS,QAAQ;AAC1B,WAAO,EAAE,SAAS,OAAO,MAAM;AAAA,EACjC;AACA,MAAI,OAAO,SAAS,gBAAgB,OAAO,SAAS,cAAc;AAChE,WAAO,EAAE,OAAO,OAAO,MAAM;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,oBAAoB;AACtC,WAAO,EAAE,OAAO,OAAO,UAAU,6BAA6B;AAAA,EAChE;AACA,SAAO;AAAA,IACL,SAAS,OAAO,MACb,IAAI,CAAC,SAAU,KAAK,SAAS,SAAS,KAAK,OAAO,SAAS,KAAK,SAAS,GAAI,EAC7E,KAAK,IAAI;AAAA,EACd;AACF;AAEA,SAAS,uBAAuB,MAAkC;AAChE,SAAO;AAAA,IACL,MAAM,KAAK;AAAA,IACX,aAAa,KAAK;AAAA,IAClB,sBAAsB,KAAK;AAAA,EAC7B;AACF;AAEA,SAAS,mBAAmB,YAAoC;AAC9D,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,EAAE;AAAA,EACnD;AACA,MAAI,eAAe,YAAY;AAC7B,WAAO,EAAE,uBAAuB,EAAE,MAAM,MAAM,EAAE;AAAA,EAClD;AACA,MAAI,eAAe,QAAQ;AACzB,WAAO,EAAE,uBAAuB,EAAE,MAAM,OAAO,EAAE;AAAA,EACnD;AACA,SAAO;AAAA,IACL,uBAAuB;AAAA,MACrB,MAAM;AAAA,MACN,sBAAsB,CAAC,WAAW,IAAI;AAAA,IACxC;AAAA,EACF;AACF;AAEO,SAAS,kCAAkC,UAAuC;AACvF,QAAM,MAAMD,eAAc,QAAQ,IAAI,WAAW,CAAC;AAClD,QAAM,QAAQ,gBAAgB,IAAI,aAAa;AAC/C,QAAM,QAAQ,eAAe,KAAK,KAAK;AACvC,QAAM,uBAAuB,uCAAuC,GAAG;AACvE,QAAM,cAAc;AAAA,IAClB;AAAA,IACA,4BAA4B,KAAK,KAAK;AAAA,IACtC;AAAA,EACF;AACA,MAAI,gBAAgB,OAAW,OAAM;AACrC,QAAM,SAAS,mCAAmC,KAAK,KAAK;AAE5D,QAAM,SAA6B;AAAA,IACjC;AAAA,IACA;AAAA,IACA,aAAa;AAAA,EACf;AACA,0BAAwB,QAAQ,GAAG;AACnC,QAAM,KAAK,WAAW,IAAI,UAAU,KAAK,WAAW,IAAI,EAAE;AAC1D,MAAI,OAAO,QAAW;AACpB,WAAO,YAAY;AAAA,EACrB;AACA,qCAAmC,MAAM;AACzC,SAAO;AACT;AAEA,SAAS,wBACP,UACA,KACA,uBAAuB,OACjB;AACN,QAAM,QAAQ,uCAAuC,GAAG;AACxD,MAAI,UAAU,OAAW;AACzB,+BAA6B,UAAU,OAAO,oBAAoB;AACpE;AAEA,SAAS,6BACP,UACA,OACA,sBACM;AACN,WAAS,eAAe;AAAA,IACtB;AAAA,IACA,wBAAwB,SAAS,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS,WAAW;AAAA,EAClF;AACA,WAAS,uBAAuB;AAClC;AAEA,SAAS,mBAAmB,OAAe,cAA+C;AACxF,MAAI,UAAU,aAAc,QAAO;AACnC,MACE,UAAU,YACV,UAAU,gBACV,UAAU,eACV,UAAU,wBACV,UAAU,UACV,UAAU,kBACV,UAAU,4BACV;AACA,WAAO;AAAA,EACT;AACA,MAAI,UAAU,QAAQ;AACpB,WAAO,eAAe,eAAe;AAAA,EACvC;AACA,SAAO;AACT;AAQA,SAAS,oCAAoC,OAA0C;AACrF,MAAI,CAACE,eAAc,KAAK,GAAG;AACzB,WAAO;AAAA,MACL,QAAQ,CAAC;AAAA,MACT,WAAW,CAAC;AAAA,MACZ,mBAAmB;AAAA,MACnB,uBAAuB;AAAA,IACzB;AAAA,EACF;AAEA,QAAM,SAAuC,CAAC;AAC9C,QAAM,QAAQ,gBAAgB,MAAM,aAAa;AACjD,QAAM,QAAQ,eAAe,OAAO,KAAK;AACzC,QAAM,uBAAuB,uCAAuC,KAAK;AACzE,QAAM,oBAAoB,4BAA4B,OAAO,KAAK;AAClE,QAAM,gBACJ,yBAAyB,SACrB,SACA,sBAAsB,sBAAsB,mBAAmB,KAAK;AAC1E,QAAM,QACJ,kBAAkB,SAAY,gCAAgC,OAAO,OAAO,KAAK,IAAI,CAAC;AACxF,QAAM,aAAa,uBAAuB,OAAO,KAAK;AACtD,MAAI,kBAAkB,UAAa,WAAW,SAAS,KAAK,MAAM,WAAW,GAAG;AAC9E,WAAO,KAAK,EAAE,MAAM,cAAc,OAAO,WAAW,CAAC;AAAA,EACvD;AACA,aAAW,EAAE,KAAK,KAAK,kBAAkB,SAAY,QAAQ,CAAC,GAAG;AAC/D,QAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,GAAG;AACzD,UAAI,KAAK,YAAY,MAAM;AACzB,eAAO,KAAK,EAAE,MAAM,mBAAmB,OAAO,KAAK,MAAM,aAAa,UAAU,CAAC;AAAA,MACnF,OAAO;AACL,eAAO,KAAK,EAAE,MAAM,cAAc,OAAO,KAAK,KAAK,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACA,aAAW,QAAQ,OAAO;AACxB,WAAO;AAAA,MACL,cAAc,KAAK,YAAY;AAAA,QAC7B,QAAQ,KAAK;AAAA,QACb,MAAM,KAAK;AAAA,QACX,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,IACH;AACA,UAAM,iBAAiB,KAAK,UAAU,KAAK,IAAI;AAC/C,QAAI,mBAAmB,QAAW;AAChC,YAAM,+BAA+B,KAAK,YAAY,KAAK;AAAA,IAC7D;AACA,WAAO;AAAA,MACL,cAAc,KAAK,YAAY;AAAA,QAC7B,QAAQ,KAAK;AAAA,QACb;AAAA,QACA,eAAe;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,EACF;AACA,QAAM,KAAK,WAAW,MAAM,UAAU,KAAK,WAAW,MAAM,EAAE;AAC9D,MAAI,OAAO,QAAW;AACpB,WAAO,KAAK,EAAE,MAAM,cAAc,GAAG,CAAC;AAAA,EACxC;AACA,MAAIA,eAAc,MAAM,aAAa,GAAG;AACtC,QAAI,kBAAkB,QAAW;AAC/B,aAAO,KAAK,EAAE,MAAM,SAAS,UAAU,kCAAkC,KAAK,EAAE,CAAC;AAAA,IACnF,OAAO;AACL,YAAM,WAA+B,EAAE,QAAQ,CAAC,GAAG,OAAO,aAAa,MAAM;AAC7E,UAAI,yBAAyB,QAAW;AACtC,qCAA6B,UAAU,sBAAsB,IAAI;AAAA,MACnE;AACA,aAAO,KAAK,EAAE,MAAM,SAAS,SAAS,CAAC;AAAA,IACzC;AAAA,EACF;AACA,SAAO,yBAAyB,SAC5B;AAAA,IACE;AAAA,IACA,WAAW,MAAM,IAAI,8BAA8B;AAAA,IACnD;AAAA,IACA,uBAAuB,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAS;AAAA,IACrE;AAAA,EACF,IACA;AAAA,IACE;AAAA,IACA,WAAW,MAAM,IAAI,8BAA8B;AAAA,IACnD;AAAA,IACA,uBAAuB,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAS;AAAA,IACrE;AAAA,IACA;AAAA,EACF;AACN;AAEA,IAAM,8BAAN,MAAkC;AAAA,EACf,YAAY,oBAAI,IAG/B;AAAA,EACM;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,4BAA4B;AAAA,EAC5B;AAAA,EAER,OAAO,OAAgB,SAAyC;AAC9D,QAAI,QAAQ,yBAAyB,KAAK,2BAA2B;AACnE,YAAM,aAAa,QAAQ,UAAU;AAAA,QACnC,CAAC,aAAa,SAAS,WAAW;AAAA,MACpC,GAAG;AACH,YAAM,eAAe,SACjB,IAAI,8BAA8B;AAAA,QAChC,MAAM;AAAA,QACN,OAAO,KAAK,aAAa;AAAA,MAC3B,CAAC,IACD,sBAAsB,YAAY,KAAK,aAAa,CAAC;AAAA,IAC3D;AACA,QACE,KAAK,yBAAyB,WAC7B,QAAQ,qBAAqB,0BAA0B,QAAQ,MAAM,IACtE;AACA,YAAM,IAAI,8BAA8B;AAAA,QACtC,MAAM;AAAA,QACN,cAAc;AAAA,QACd,OAAO,KAAK,aAAa;AAAA,MAC3B,CAAC;AAAA,IACH;AACA,eAAW,YAAY,QAAQ,WAAW;AACxC,YAAM,WAAW,KAAK,UAAU,IAAI,SAAS,UAAU;AACvD,UAAI,aAAa,QAAW;AAC1B,YACE,SAAS,WAAW,UACpB,SAAS,WAAW,UACpB,CAAC,mBAAmB,UAAU,QAAQ,GACtC;AACA,gBAAM,sBAAsB,SAAS,YAAY,KAAK,aAAa,CAAC;AAAA,QACtE;AACA;AAAA,MACF;AACA,WAAK,UAAU,IAAI,SAAS,YAAY,QAAQ;AAAA,IAClD;AACA,SAAK,sBAAsB,QAAQ;AACnC,SAAK,8BAA8B,QAAQ;AAC3C,eAAW,SAAS,QAAQ,QAAQ;AAClC,UAAI,MAAM,SAAS,SAAS;AAC1B,aAAK,gBAAgB,MAAM;AAAA,MAC7B;AAAA,IACF;AACA,SAAK,kBAAkB,QAAQ;AAE/B,QAAI,QAAQ,yBAAyB,QAAW;AAC9C,UACE,KAAK,yBAAyB,UAC9B,KAAK,yBAAyB,QAAQ,sBACtC;AACA,cAAM,IAAI,8BAA8B;AAAA,UACtC,MAAM;AAAA,UACN,cAAc;AAAA,UACd,OAAO,KAAK,aAAa;AAAA,QAC3B,CAAC;AAAA,MACH;AACA,WAAK,uBAAuB,QAAQ;AACpC,WAAK,gBAAgB;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,iBAAuB;AACrB,QAAI,KAAK,kBAAkB,QAAW;AACpC,YAAM,mCAAmC,KAAK,eAAe,KAAK,aAAa,CAAC;AAAA,IAClF;AACA,QAAI,CAAC,KAAK,qBAAqB,KAAK,UAAU,SAAS,EAAG;AAC1D,QAAI,KAAK,yBAAyB,QAAW;AAC3C,uCAAiC,KAAK,sBAAsB,KAAK,aAAa,CAAC;AAC/E;AAAA,IACF;AACA,UAAM,aAAa,KAAK,UAAU,KAAK,EAAE,KAAK,EAAE;AAChD,UAAM,IAAI;AAAA,MACR,eAAe,SACX,EAAE,MAAM,wBAAwB,OAAO,KAAK,aAAa,EAAE,IAC3D,EAAE,MAAM,wBAAwB,YAAY,OAAO,KAAK,aAAa,EAAE;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,aAAiF;AAC/E,QAAI,WAAW,KAAK;AACpB,QAAI,aAAa,QAAW;AAC1B,UAAI,KAAK,kBAAkB,QAAW;AACpC,eAAO;AAAA,MACT;AACA,YAAM,MAAMA,eAAc,KAAK,aAAa,IAAI,KAAK,gBAAgB,CAAC;AACtE,iBAAW;AAAA,QACT,QAAQ,CAAC;AAAA,QACT,OAAO,gBAAgB,IAAI,aAAa;AAAA,QACxC,aAAa,KAAK;AAAA,MACpB;AACA,YAAM,YAAY,WAAW,IAAI,UAAU,KAAK,WAAW,IAAI,EAAE;AACjE,UAAI,cAAc,OAAW,UAAS,YAAY;AAAA,IACpD;AAEA,eAAW,2BAA2B,UAAU,CAAC,GAAG,KAAK,UAAU,OAAO,CAAC,CAAC;AAC5E,QAAI,KAAK,yBAAyB,QAAW;AAC3C,mCAA6B,UAAU,KAAK,sBAAsB,KAAK,UAAU,OAAO,CAAC;AAAA,IAC3F;AACA,uCAAmC,QAAQ;AAC3C,WAAO,EAAE,MAAM,SAAS,SAAS;AAAA,EACnC;AAAA,EAEQ,eAAsB;AAC5B,QAAI,KAAK,kBAAkB,QAAW;AACpC,aAAO,KAAK,cAAc;AAAA,IAC5B;AACA,UAAM,MAAMA,eAAc,KAAK,aAAa,IAAI,KAAK,gBAAgB,CAAC;AACtE,WAAO,gBAAgB,IAAI,aAAa;AAAA,EAC1C;AACF;AAEA,SAAS,0BAA0B,QAAwD;AACzF,SAAO,OAAO;AAAA,IACZ,CAAC,UACC,MAAM,SAAS,gBACf,MAAM,SAAS,qBACf,MAAM,SAAS,qBACf,MAAM,SAAS,eACf,MAAM,SAAS;AAAA,EACnB;AACF;AAEA,SAAS,mBACP,MACA,OACS;AACT,SACE,KAAK,aAAa,MAAM,YACxB,KAAK,WAAW,MAAM,UACtB,KAAK,cAAc,MAAM,aACzB,cAAc,KAAK,OAAO,MAAM,KAAK;AAEzC;AAEA,SAAS,cAAc,MAAiB,OAA2B;AACjE,MAAI,OAAO,GAAG,MAAM,KAAK,EAAG,QAAO;AACnC,MAAI,YAAY,IAAI,KAAK,YAAY,KAAK,GAAG;AAC3C,WACE,YAAY,IAAI,KAChB,YAAY,KAAK,KACjB,KAAK,WAAW,MAAM,UACtB,KAAK,MAAM,CAAC,OAAO,UAAU;AAC3B,YAAM,aAAa,MAAM,KAAK;AAC9B,aAAO,eAAe,UAAa,cAAc,OAAO,UAAU;AAAA,IACpE,CAAC;AAAA,EAEL;AACA,MAAI,SAAS,QAAQ,UAAU,QAAQ,OAAO,SAAS,YAAY,OAAO,UAAU,UAAU;AAC5F,WAAO;AAAA,EACT;AACA,QAAM,WAAW,OAAO,KAAK,IAAI;AACjC,QAAM,YAAY,OAAO,KAAK,KAAK;AACnC,SACE,SAAS,WAAW,UAAU,UAC9B,SAAS;AAAA,IACP,CAAC,QACC,OAAO,OAAO,OAAO,GAAG,KAAK,cAAc,KAAK,GAAG,GAAgB,MAAM,GAAG,CAAc;AAAA,EAC9F;AAEJ;AAEA,SAAS,YAAY,OAAiD;AACpE,SAAO,MAAM,QAAQ,KAAK;AAC5B;AAEA,SAAS,mCACP,UACA,OACwB;AACxB,QAAM,QAAQ,eAAe,UAAU,KAAK;AAC5C,QAAM,QAAQ,gCAAgC,UAAU,OAAO,KAAK;AACpE,MAAI,MAAM,WAAW,GAAG;AACtB,UAAMC,UAAiC,CAAC;AACxC,UAAM,OAAO,uBAAuB,UAAU,KAAK;AACnD,QAAI,KAAK,SAAS,EAAG,CAAAA,QAAO,KAAK,EAAE,MAAM,QAAQ,KAAK,CAAC;AACvD,IAAAA,QAAO,KAAK,GAAG,MAAM,IAAI,8BAA8B,CAAC;AACxD,WAAOA;AAAA,EACT;AAEA,QAAM,mBAAmB,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,WAAW,IAAI,CAAC,CAAC;AAC5E,QAAM,SAAiC,CAAC;AACxC,aAAW,EAAE,OAAO,KAAK,KAAK,OAAO;AACnC,QAAI,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,GAAG;AACzD,UAAI,KAAK,YAAY,MAAM;AACzB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,SAAS,CAAC,EAAE,MAAM,WAAW,MAAM,KAAK,KAAK,CAAC;AAAA,QAChD,CAAC;AAAA,MACH,OAAO;AACL,cAAM,YAAY,qBAAqB,IAAI;AAC3C,YAAI,OAAwD;AAAA,UAC1D,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,QACb;AACA,YAAI,cAAc,OAAW,QAAO,EAAE,GAAG,MAAM,UAAU;AACzD,eAAO,KAAK,IAAI;AAAA,MAClB;AAAA,IACF;AACA,UAAM,OAAO,iBAAiB,IAAI,KAAK;AACvC,QAAI,SAAS,QAAW;AACtB,aAAO,KAAK,+BAA+B,IAAI,CAAC;AAAA,IAClD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,uBACP,UACA,QAAQ,eAAe,QAAQ,GACvB;AACR,MAAI,MAAM,SAAS,GAAG;AACpB,WAAO,MACJ;AAAA,MAAQ,CAAC,EAAE,KAAK,MACf,KAAK,YAAY,QAAQ,OAAO,KAAK,SAAS,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC1E,EACC,KAAK,EAAE;AAAA,EACZ;AACA,MAAI,0BAA0B,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AACA,QAAM,aAAa,gBAAgB,UAAU,MAAM;AACnD,SAAO,OAAO,eAAe,WAAW,aAAa;AACvD;AAEA,SAAS,gCACP,UACA,OACA,OACsB;AACtB,MAAI,MAAM,SAAS,GAAG;AACpB,UAAMC,SAAQ,MAAM,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM;AAC/C,UAAI,KAAK,iBAAiB,QAAW;AACnC,eAAO,CAAC;AAAA,MACV;AACA,UAAI,CAACF,eAAc,KAAK,YAAY,GAAG;AACrC,cAAM,sBAAsB,8BAA8B,KAAK,GAAG,KAAK;AAAA,MACzE;AACA,aAAO,CAAC,2BAA2B,KAAK,cAAc,MAAM,OAAO,KAAK,CAAC;AAAA,IAC3E,CAAC;AACD,sCAAkCE,QAAO,KAAK;AAC9C,WAAOA;AAAA,EACT;AACA,MAAI,0BAA0B,QAAQ,GAAG;AACvC,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,iBAAiB,gBAAgB,UAAU,eAAe;AAChE,QAAM,iBAAiB,gBAAgB,UAAU,gBAAgB;AACjE,QAAM,cAAc,MAAM,QAAQ,cAAc,IAC5C,iBACA,MAAM,QAAQ,cAAc,IAC1B,iBACA,CAAC;AACP,QAAM,QAAQ,YAAY,IAAI,CAAC,MAAM,UAAU;AAC7C,QAAI,CAACF,eAAc,IAAI,GAAG;AACxB,YAAM,sBAAsB,8BAA8B,KAAK,GAAG,KAAK;AAAA,IACzE;AACA,WAAO,2BAA2B,MAAM,MAAM,OAAO,KAAK;AAAA,EAC5D,CAAC;AACD,oCAAkC,OAAO,KAAK;AAC9C,SAAO;AACT;AAEA,SAAS,2BACP,MACA,MACA,WACA,OACoB;AACpB,QAAM,aAAa,8BAA8B,SAAS;AAC1D,QAAM,YAAY,KAAK;AACvB,QAAM,SAAS,iBAAiB,SAAS,IAAI,YAAY;AACzD,QAAM,aAAa,UAAU;AAC7B,MAAI,cAAc,UAAa,WAAW,QAAW;AACnD,UAAM,sBAAsB,YAAY,KAAK;AAAA,EAC/C;AACA,MACE,KAAK,gBAAgB,UACrB,KAAK,iBAAiB,UACtB,KAAK,iBAAiB,UACtB,KAAK,kBAAkB,QACvB;AACA,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,OAAO,KAAK;AAClB,MAAI,CAAC,iBAAiB,IAAI,GAAG;AAC3B,UAAM,sBAAsB,YAAY,KAAK;AAAA,EAC/C;AACA,QAAM,OAAO,KAAK;AAClB,MAAI,CAACA,eAAc,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG;AAC9C,UAAM,+BAA+B,YAAY,KAAK;AAAA,EACxD;AAEA,QAAM,aAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,YAAY,qBAAqB,IAAI,KAAK,qBAAqB,IAAI;AACzE,MAAI,WAAW,QAAW;AACxB,WAAO,cAAc,SACjB,EAAE,GAAG,YAAY,OAAO,IACxB,EAAE,GAAG,YAAY,QAAQ,UAAU;AAAA,EACzC;AACA,SAAO,cAAc,SAAY,aAAa,EAAE,GAAG,YAAY,UAAU;AAC3E;AAEA,SAAS,eAAe,UAAmC,OAAoC;AAC7F,QAAM,YAAY,uBAAuB,QAAQ;AACjD,MAAI,cAAc,UAAa,UAAU,YAAY,QAAW;AAC9D,WAAO,CAAC;AAAA,EACV;AACA,MAAI,CAACA,eAAc,UAAU,OAAO,GAAG;AACrC,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,MAAI,UAAU,QAAQ,UAAU,OAAW,QAAO,CAAC;AACnD,MAAI,CAAC,MAAM,QAAQ,UAAU,QAAQ,KAAK,GAAG;AAC3C,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,MAAI,UAAU,QAAQ,MAAM,KAAK,CAAC,SAAS,CAACA,eAAc,IAAI,CAAC,GAAG;AAChE,UAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC9E;AACA,SAAO,UAAU,QAAQ,MAAM,IAAI,CAAC,MAAM,WAAW;AAAA,IACnD;AAAA,IACA;AAAA,EACF,EAAE;AACJ;AAEA,SAAS,uBACP,UACqC;AACrC,MAAI,SAAS,eAAe,OAAW,QAAO;AAC9C,MAAI,CAAC,MAAM,QAAQ,SAAS,UAAU,GAAG;AACvC,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,aAAa,SAAS;AAC5B,MACE,WAAW;AAAA,IACT,CAACG,eACC,CAACH,eAAcG,UAAS,KACvBA,WAAU,UAAU,WAClB,CAAC,OAAO,cAAcA,WAAU,KAAK,KAAMA,WAAU,QAAmB;AAAA,EAC/E,GACA;AACA,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,oBAAoB,WAAW;AAAA,IACnC,CAACA,eACCH,eAAcG,UAAS,KAAKA,WAAU,UAAU;AAAA,EACpD;AACA,MAAI,kBAAkB,WAAW,GAAG;AAClC,WAAO,kBAAkB,CAAC;AAAA,EAC5B;AACA,MAAI,kBAAkB,SAAS,GAAG;AAChC,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,MAAI,WAAW,WAAW,GAAG;AAC3B,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,QAAM,YAAY,WAAW,CAAC;AAC9B,MAAI,UAAU,UAAU,UAAa,UAAU,UAAU,GAAG;AAC1D,UAAM,IAAI,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAAA,EACvE;AACA,SAAO;AACT;AAEA,SAAS,uCACP,UACoB;AACpB,QAAM,wBAAwB,WAAW,uBAAuB,QAAQ,GAAG,YAAY;AACvF,MAAI,0BAA0B,OAAW,QAAO;AAChD,QAAM,iBAAiB,SAAS,kBAAkB,SAAS;AAC3D,MAAI,mBAAmB,OAAW,QAAO;AACzC,MAAI,CAACH,eAAc,cAAc,GAAG;AAClC,UAAM,IAAI,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAAA,EACtE;AACA,QAAM,cAAc,eAAe,eAAe,eAAe;AACjE,MAAI,gBAAgB,OAAW,QAAO;AACtC,MAAI,OAAO,gBAAgB,YAAY,YAAY,WAAW,GAAG;AAC/D,UAAM,IAAI,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAAA,EACtE;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,UAA4C;AAC7E,SAAO,MAAM,QAAQ,SAAS,UAAU,KAAK,SAAS,WAAW,SAAS;AAC5E;AAEA,SAAS,4BACP,UACA,OACS;AACT,MAAI,MAAM,KAAK,CAAC,EAAE,KAAK,MAAM,gBAAgB,MAAM,cAAc,MAAM,MAAS,GAAG;AACjF,WAAO;AAAA,EACT;AACA,MAAI,0BAA0B,QAAQ,EAAG,QAAO;AAChD,QAAM,iBAAiB,gBAAgB,UAAU,eAAe;AAChE,QAAM,iBAAiB,gBAAgB,UAAU,gBAAgB;AACjE,SACG,MAAM,QAAQ,cAAc,KAAK,eAAe,SAAS,KACzD,MAAM,QAAQ,cAAc,KAAK,eAAe,SAAS;AAE9D;AAEA,SAAS,8BAA8B,WAA2B;AAChE,SAAO,eAAe,UAAU,SAAS,CAAC;AAC5C;AAEA,SAAS,+BACP,MACsD;AACtD,MAAI,WAAiE;AAAA,IACnE,MAAM;AAAA,IACN,YAAY,KAAK;AAAA,IACjB,UAAU,KAAK;AAAA,IACf,OAAO,KAAK;AAAA,EACd;AACA,MAAI,KAAK,WAAW,OAAW,YAAW,EAAE,GAAG,UAAU,QAAQ,KAAK,OAAO;AAC7E,MAAI,KAAK,cAAc,OAAW,YAAW,EAAE,GAAG,UAAU,WAAW,KAAK,UAAU;AACtF,SAAO;AACT;AAEA,SAAS,2BACP,UACA,WACoB;AACpB,MAAI,UAAU,WAAW,EAAG,QAAO;AACnC,QAAM,WAAW,IAAI;AAAA,IACnB,SAAS,OAAO,QAAQ,CAAC,SAAU,KAAK,SAAS,cAAc,CAAC,KAAK,UAAU,IAAI,CAAC,CAAE;AAAA,EACxF;AACA,QAAM,UAAU,UAAU,OAAO,CAAC,aAAa,CAAC,SAAS,IAAI,SAAS,UAAU,CAAC;AACjF,SAAO,QAAQ,WAAW,IACtB,WACA,EAAE,GAAG,UAAU,QAAQ,CAAC,GAAG,SAAS,QAAQ,GAAG,OAAO,EAAE;AAC9D;AAEA,SAAS,iCAAiC,OAAe,OAAoB;AAC3E,QAAM,QAAQ,sBAAsB,OAAO,MAAM,KAAK;AACtD,MAAI,UAAU,OAAW,OAAM;AACjC;AAEA,SAAS,sBACP,OACA,cACA,OAC2C;AAC3C,MAAI,UAAU,2BAA2B;AACvC,WAAO,IAAI,8BAA8B,EAAE,MAAM,4BAA4B,MAAM,CAAC;AAAA,EACtF;AACA,MAAI,UAAU,0BAA0B,UAAU,uBAAuB;AACvE,WAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,MAAM,CAAC;AAAA,EAC/E;AACA,MAAI,CAAC,aAAc,QAAO;AAC1B,MAAI,UAAU,QAAW;AACvB,WAAO,IAAI,8BAA8B,EAAE,MAAM,wBAAwB,MAAM,CAAC;AAAA,EAClF;AACA,QAAM,eAAe,mBAAmB,OAAO,IAAI;AACnD,MAAI,iBAAiB,aAAc,QAAO;AAC1C,MAAI,iBAAiB,UAAU;AAC7B,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,kBAAkB;AACrC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,cAAc,MAAM,CAAC;AAC7F;AAEA,SAAS,mCAAmC,UAAoC;AAC9E,QAAM,YAAY,SAAS,OAAO;AAAA,IAChC,CAAC,SACC,KAAK,SAAS;AAAA,EAClB;AACA,MAAI,UAAU,SAAS,GAAG;AACxB,QAAI,SAAS,iBAAiB,QAAW;AACvC,YAAM,IAAI,8BAA8B;AAAA,QACtC,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,MAClB,CAAC;AAAA,IACH;AACA,2CAAuC,SAAS,cAAc,SAAS,KAAK;AAAA,EAC9E,WAAW,UAAU,WAAW,KAAK,SAAS,iBAAiB,cAAc;AAC3E,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN,cAAc,SAAS;AAAA,MACvB,OAAO,SAAS;AAAA,IAClB,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,YAAY,WAAW;AAChC,QAAI,YAAY,IAAI,SAAS,UAAU,GAAG;AACxC,YAAM,sBAAsB,SAAS,YAAY,SAAS,KAAK;AAAA,IACjE;AACA,gBAAY,IAAI,SAAS,UAAU;AACnC,QAAI,SAAS,WAAW,QAAW;AACjC,UAAI,QAAQ,IAAI,SAAS,MAAM,GAAG;AAChC,cAAM,sBAAsB,SAAS,YAAY,SAAS,KAAK;AAAA,MACjE;AACA,cAAQ,IAAI,SAAS,MAAM;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,SAAS,kCACP,OACA,OACM;AACN,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAY;AAChC,aAAW,QAAQ,OAAO;AACxB,QAAI,YAAY,IAAI,KAAK,UAAU,GAAG;AACpC,YAAM,sBAAsB,KAAK,YAAY,KAAK;AAAA,IACpD;AACA,gBAAY,IAAI,KAAK,UAAU;AAC/B,QAAI,KAAK,WAAW,QAAW;AAC7B,UAAI,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC5B,cAAM,sBAAsB,KAAK,YAAY,KAAK;AAAA,MACpD;AACA,cAAQ,IAAI,KAAK,MAAM;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,uCACP,cACA,OACM;AACN,MAAI,iBAAiB,UAAU,iBAAiB,aAAc;AAC9D,MAAI,iBAAiB,UAAU;AAC7B,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,iBAAiB,kBAAkB;AACrC,UAAM,IAAI,8BAA8B;AAAA,MACtC,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACA,QAAM,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,cAAc,MAAM,CAAC;AAC5F;AAEA,SAAS,mCACP,OACA,OAC+B;AAC/B,MAAI,MAAM,SAAS,uBAAuB;AACxC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,cAAc;AAAA,MACd,YAAY,MAAM;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,MAAM,SAAS,sBAAsB;AACvC,WAAO,IAAI,8BAA8B;AAAA,MACvC,MAAM,MAAM;AAAA,MACZ,cAAc;AAAA,MACd,YAAY,MAAM;AAAA,MAClB;AAAA,IACF,CAAC;AAAA,EACH;AACA,MAAI,MAAM,iBAAiB,YAAY,MAAM,iBAAiB,kBAAkB;AAC9E,UAAM;AAAA,EACR;AACA,SAAO,IAAI,8BAA8B;AAAA,IACvC,MAAM,MAAM;AAAA,IACZ,cAAc,MAAM;AAAA,IACpB,YAAY,MAAM;AAAA,IAClB;AAAA,EACF,CAAC;AACH;AAEA,SAAS,sBAAsB,YAAoB,OAA6C;AAC9F,SAAO,IAAI,8BAA8B,EAAE,MAAM,qBAAqB,YAAY,MAAM,CAAC;AAC3F;AAEA,SAAS,+BACP,YACA,OAC+B;AAC/B,SAAO,IAAI,8BAA8B;AAAA,IACvC,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEA,SAAS,gBAAgB,OAAgC,KAAsB;AAC7E,MAAI;AACF,UAAM,aAAa,OAAO,yBAAyB,OAAO,GAAG;AAC7D,WAAO,eAAe,UAAa,WAAW,aAAa,WAAW,QAAQ;AAAA,EAChF,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,OAAiC;AACzD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS;AAC5D;AAEA,SAAS,gBAAgB,OAAuB;AAC9C,QAAM,MAAMA,eAAc,KAAK,IAAI,QAAQ,CAAC;AAC5C,QAAM,oBAAoB,WAAW,IAAI,gBAAgB;AACzD,QAAM,kBAAkB,WAAW,IAAI,uBAAuB;AAC9D,QAAM,cAAc,oBAAoB;AACxC,QAAM,wBAAwB,WAAW,IAAI,oBAAoB;AACjE,QAAM,wBAAwB,WAAW,IAAI,kBAAkB;AAC/D,QAAM,eAAe,wBAAwB;AAC7C,QAAM,oBAAoB,KAAK,IAAI,mBAAmB,WAAW,IAAI,uBAAuB,CAAC;AAC7F,QAAM,cAAc,cAAc;AAClC,SAAO;AAAA,IACL,GAAG,MAAM,MAAM;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,MACP,OAAO,oBAAoB;AAAA,MAC3B,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,QAAQ;AAAA,MACR,yBAAyB;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,SAASA,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAwB;AAC1C,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI;AACpF;AAEA,SAAS,WAAW,OAAoC;AACtD,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,qBAAqB,OAAoD;AAChF,SAAO,WAAW,MAAM,gBAAgB,KAAK,WAAW,MAAM,iBAAiB;AACjF;AAEA,SAAS,cACP,IACA,QAO4B;AAC5B,QAAM,QAAoC,EAAE,MAAM,mBAAmB,GAAG;AACxE,MAAI,OAAO,WAAW,OAAW,OAAM,SAAS,OAAO;AACvD,MAAI,OAAO,SAAS,OAAW,OAAM,OAAO,OAAO;AACnD,MAAI,OAAO,mBAAmB,OAAW,OAAM,iBAAiB,OAAO;AACvE,MAAI,OAAO,kBAAkB,OAAW,OAAM,gBAAgB,OAAO;AACrE,MAAI,OAAO,cAAc,OAAW,OAAM,YAAY,OAAO;AAC7D,SAAO;AACT;;;AGh3CA;AAAA,EACE;AAAA,OAIK;AAIA,IAAM,2BAA2B,CAAC,WAAW,OAAO,UAAU,MAAM;AAiC3E,IAAM,0BAA0B,kBAAkB,0BAA0B,MAAM;AAClF,IAAM,4BAA4B,kBAAkB,0BAA0B,QAAQ;AACtF,IAAM,6BAA6B,kBAAkB,0BAA0B,SAAS;AACxF,IAAM,2BAA2B,kBAAkB,CAAC,OAAO,UAAU,MAAM,CAAU;AACrF,IAAM,wCAAwC;AAAA,EAC5C,CAAC,OAAO,UAAU,MAAM;AAAA,EACxB;AACF;AACA,IAAM,0CAA0C;AAAA,EAC9C,CAAC,OAAO,UAAU,MAAM;AAAA,EACxB;AACF;AACA,IAAM,wBAAwB,kBAAkB,CAAC,WAAW,MAAM,GAAY,SAAS;AACvF,IAAM,oBAAoB,kBAAkB,CAAC,OAAO,MAAM,GAAY,MAAM;AAErE,SAAS,uBAAuB,SAAsD;AAC3F,MAAI,sBAAsB,IAAI,OAAO,EAAG,QAAO;AAC/C,MAAI,wBAAwB,IAAI,OAAO,EAAG,QAAO;AACjD,MAAI,yBAAyB,IAAI,OAAO,EAAG,QAAO;AAClD,MAAI,kBAAkB,IAAI,OAAO,EAAG,QAAO;AAC3C,MAAI,kBAAkB,IAAI,OAAO,EAAG,QAAO;AAC3C,MAAI,YAAY,mBAAoB,QAAO;AAC3C,MAAI,YAAY,8BAA+B,QAAO;AACtD,MAAI,YAAY,uBAAwB,QAAO;AAC/C,SAAO;AACT;AAEA,IAAM,wBAAwB,oBAAI,IAAY,CAAC,wBAAwB,CAAC;AACxE,IAAM,0BAA0B,oBAAI,IAAY,CAAC,oBAAoB,kBAAkB,CAAC;AACxF,IAAM,2BAA2B,oBAAI,IAAY;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,oBAAoB,oBAAI,IAAY;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,CAAC;AACD,IAAM,oBAAoB,oBAAI,IAAY;AAAA,EACxC;AAAA,EACA;AACF,CAAC;AAED,SAAS,kBACP,SACA,cAC0C;AAC1C,QAAM,gBAAyE;AAAA,IAC7E,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACA,MAAI,iBAAiB,OAAW,eAAc,eAAe;AAC7D,SAAO,8BAA8B;AAAA,IACnC,iBAAiB;AAAA,EACnB,CAAC;AACH;;;AC5EO,IAAM,uBAAN,MAAqD;AAAA,EAQ1D,YACmB,QACjB,SACA;AAFiB;AAGjB,SAAK,UAAU,QAAQ;AACvB,SAAK,aAAa,QAAQ;AAC1B,SAAK,eAAe,QAAQ,gBAAgB;AAC5C,SAAK,WAAW,QAAQ;AACxB,SAAK,QAAQ,QAAQ;AAAA,EACvB;AAAA,EARmB;AAAA,EARV,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EAajB,MAAM,WAAW,OAAiB,SAAkD;AAClF,UAAM,aAA0B,CAAC;AACjC,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,KAAK,cAAc;AACpE,YAAM,QAAQ,MAAM,MAAM,OAAO,QAAQ,KAAK,YAAY;AAC1D,iBAAW,KAAK,GAAI,MAAM,KAAK,WAAW,OAAO,OAAO,CAAE;AAAA,IAC5D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,WAAW,OAAiB,SAAkD;AAC1F,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,CAAC;AAAA,IACV;AAEA,UAAM,SAAS,EAAE,GAAG,KAAK,gBAAgB,EAAE;AAC3C,QAAI,SAAS,gBAAgB,QAAW;AACtC,aAAO,OAAO,QAAQ,EAAE,aAAa,QAAQ,YAAY,CAAC;AAAA,IAC5D;AACA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,aAAa;AAAA,MACrD,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ,2BAA2B,MAAM;AAAA,IAC3C,CAAU;AACV,UAAM,gBAAgB,uBAAuB,QAAQ;AACrD,QAAI,cAAc,WAAW,MAAM,QAAQ;AACzC,YAAM,IAAI;AAAA,QACR,6BAA6B,cAAc,MAAM,+BAA+B,MAAM,MAAM;AAAA,MAC9F;AAAA,IACF;AAEA,WAAO,cAAc,IAAI,CAAC,QAAQ,WAAW;AAAA,MAC3C,UAAU,MAAM,KAAK;AAAA,MACrB;AAAA,IACF,EAAE;AAAA,EACJ;AAAA,EAEQ,kBAA2C;AACjD,UAAM,SAAkC,CAAC;AACzC,QAAI,KAAK,eAAe,OAAW,QAAO,uBAAuB,KAAK;AACtE,QAAI,KAAK,aAAa,OAAW,QAAO,WAAW,KAAK;AACxD,QAAI,KAAK,UAAU,OAAW,QAAO,QAAQ,KAAK;AAClD,WAAO;AAAA,EACT;AACF;AAEA,SAAS,uBAAuB,UAA+B;AAC7D,QAAM,MAAM;AACZ,MAAI,MAAM,QAAQ,IAAI,UAAU,GAAG;AACjC,WAAO,IAAI,WAAW,IAAI,CAAC,WAAW,UAAU,oBAAoB,WAAW,KAAK,CAAC;AAAA,EACvF;AACA,MAAI,IAAI,cAAc,QAAW;AAC/B,WAAO,CAAC,oBAAoB,IAAI,WAAW,CAAC,CAAC;AAAA,EAC/C;AACA,SAAO,CAAC;AACV;AAEA,SAAS,oBAAoB,WAAoB,UAA4B;AAC3E,MAAI,CAAC,SAAS,SAAS,KAAK,CAAC,cAAc,UAAU,MAAM,GAAG;AAC5D,UAAM,IAAI,MAAM,wDAAwD,QAAQ,GAAG;AAAA,EACrF;AACA,SAAO,UAAU;AACnB;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,cAAc,OAAmC;AACxD,SAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,CAAC,SAAS,OAAO,SAAS,QAAQ;AAC/E;;;AChHA,SAAS,UAAAI,eAAc;AAYhB,IAAM,yBAAyB;AAC/B,IAAM,yBAAyB;AAC/B,IAAM,8BAA8B;AACpC,IAAM,qBAAqB;AAC3B,IAAM,6BAA6B;AACnC,IAAM,oBAAoB;AAE1B,IAAM,6BAAN,MAA0E;AAAA,EAG/E,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,gBACJ,SACA,SACyC;AACzC,UAAM,kBAAkBC,eAAc,QAAQ,eAAe,IAAI,QAAQ,kBAAkB,CAAC;AAC5F,UAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,UAAM,iBAAiBA,eAAc,mBAAmB,IAAI,sBAAsB,CAAC;AACnF,UAAM,sBAAsBA,eAAc,eAAe,WAAW,IAChE,eAAe,cACf,CAAC;AACL,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,oBAAoB,CAAC,QAAQ,OAAO;AAAA,MACpC,aAAa;AAAA,QACX,GAAG;AAAA,QACH,aAAa,YAAY,QAAQ,OAAO,QAAQ,MAAM;AAAA,MACxD;AAAA,IACF;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AACrE,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,UAAU,QAAQ;AAAA,MAClB,QAAQ,2BAA2B,MAAM;AAAA,IAC3C;AAEA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB,MAAe;AACzE,WAAO,8BAA8B,QAAQ;AAAA,EAC/C;AACF;AAEO,IAAM,8BAAN,MAA2E;AAAA,EAGhF,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,gBACJ,SACA,SACyC;AACzC,UAAM,kBAAkBA,eAAc,QAAQ,eAAe,IAAI,QAAQ,kBAAkB,CAAC;AAC5F,UAAM,EAAE,QAAQ,qBAAqB,GAAG,iBAAiB,IAAI;AAC7D,UAAM,iBAAiBA,eAAc,mBAAmB,IAAI,sBAAsB,CAAC;AACnF,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,aAAa,YAAY,QAAQ,OAAO,QAAQ,MAAM;AAAA,IACxD;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AACrE,UAAM,SAAkC;AAAA,MACtC,GAAG;AAAA,MACH,OAAO,KAAK;AAAA,MACZ,QAAQ,QAAQ;AAAA,MAChB,QAAQ,2BAA2B,MAAM;AAAA,IAC3C;AAEA,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,eAAe,MAAe;AACxE,WAAO,yBAAyB,QAAQ;AAAA,EAC1C;AACF;AAEO,SAAS,8BAA8B,UAAmD;AAC/F,QAAM,MAAM;AACZ,QAAM,aAAa,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AACrE,QAAM,SAAS,WAAW,QAAQ,CAAC,cAAgC;AACjE,QAAI,CAACA,eAAc,SAAS,KAAK,CAACA,eAAc,UAAU,OAAO,GAAG;AAClE,aAAO,CAAC;AAAA,IACV;AACA,UAAM,QAAQ,MAAM,QAAQ,UAAU,QAAQ,KAAK,IAAI,UAAU,QAAQ,QAAQ,CAAC;AAClF,WAAO,MAAM,QAAQ,CAAC,SAA2B;AAC/C,UAAI,CAACA,eAAc,IAAI,KAAK,CAACA,eAAc,KAAK,UAAU,GAAG;AAC3D,eAAO,CAAC;AAAA,MACV;AACA,YAAM,OAAO,KAAK,WAAW;AAC7B,UAAI,OAAO,SAAS,UAAU;AAC5B,eAAO,CAAC;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,UACE,MAAM,kBAAkB,IAAI;AAAA,UAC5B,WACE,OAAO,KAAK,WAAW,aAAa,WAAW,KAAK,WAAW,WAAW;AAAA,QAC9E;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAED,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,kEAAkE;AAAA,EACpF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,EACf;AACF;AAEO,SAAS,yBAAyB,UAAmD;AAC1F,QAAM,MAAM;AACZ,QAAM,UAAU,MAAM,QAAQ,IAAI,eAAe,IAAI,IAAI,kBAAkB,CAAC,GAAG;AAAA,IAC7E,CAAC,SAA2B;AAC1B,UAAI,CAACA,eAAc,IAAI,KAAK,CAACA,eAAc,KAAK,KAAK,GAAG;AACtD,eAAO,CAAC;AAAA,MACV;AACA,YAAM,aAAa,KAAK,MAAM;AAC9B,UAAI,OAAO,eAAe,UAAU;AAClC,eAAO,CAAC;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,UACE,MAAM,kBAAkB,UAAU;AAAA,UAClC,WAAW,OAAO,KAAK,MAAM,aAAa,WAAW,KAAK,MAAM,WAAW;AAAA,QAC7E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,aAAa;AAAA,EACf;AACF;AAEO,SAAS,YAAY,OAAe,QAAwB;AACjE,QAAM,kBAAkB,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACrD,QAAM,mBAAmB,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC;AACvD,QAAM,UAAU,IAAI,iBAAiB,gBAAgB;AACrD,SAAO,GAAG,kBAAkB,OAAO,IAAI,mBAAmB,OAAO;AACnE;AAEA,SAAS,IAAI,MAAc,OAAuB;AAChD,MAAI,IAAI;AACR,MAAI,IAAI;AACR,SAAO,MAAM,GAAG;AACd,UAAM,OAAO,IAAI;AACjB,QAAI;AACJ,QAAI;AAAA,EACN;AACA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAA2B;AACpD,QAAM,aAAa,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,OAAO,EAAE;AAC7D,QAAM,QAAQC,QAAO,KAAK,OAAO,QAAQ;AACzC,QAAM,YAAY,MAAM,SAAS,QAAQ,EAAE,QAAQ,OAAO,EAAE;AAC5D,MAAI,WAAW,WAAW,KAAK,MAAM,WAAW,KAAK,cAAc,YAAY;AAC7E,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO,IAAI,WAAW,KAAK;AAC7B;AAEA,SAASD,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ACxJA,IAAM,iBAAiB;AAAA,EACrB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,iBAAiB;AACnB;AAEO,IAAM,yCAAyC;AAAA,EACpD,oBAAoB;AAAA,IAClB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,IACvB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,oBAAoB;AAAA,EACpB,0BAA0B;AAAA,IACxB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,EACzB,gCAAgC;AAAA,IAC9B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,EAClB,8BAA8B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,0BAA0B;AAAA,EAC1B,8BAA8B;AAAA,IAC5B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,wBAAwB;AAAA,EACxB,kCAAkC;AAAA,IAChC,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,0BAA0B;AAAA,IACxB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,+BAA+B;AAAA,IAC7B,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,yBAAyB;AAAA,EACzB,iCAAiC;AAAA,EACjC,0BAA0B;AAAA,EAC1B,sCAAsC;AAAA,EACtC,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,IACpB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,uBAAuB;AAAA,EACvB,4BAA4B;AAAA,EAC5B,sBAAsB;AAAA,IACpB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AAAA,EACA,kBAAkB;AAAA,IAChB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,EACnB;AACF;;;ACpHA,SAAS,UAAAE,eAAc;AAWvB,IAAM,yBACJ;AAEK,IAAM,2BAAN,MAAsE;AAAA,EAG3E,YACmB,QACR,SACT;AAFiB;AACR;AAAA,EACR;AAAA,EAFgB;AAAA,EACR;AAAA,EAJF,WAAW;AAAA,EAOpB,MAAM,cACJ,SACA,SACuC;AACvC,UAAM,SAAkCC,eAAc,QAAQ,eAAe,IACzE,EAAE,GAAG,QAAQ,gBAAgB,IAC7B,CAAC;AACL,QAAI,QAAQ,gBAAgB,QAAW;AACrC,aAAO,cAAc,QAAQ;AAAA,IAC/B;AACA,QAAI,SAAS,gBAAgB,OAAW,QAAO,cAAc,QAAQ;AAErE,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,gBAAgB;AAAA,MACxD,OAAO,KAAK;AAAA,MACZ,UAAU;AAAA,QACR;AAAA,UACE,MAAM;AAAA,UACN,OAAO;AAAA,YACL;AAAA,cACE,YAAY;AAAA,gBACV,UAAU,QAAQ,aAAa,qBAAqB,QAAQ,QAAQ;AAAA,gBACpE,MAAMC,QAAO,KAAK,QAAQ,IAAI,EAAE,SAAS,QAAQ;AAAA,cACnD;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,QAAQ,2BAA2B;AAAA,QACjC,GAAG;AAAA,QACH,mBACE,QAAQ,WAAW,SACf,yBACA,GAAG,sBAAsB;AAAA;AAAA,EAAO,QAAQ,MAAM;AAAA,MACtD,CAAC;AAAA,IACH,CAAU;AAEV,WAAO;AAAA,MACL,MAAM,gCAAgC,QAAQ;AAAA,MAC9C,aAAa;AAAA,IACf;AAAA,EACF;AACF;AAEO,SAAS,gCAAgC,UAA2B;AACzE,QAAM,MAAM;AACZ,MAAI,OAAO,IAAI,SAAS,UAAU;AAChC,WAAO,IAAI;AAAA,EACb;AACA,QAAM,aAAa,MAAM,QAAQ,IAAI,UAAU,IAAI,IAAI,aAAa,CAAC;AACrE,aAAW,aAAa,YAAY;AAClC,QAAI,CAACD,eAAc,SAAS,KAAK,CAACA,eAAc,UAAU,OAAO,GAAG;AAClE;AAAA,IACF;AACA,UAAM,QAAQ,MAAM,QAAQ,UAAU,QAAQ,KAAK,IAAI,UAAU,QAAQ,QAAQ,CAAC;AAClF,eAAW,QAAQ,OAAO;AACxB,UAAIA,eAAc,IAAI,KAAK,OAAO,KAAK,SAAS,UAAU;AACxD,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,EACF;AACA,QAAM,IAAI,MAAM,kDAAkD;AACpE;AAEA,SAAS,qBAAqB,UAA0B;AACtD,QAAM,QAAQ,SAAS,YAAY;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,OAAO,EAAG,QAAO;AACpC,MAAI,MAAM,SAAS,MAAM,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,OAAO,EAAG,QAAO;AACpC,SAAO;AACT;AAEA,SAASA,eAAc,OAAkD;AACvE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ARnBO,IAAM,eAAN,MAAiD;AAAA,EACrC;AAAA,EAEjB,YAAY,SAA8B;AACxC,QAAI,QAAQ,WAAW,QAAW;AAChC,6CAAuC,SAAS,CAAC,UAAU,UAAU,CAAC;AACtE,WAAK,MAAM,QAAQ;AACnB;AAAA,IACF;AACA,SAAK,MAAM,IAAI,YAAY,qBAAqB,OAAO,CAAC;AAAA,EAC1D;AAAA,EAEA,gBAIE,SACuC;AACvC,UAAM,UAAU,eAAe,QAAQ,OAAO;AAC9C,UAAM,WACJ,QAAQ,aAAa,SACjB,uBAAuB,OAAO,IAC9BE,+BAA8B,QAAQ,QAAQ;AAEpD,WAAO,IAAI;AAAA,MACT,KAAK;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,eAAe,SAAkE;AAC/E,mBAAe,QAAQ,OAAO;AAC9B,wCAAoC,QAAQ,YAAY,YAAY;AACpE,wCAAoC,QAAQ,cAAc,cAAc;AACxE,WAAO,IAAI,qBAAqB,KAAK,KAAK,OAAO;AAAA,EACnD;AAAA,EAEA,qBACE,SACkC;AAClC,UAAM,UAAU,eAAe,QAAQ,OAAO;AAC9C,WAAO,QAAQ,QAAQ,oBACnB,IAAI,2BAA2B,KAAK,KAAK,OAAO,IAChD,IAAI,4BAA4B,KAAK,KAAK,OAAO;AAAA,EACvD;AAAA,EAEA,mBAAmB,SAA0E;AAC3F,WAAO,IAAI,yBAAyB,KAAK,KAAK,eAAe,QAAQ,OAAO,CAAC;AAAA,EAC/E;AAAA,EAEA,MAAM,WAAW,UAAqD,CAAC,GAAuB;AAC5F,QAAI;AACF,YAAM,SAAS,EAAE,UAAU,IAAK;AAChC,UAAI,QAAQ,gBAAgB,QAAW;AACrC,eAAO,OAAO,QAAQ,EAAE,aAAa,QAAQ,YAAY,CAAC;AAAA,MAC5D;AACA,YAAM,WAAW,MAAM,KAAK,IAAI,OAAO,KAAK;AAAA,QAC1C,QAAQ,2BAA2B,MAAM;AAAA,MAC3C,CAAC;AACD,YAAM,QAAQ,MAAM,0BAA0B,QAAQ,GACnD,IAAI,aAAa,EACjB,OAAO,aAAa;AACvB,aAAO,EAAE,KAAK;AAAA,IAChB,SAAS,OAAO;AACd,YAAM,oBAAoB,UAAU,KAAK;AAAA,IAC3C;AAAA,EACF;AACF;AAEA,SAAS,uCAAuC,SAAiB,MAA+B;AAC9F,QAAM,WAAW,KAAK,KAAK,CAAC,QAAQ,OAAO,OAAO;AAClD,MAAI,aAAa,QAAW;AAC1B,UAAM,IAAI,UAAU,2CAA2C,QAAQ,GAAG;AAAA,EAC5E;AACF;AAEO,SAAS,qBAAqB,SAAkD;AACrF,MAAI,YAAY,WAAW,QAAQ,WAAW,QAAW;AACvD,UAAM,IAAI,UAAU,0DAA0D;AAAA,EAChF;AACA,MAAI,cAAc,WAAW,QAAQ,aAAa,QAAW;AAC3D,UAAM,aAAiC;AAAA,MACrC,UAAU;AAAA,MACV,SAAS,cAAc,QAAQ,SAAS,WAAW,aAAa,eAAe;AAAA,MAC/E,UAAU,cAAc,QAAQ,SAAS,UAAU,YAAY,eAAe;AAAA,IAChF;AACA,QAAI,QAAQ,SAAS,sBAAsB,QAAW;AACpD,iBAAW,oBAAoB,QAAQ,SAAS;AAAA,IAClD;AACA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,QAAQ,cAAc,QAAQ,QAAQ,UAAU,QAAQ;AAAA,EAC1D;AACF;AAEA,SAAS,cAAc,OAA2B,MAAc,OAAuB;AACrF,MAAI,UAAU,UAAa,MAAM,KAAK,EAAE,WAAW,GAAG;AACpD,UAAM,IAAI,MAAM,WAAW,KAAK,IAAI,IAAI,UAAU,IAAI,kCAAkC;AAAA,EAC1F;AAEA,SAAO;AACT;AAEA,SAAS,eAAuC,SAA2B;AACzE,MAAI,QAAQ,KAAK,EAAE,WAAW,GAAG;AAC/B,UAAM,IAAI,UAAU,oCAAoC;AAAA,EAC1D;AACA,SAAO;AACT;AAEA,SAAS,oCAAoC,OAA2B,MAAoB;AAC1F,MAAI,UAAU,WAAc,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,IAAI;AACvE,UAAM,IAAI,UAAU,GAAG,IAAI,kCAAkC;AAAA,EAC/D;AACF;AAEA,eAAe,0BAA0B,UAAuC;AAC9E,MAAI,gBAAgB,QAAQ,GAAG;AAC7B,UAAM,SAAoB,CAAC;AAC3B,qBAAiB,SAAS,UAAU;AAClC,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAIC,UAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,MAAM,GAAG;AACxD,WAAO,SAAS;AAAA,EAClB;AAEA,MAAIA,UAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,IAAI,GAAG;AACtD,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO,CAAC;AACV;AAEA,SAAS,cAAc,OAAuD;AAC5E,MAAI,CAACA,UAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,KACJ,YAAY,MAAM,WAAW,KAC7B,YAAY,MAAM,aAAa,KAC/B,uBAAuB,YAAY,MAAM,IAAI,CAAC;AAEhD,MAAI,OAAO,QAAW;AACpB,WAAO;AAAA,EACT;AAEA,QAAM,cAAyC;AAAA,IAC7C;AAAA,EACF;AACA,MAAI,OAAO,MAAM,gBAAgB,UAAU;AACzC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,iBAAiB,UAAU;AAC1C,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,gBAAgB,UAAU;AACzC,gBAAY,cAAc,MAAM;AAAA,EAClC;AACA,MAAI,OAAO,MAAM,SAAS,UAAU;AAClC,gBAAY,OAAO,MAAM;AAAA,EAC3B;AACA,MAAI,OAAO,MAAM,oBAAoB,UAAU;AAC7C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,MAAI,OAAO,MAAM,sBAAsB,UAAU;AAC/C,gBAAY,gBAAgB,MAAM;AAAA,EACpC;AACA,SAAO;AACT;AAEA,SAAS,uBAAuB,MAA8C;AAC5E,QAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,aAAa,EAAE;AACpD,SAAO,YAAY,UAAa,QAAQ,WAAW,IAAI,SAAY;AACrE;AAEA,SAAS,YAAY,OAAoC;AACvD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,QAAQ,WAAW,IAAI,SAAY;AAC5C;AAEA,SAAS,cACP,OACoC;AACpC,SAAO,UAAU;AACnB;AAEA,SAAS,oBAAoB,UAAkB,OAAmC;AAChF,MAAI,iBAAiB,mBAAmB;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,cAAc,KAAK;AACtC,SAAO,IAAI,kBAAkB,GAAG,QAAQ,0BAA0B,gBAAgB,KAAK,CAAC,IAAI;AAAA,IAC1F;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,cAAc,OAAoC;AACzD,MAAI,CAACA,UAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,MAAM,WAAW,UAAU;AACpC,WAAO,MAAM;AAAA,EACf;AAEA,MAAI,OAAO,MAAM,eAAe,UAAU;AACxC,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAwB;AAC/C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAEA,SAASA,UAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,gBAAgB,OAAiD;AACxE,SAAOA,UAAS,KAAK,KAAK,OAAO,iBAAiB;AACpD;","names":["defineCompletionModelControls","isPlainObject","content","isPlainObject","choice","calls","candidate","Buffer","isPlainObject","Buffer","Buffer","isPlainObject","Buffer","defineCompletionModelControls","isObject"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/gemini",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.4",
|
|
4
4
|
"description": "Gemini provider adapter for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@google/genai": "^2.
|
|
28
|
+
"@google/genai": "^2.22.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^24.9.1",
|
|
32
32
|
"tsup": "^8.5.0",
|
|
33
33
|
"typescript": "^5.9.3",
|
|
34
34
|
"vitest": "^4.0.8",
|
|
35
|
-
"@anvia/core": "1.1
|
|
35
|
+
"@anvia/core": "1.3.1"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
|
-
"@anvia/core": "1.1
|
|
38
|
+
"@anvia/core": "^1.3.1"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"prebuild": "test -f ../core/dist/index.d.ts || pnpm --filter @anvia/core build",
|