@azure-utils/durable-functions
Version:
Utilities for Azure Durable functions.
1 lines • 25.8 kB
Source Map (JSON)
{"version":3,"file":"durable-orchestrations-api-DjADye2N.mjs","names":["options: StartAzureFunctionsOrchestrationOptions","requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions","options: ListAzureFunctionsOrchestrationInstancesOptions","options: GetAzureFunctionsOrchestrationInstanceOptions","options: {\n /** The ID of the orchestration instance. */\n instanceId: string;\n }","options: {\n /** Filters the list of purged instances that were created at or after the given ISO8601 timestamp. */\n createdTimeFrom: Date;\n /** Optional parameter. When specified, filters the list of purged instances that were created at or before the given ISO8601 timestamp. */\n createdTimeTo?: Date;\n /** Optional parameter. When specified, filters the list of purged instances based on their runtime status. */\n runtimeStatuses?: AzureFunctionsOrchestrationRuntimeStatus[];\n }","options: {\n /** The ID of the orchestration instance. */\n instanceId: string;\n /** The name of the event that the target orchestration instance is waiting on. */\n eventName: string;\n /** The JSON-formatted event payload. */\n eventBody?: object;\n }","options: AzureFunctionsOrchestrationInstanceActionOptions"],"sources":["../src/durable-orchestrations-api.ts"],"sourcesContent":["/**\n * @module\n * Helper utils to interact with Azure Functions Orchestrations.\n */\n\nimport {\n type RequestAzureFunctionsDurableTaskWebhookOptions,\n requestAzureFunctionsDurableTaskWebhookOrThrow,\n} from \"./durable-webhook.js\";\n\n/**\n * An object that contains all the functions for interacting with Azure Functions Durable Orchestrations.\n *\n * @throws Each method can throw an error if the operation fails.\n */\nexport const durableOrchestrations = {\n /** Starts executing a new instance of the specified orchestrator function. */\n start: startAzureFunctionsOrchestrationOrThrow,\n /** List Azure Functions Orchestration Instances. */\n list: listAzureFunctionsOrchestrationInstancesOrThrow,\n /** Gets the status of a specified orchestration instance. */\n get: getAzureFunctionsOrchestrationInstanceOrThrow,\n /** Deletes the history and related artifacts for a specified orchestration instance. */\n purge: purgeAzureFunctionsOrchestrationInstanceOrThrow,\n /** Delete the history and related artifacts for multiple instances within a task hub. */\n purgeAll: purgeAzureFunctionsOrchestrationInstancesOrThrow,\n /** ends an event notification message to a running orchestration instance. */\n raiseEvent: raiseAzureFunctionsOrchestrationInstanceEventOrThrow,\n /** Terminates a running orchestration instance. */\n terminate: terminateAzureFunctionsOrchestrationInstanceOrThrow,\n /** Suspend/pause Azure Functions Orchestration Instance . */\n suspend: suspendAzureFunctionsOrchestrationInstanceOrThrow,\n /** Resume Azure Functions Orchestration Instance. */\n resume: resumeAzureFunctionsOrchestrationInstanceOrThrow,\n /** Restores a failed orchestration instance into a running state by replaying the most recent failed operations. */\n rewind: rewindAzureFunctionsOrchestrationInstanceOrThrow,\n};\n\n// Start Azure Functions Orchestration\n\n/**\n * Options for Starting an Azure Functions Orchestration.\n */\nexport type StartAzureFunctionsOrchestrationOptions = {\n /**\n * The name of the orchestrator function to start.\n */\n functionName: string;\n /**\n * Optional parameter. The ID of the orchestration instance.\n * If not specified, the orchestrator function will start with a random instance ID.\n */\n instanceId?: string;\n /**\n * Optional. The JSON-formatted orchestrator function input.\n */\n input: unknown;\n};\nexport type StartAzureFunctionsOrchestrationResult = {\n /** The ID of the orchestration instance. */\n id: string;\n /** The status URL of the orchestration instance. */\n statusQueryGetUri: string;\n /** The \"raise event\" URL of the orchestration instance. */\n sendEventPostUri: string;\n /** The \"terminate\" URL of the orchestration instance. */\n terminatePostUri: string;\n /** The \"purge history\" URL of the orchestration instance. */\n purgeHistoryDeleteUri: string;\n /** (preview) The \"rewind\" URL of the orchestration instance. */\n rewindPostUri?: string;\n /** The \"suspend\" URL of the orchestration instance. */\n suspendPostUri: string;\n /** The \"resume\" URL of the orchestration instance. */\n resumePostUri: string;\n};\n/**\n * Starts executing a new instance of the specified orchestrator function.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#start-orchestration\n *\n * The HTTP response is intended to be compatible with the Polling Consumer Pattern. It also includes the following notable response headers:\n * Location (The URL of the status endpoint) and Retry-After (The number of seconds to wait before polling again).\n */\nexport async function startAzureFunctionsOrchestrationOrThrow(\n options: StartAzureFunctionsOrchestrationOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<{\n status: number;\n result: StartAzureFunctionsOrchestrationResult;\n headers: Headers;\n}> {\n const { functionName, instanceId = \"\", input } = options;\n\n if (!functionName) {\n throw new Error(\"Orchestration function name is required.\");\n }\n if (!input) {\n throw new Error(\"Orchestration input object is required.\");\n }\n\n const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `orchestrators/${functionName}/${instanceId}`,\n { ...requestOptions, body: JSON.stringify(input), method: \"POST\" }\n );\n\n return {\n result: (await response.json()) as StartAzureFunctionsOrchestrationResult,\n status: response.status,\n headers: response.headers,\n };\n}\n\n// List Azure Functions Orchestration Instances\n\n/**\n * Options for listing Azure Functions Orchestration Instances.\n */\nexport type ListAzureFunctionsOrchestrationInstancesOptions = {\n /**\n * Optional parameter. When specified, filters the list of returned instances that were created at or after the given ISO8601 timestamp.\n */\n createdTimeFrom?: Date;\n /**\n * Optional parameter. When specified, filters the list of returned instances that were created at or before the given ISO8601 timestamp.\n */\n createdTimeTo?: Date;\n /**\n * Optional parameter. When specified, filters the list of returned instances based on their runtime status. To see the list of possible runtime status values, see the Querying instances article.\n */\n runtimeStatuses?: AzureFunctionsOrchestrationRuntimeStatus[];\n /**\n * Optional parameter. When specified, filters the list of returned instances to include only instances whose instance ID starts with the specified prefix string.\n */\n instanceIdPrefix?: string;\n /**\n * Optional parameter. If set to true, the function outputs will be included in the orchestration execution history.\n */\n showHistoryOutput?: boolean;\n /**\n * Optional parameter. If set to false, the function input will not be included in the response payload.\n * @default true\n */\n showInput?: boolean;\n\n /**\n * Optional parameter. When specified, limits the number of instances returned by the query.\n */\n top?: number;\n /**\n * Optional parameter. When specified, the continuation token for the next page of results.\n * This token is returned in the response headers of the previous page of results.\n */\n continuationToken?: string;\n};\n/**\n * The result of listing Azure Functions Orchestration Instances.\n */\nexport type ListAzureFunctionsOrchestrationInstancesResult = {\n /**\n * The number of instances returned by the query.\n */\n top: number | null;\n /**\n * The continuation token for the next page of results.\n * This token is returned in the response headers of the previous page of results.\n */\n continuationToken: string | null;\n /**\n * The list of Azure Functions Orchestration Instances.\n */\n instances: AzureFunctionsOrchestrationInstance[];\n};\n/**\n * List Azure Functions Orchestration Instances. They can be filtered by\n * created time, runtime status, instance ID prefix, and other parameters.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#get-all-instances-status\n */\nexport async function listAzureFunctionsOrchestrationInstancesOrThrow(\n options: ListAzureFunctionsOrchestrationInstancesOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<ListAzureFunctionsOrchestrationInstancesResult> {\n const {\n createdTimeFrom,\n createdTimeTo,\n instanceIdPrefix,\n runtimeStatuses,\n showInput,\n showHistoryOutput,\n top,\n continuationToken,\n } = options;\n\n const searchParams = new URLSearchParams();\n if (createdTimeFrom) {\n searchParams.set(\"createdTimeFrom\", createdTimeFrom.toISOString());\n }\n if (createdTimeTo) {\n searchParams.set(\"createdTimeTo\", createdTimeTo.toISOString());\n }\n if (runtimeStatuses) {\n searchParams.set(\"runtimeStatus\", runtimeStatuses.join(\",\"));\n }\n if (instanceIdPrefix) {\n searchParams.set(\"instanceIdPrefix\", instanceIdPrefix);\n }\n\n searchParams.set(\"showInput\", showInput === false ? \"false\" : \"true\");\n searchParams.set(\n \"showHistoryOutput\",\n showHistoryOutput === true ? \"true\" : \"false\"\n );\n searchParams.set(\"showOutput\", \"false\");\n\n if (top) {\n searchParams.set(\"top\", top.toString());\n }\n\n const continuationTokenHeader = \"x-ms-continuation-token\";\n const headers = new Headers();\n if (continuationToken) {\n headers.set(continuationTokenHeader, continuationToken);\n }\n\n const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances`,\n { ...requestOptions, searchParams, headers }\n );\n\n const instances =\n (await response.json()) as AzureFunctionsOrchestrationInstance[];\n\n return {\n instances,\n top: top ?? null,\n continuationToken: response.headers.get(continuationTokenHeader),\n };\n}\n\n/** Request options for Query Azure Functions Orchestration Instance by instanceId. */\nexport type GetAzureFunctionsOrchestrationInstanceOptions = {\n /**\n * The ID of the orchestration instance.\n */\n instanceId: string;\n /**\n * Optional parameter. If set to true,\n * the orchestration execution history will be included in the response payload.\n */\n showHistory?: boolean;\n /**\n * Optional parameter. If set to true,\n * the function outputs will be included in the orchestration execution history.\n */\n showHistoryOutput?: boolean;\n /**\n * Optional parameter. If set to false,\n * the function input will not be included in the response payload.\n * @default true\n */\n showInput?: boolean;\n /**\n * Optional parameter. If set to true, this API will return an HTTP 500\n * response instead of a 200 if the instance is in a failure state.\n * This parameter is intended for automated status polling scenarios.\n */\n returnInternalServerErrorOnFailure?: boolean;\n};\n/**\n * Gets the status of a specified orchestration instance.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#get-instance-status\n */\nexport async function getAzureFunctionsOrchestrationInstanceOrThrow(\n options: GetAzureFunctionsOrchestrationInstanceOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<{\n instance: AzureFunctionsOrchestrationInstance;\n status: number;\n headers: Headers;\n}> {\n const {\n instanceId,\n showHistory,\n showHistoryOutput,\n showInput,\n returnInternalServerErrorOnFailure,\n } = options;\n\n if (!instanceId) {\n throw new Error(\"Orchestration task instanceId is required.\");\n }\n\n const searchParams = new URLSearchParams();\n if (showHistory) {\n searchParams.set(\"showHistory\", \"true\");\n }\n if (showHistoryOutput) {\n searchParams.set(\"showHistoryOutput\", \"true\");\n }\n if (showInput === false) {\n searchParams.set(\"showInput\", \"false\");\n }\n if (returnInternalServerErrorOnFailure) {\n searchParams.set(\"returnInternalServerErrorOnFailure\", \"true\");\n }\n\n const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}`,\n { ...requestOptions, searchParams }\n );\n\n return {\n instance: (await response.json()) as AzureFunctionsOrchestrationInstance,\n status: response.status,\n headers: response.headers,\n };\n}\n\n// Purge Azure Functions Orchestration Instance\n\n/**\n * Deletes the history and related artifacts for a specified orchestration instance.\n */\nexport async function purgeAzureFunctionsOrchestrationInstanceOrThrow(\n options: {\n /** The ID of the orchestration instance. */\n instanceId: string;\n },\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<boolean> {\n const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${options.instanceId}`,\n { ...requestOptions, method: \"DELETE\" }\n );\n const data = (await response.json()) as { instancesDeleted: number };\n\n return data.instancesDeleted > 0;\n}\n\n// Purge Azure Functions Orchestration Instances\n\n/**\n * Delete the history and related artifacts for multiple instances within a task hub\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#purge-multiple-instance-histories\n *\n * @returns The number of instances deleted.\n */\nexport async function purgeAzureFunctionsOrchestrationInstancesOrThrow(\n options: {\n /** Filters the list of purged instances that were created at or after the given ISO8601 timestamp. */\n createdTimeFrom: Date;\n /** Optional parameter. When specified, filters the list of purged instances that were created at or before the given ISO8601 timestamp. */\n createdTimeTo?: Date;\n /** Optional parameter. When specified, filters the list of purged instances based on their runtime status. */\n runtimeStatuses?: AzureFunctionsOrchestrationRuntimeStatus[];\n },\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<number> {\n const { createdTimeFrom, createdTimeTo, runtimeStatuses } = options;\n\n const searchParams = new URLSearchParams();\n searchParams.set(\"createdTimeFrom\", createdTimeFrom.toISOString());\n if (createdTimeTo) {\n searchParams.set(\"createdTimeTo\", createdTimeTo.toISOString());\n }\n if (runtimeStatuses) {\n searchParams.set(\"runtimeStatus\", runtimeStatuses.join(\",\"));\n }\n\n const response = await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances`,\n { ...requestOptions, method: \"DELETE\", searchParams }\n );\n\n const data = (await response.json()) as { instancesDeleted: number };\n\n return data.instancesDeleted;\n}\n\n// Azure Functions Orchestration Instance Events\n\n/**\n * Sends an event notification message to a running orchestration instance.\n * Does not return a response.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#raise-event\n */\nexport async function raiseAzureFunctionsOrchestrationInstanceEventOrThrow(\n options: {\n /** The ID of the orchestration instance. */\n instanceId: string;\n /** The name of the event that the target orchestration instance is waiting on. */\n eventName: string;\n /** The JSON-formatted event payload. */\n eventBody?: object;\n },\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<void> {\n const { instanceId, eventName, eventBody = {} } = options;\n\n await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}/raiseEvent/${eventName}`,\n { ...requestOptions, method: \"POST\", body: JSON.stringify(eventBody) }\n );\n\n return;\n}\n\n/**\n * Terminates a running orchestration instance.\n * Does not return a response.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#terminate-instance\n */\nexport async function terminateAzureFunctionsOrchestrationInstanceOrThrow(\n options: AzureFunctionsOrchestrationInstanceActionOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<void> {\n const { instanceId, reason } = options;\n\n await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}/terminate`,\n { ...requestOptions, method: \"POST\", searchParams: { reason } }\n );\n\n return;\n}\n\n/**\n * Suspend/pause Azure Functions Orchestration Instance .\n * Does not return a response.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#suspend-instance\n */\nexport async function suspendAzureFunctionsOrchestrationInstanceOrThrow(\n options: AzureFunctionsOrchestrationInstanceActionOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<void> {\n const { instanceId, reason } = options;\n\n await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}/suspend`,\n { ...requestOptions, method: \"POST\", searchParams: { reason } }\n );\n\n return;\n}\n\n/**\n * Resume Azure Functions Orchestration Instance.\n * Does not return a response.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#resume-instance\n */\nexport async function resumeAzureFunctionsOrchestrationInstanceOrThrow(\n options: AzureFunctionsOrchestrationInstanceActionOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<void> {\n const { instanceId, reason } = options;\n\n await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}/resume`,\n { ...requestOptions, method: \"POST\", searchParams: { reason } }\n );\n\n return;\n}\n\n/**\n * Restores a failed orchestration instance into a running state by replaying the most recent failed operations.\n * Does not return a response.\n *\n * @see https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-http-api#rewind-instance-preview\n */\nexport async function rewindAzureFunctionsOrchestrationInstanceOrThrow(\n options: AzureFunctionsOrchestrationInstanceActionOptions,\n requestOptions: RequestAzureFunctionsDurableTaskWebhookOptions\n): Promise<void> {\n const { instanceId, reason } = options;\n\n await requestAzureFunctionsDurableTaskWebhookOrThrow(\n `instances/${instanceId}/resume`,\n { ...requestOptions, method: \"POST\", searchParams: { reason } }\n );\n\n return;\n}\n\nexport type AzureFunctionsOrchestrationInstanceActionOptions = {\n /** The ID of the orchestration instance. */\n instanceId: string;\n /** The reason for performing action the orchestration instance. */\n reason: string;\n};\n\n/**\n * The Azure Functions Orchestration Instance.\n */\nexport type AzureFunctionsOrchestrationInstance<T = unknown> = {\n /**\n * The instance ID of the orchestration.\n */\n instanceId: string;\n /**\n * The name of the orchestration function.\n */\n name: string;\n /**\n * The current runtime status of the orchestration instance.\n */\n runtimeStatus: AzureFunctionsOrchestrationRuntimeStatus;\n /**\n * The input to the orchestration instance.\n * This is the input that was passed to the orchestrator function when it was started.\n */\n input: null | object;\n /**\n * The output of the orchestration instance.\n * This is the output that was returned by the orchestrator function when it completed.\n */\n output: T;\n /**\n * A field that can be used by orchestrator functions to store custom status information.\n */\n customStatus?: unknown;\n /**\n * ISO Timestamp of when the orchestration instance was created.\n */\n createdTime: string;\n /**\n * ISO Timestamp of when the orchestration instance was last updated.\n */\n lastUpdatedTime: string;\n /**\n * History events of the orchestration instance.\n * Only available if `showHistory` is set to true in the query.\n */\n historyEvents?: AzureFunctionsOrchestrationInstanceHistoryEvent[];\n};\n\n/**\n * The history events of an orchestration instance.\n */\nexport type AzureFunctionsOrchestrationInstanceHistoryEvent =\n | {\n EventType: \"ExecutionStarted\";\n Timestamp: string;\n FunctionName: string;\n Correlation?: null;\n ParentTraceContext?: null;\n ScheduledStartTime?: string | null;\n Generation?: number;\n }\n | {\n EventType: \"TaskCompleted\";\n Timestamp: string;\n FunctionName: string;\n Result?: unknown;\n ScheduledTime?: string | null;\n }\n | {\n EventType: \"TaskFailed\";\n Timestamp: string;\n FunctionName: string;\n Reason?: string;\n Details?: string | null;\n FailureDetails?: string | null;\n ScheduledTime?: string | null;\n }\n | {\n EventType: \"ExecutionCompleted\";\n Timestamp: string;\n FunctionName: string | undefined;\n OrchestrationStatus: AzureFunctionsOrchestrationRuntimeStatus;\n Result?: unknown;\n FailureDetails?: null | string;\n };\n\n/**\n * The runtime status of an orchestration instance (type).\n */\nexport type AzureFunctionsOrchestrationRuntimeStatus = Values<\n typeof AzureFunctionsOrchestrationRuntimeStatuses\n>;\n\n/**\n * The runtime status of an orchestration instance.\n */\nexport const AzureFunctionsOrchestrationRuntimeStatuses = {\n /** The orchestration instance has started running.*/\n Running: \"Running\",\n /** The orchestration instance has completed normally.*/\n Completed: \"Completed\",\n /** The orchestration instance has restarted itself with a new history. This is a transient state.*/\n ContinuedAsNew: \"ContinuedAsNew\",\n /** The orchestration instance failed with an error.*/\n Failed: \"Failed\",\n /** The orchestration was canceled gracefully.*/\n Canceled: \"Canceled\",\n /** The orchestration instance was stopped abruptly.*/\n Terminated: \"Terminated\",\n /** The orchestration instance has been scheduled but has not yet started running.*/\n Pending: \"Pending\",\n /** The orchestration instance has been suspended and may be resumed to running later.*/\n Suspended: \"Suspended\",\n} as const;\n\ntype Values<T> = T extends Record<string, unknown> ? T[keyof T] : never;\n"],"mappings":";;;;;;;;AAeA,MAAa,wBAAwB;CAEnC,OAAO;CAEP,MAAM;CAEN,KAAK;CAEL,OAAO;CAEP,UAAU;CAEV,YAAY;CAEZ,WAAW;CAEX,SAAS;CAET,QAAQ;CAER,QAAQ;AACT;;;;;;;;;AAgDD,eAAsB,wCACpBA,SACAC,gBAKC;CACD,MAAM,EAAE,cAAc,aAAa,IAAI,OAAO,GAAG;AAEjD,MAAK,aACH,OAAM,IAAI,MAAM;AAElB,MAAK,MACH,OAAM,IAAI,MAAM;CAGlB,MAAM,WAAW,MAAM,gDACpB,gBAAgB,aAAa,GAAG,WAAW,GAC5C;EAAE,GAAG;EAAgB,MAAM,KAAK,UAAU,MAAM;EAAE,QAAQ;CAAQ,EACnE;AAED,QAAO;EACL,QAAS,MAAM,SAAS,MAAM;EAC9B,QAAQ,SAAS;EACjB,SAAS,SAAS;CACnB;AACF;;;;;;;AAoED,eAAsB,gDACpBC,SACAD,gBACyD;CACzD,MAAM,EACJ,iBACA,eACA,kBACA,iBACA,WACA,mBACA,KACA,mBACD,GAAG;CAEJ,MAAM,eAAe,IAAI;AACzB,KAAI,gBACF,cAAa,IAAI,mBAAmB,gBAAgB,aAAa,CAAC;AAEpE,KAAI,cACF,cAAa,IAAI,iBAAiB,cAAc,aAAa,CAAC;AAEhE,KAAI,gBACF,cAAa,IAAI,iBAAiB,gBAAgB,KAAK,IAAI,CAAC;AAE9D,KAAI,iBACF,cAAa,IAAI,oBAAoB,iBAAiB;AAGxD,cAAa,IAAI,aAAa,cAAc,QAAQ,UAAU,OAAO;AACrE,cAAa,IACX,qBACA,sBAAsB,OAAO,SAAS,QACvC;AACD,cAAa,IAAI,cAAc,QAAQ;AAEvC,KAAI,IACF,cAAa,IAAI,OAAO,IAAI,UAAU,CAAC;CAGzC,MAAM,0BAA0B;CAChC,MAAM,UAAU,IAAI;AACpB,KAAI,kBACF,SAAQ,IAAI,yBAAyB,kBAAkB;CAGzD,MAAM,WAAW,MAAM,gDACpB,YACD;EAAE,GAAG;EAAgB;EAAc;CAAS,EAC7C;CAED,MAAM,YACH,MAAM,SAAS,MAAM;AAExB,QAAO;EACL;EACA,KAAK,OAAO;EACZ,mBAAmB,SAAS,QAAQ,IAAI,wBAAwB;CACjE;AACF;;;;;;AAoCD,eAAsB,8CACpBE,SACAF,gBAKC;CACD,MAAM,EACJ,YACA,aACA,mBACA,WACA,oCACD,GAAG;AAEJ,MAAK,WACH,OAAM,IAAI,MAAM;CAGlB,MAAM,eAAe,IAAI;AACzB,KAAI,YACF,cAAa,IAAI,eAAe,OAAO;AAEzC,KAAI,kBACF,cAAa,IAAI,qBAAqB,OAAO;AAE/C,KAAI,cAAc,MAChB,cAAa,IAAI,aAAa,QAAQ;AAExC,KAAI,mCACF,cAAa,IAAI,sCAAsC,OAAO;CAGhE,MAAM,WAAW,MAAM,gDACpB,YAAY,WAAW,GACxB;EAAE,GAAG;EAAgB;CAAc,EACpC;AAED,QAAO;EACL,UAAW,MAAM,SAAS,MAAM;EAChC,QAAQ,SAAS;EACjB,SAAS,SAAS;CACnB;AACF;;;;AAOD,eAAsB,gDACpBG,SAIAH,gBACkB;CAClB,MAAM,WAAW,MAAM,gDACpB,YAAY,QAAQ,WAAW,GAChC;EAAE,GAAG;EAAgB,QAAQ;CAAU,EACxC;CACD,MAAM,OAAQ,MAAM,SAAS,MAAM;AAEnC,QAAO,KAAK,mBAAmB;AAChC;;;;;;;;AAWD,eAAsB,iDACpBI,SAQAJ,gBACiB;CACjB,MAAM,EAAE,iBAAiB,eAAe,iBAAiB,GAAG;CAE5D,MAAM,eAAe,IAAI;AACzB,cAAa,IAAI,mBAAmB,gBAAgB,aAAa,CAAC;AAClE,KAAI,cACF,cAAa,IAAI,iBAAiB,cAAc,aAAa,CAAC;AAEhE,KAAI,gBACF,cAAa,IAAI,iBAAiB,gBAAgB,KAAK,IAAI,CAAC;CAG9D,MAAM,WAAW,MAAM,gDACpB,YACD;EAAE,GAAG;EAAgB,QAAQ;EAAU;CAAc,EACtD;CAED,MAAM,OAAQ,MAAM,SAAS,MAAM;AAEnC,QAAO,KAAK;AACb;;;;;;;AAUD,eAAsB,qDACpBK,SAQAL,gBACe;CACf,MAAM,EAAE,YAAY,WAAW,YAAY,CAAE,GAAE,GAAG;AAElD,OAAM,gDACH,YAAY,WAAW,cAAc,UAAU,GAChD;EAAE,GAAG;EAAgB,QAAQ;EAAQ,MAAM,KAAK,UAAU,UAAU;CAAE,EACvE;AAED;AACD;;;;;;;AAQD,eAAsB,oDACpBM,SACAN,gBACe;CACf,MAAM,EAAE,YAAY,QAAQ,GAAG;AAE/B,OAAM,gDACH,YAAY,WAAW,aACxB;EAAE,GAAG;EAAgB,QAAQ;EAAQ,cAAc,EAAE,OAAQ;CAAE,EAChE;AAED;AACD;;;;;;;AAQD,eAAsB,kDACpBM,SACAN,gBACe;CACf,MAAM,EAAE,YAAY,QAAQ,GAAG;AAE/B,OAAM,gDACH,YAAY,WAAW,WACxB;EAAE,GAAG;EAAgB,QAAQ;EAAQ,cAAc,EAAE,OAAQ;CAAE,EAChE;AAED;AACD;;;;;;;AAQD,eAAsB,iDACpBM,SACAN,gBACe;CACf,MAAM,EAAE,YAAY,QAAQ,GAAG;AAE/B,OAAM,gDACH,YAAY,WAAW,UACxB;EAAE,GAAG;EAAgB,QAAQ;EAAQ,cAAc,EAAE,OAAQ;CAAE,EAChE;AAED;AACD;;;;;;;AAQD,eAAsB,iDACpBM,SACAN,gBACe;CACf,MAAM,EAAE,YAAY,QAAQ,GAAG;AAE/B,OAAM,gDACH,YAAY,WAAW,UACxB;EAAE,GAAG;EAAgB,QAAQ;EAAQ,cAAc,EAAE,OAAQ;CAAE,EAChE;AAED;AACD;;;;AAsGD,MAAa,6CAA6C;CAExD,SAAS;CAET,WAAW;CAEX,gBAAgB;CAEhB,QAAQ;CAER,UAAU;CAEV,YAAY;CAEZ,SAAS;CAET,WAAW;AACZ"}