{"version":3,"file":"index.cjs","names":["z","nameContract","symbolContract","decimalsContract","isConfidentialTokenContract","isContractCallError","isConfidentialWrapperContract","inferredTotalSupplyContract","underlyingContract","allowanceContract","isOperatorContract","Token","zeroAddress","getTokenPairsContract","getConfidentialTokenAddressContract","getTokenAddressContract","getTokenPairsLengthContract","getTokenPairsSliceContract","getTokenPairContract","isConfidentialTokenValidContract","Token","getDelegationExpiryContract","MAX_UINT64"],"sources":["../../../src/query/utils.ts","../../../src/query/query-keys.ts","../../../src/query/invalidation.ts","../../../src/query/token-metadata.ts","../../../src/query/is-confidential.ts","../../../src/query/total-supply.ts","../../../src/query/wrapper-discovery.ts","../../../src/query/underlying-allowance.ts","../../../src/query/confidential-is-operator.ts","../../../src/query/confidential-balance.ts","../../../src/query/confidential-balances.ts","../../../src/query/wrappers-registry.ts","../../../src/query/shield.ts","../../../src/query/transfer.ts","../../../src/query/transfer-from.ts","../../../src/query/set-operator.ts","../../../src/query/approve-underlying.ts","../../../src/query/unshield.ts","../../../src/query/unshield-all.ts","../../../src/query/resume-unshield.ts","../../../src/query/unwrap.ts","../../../src/query/unwrap-all.ts","../../../src/query/finalize-unwrap.ts","../../../src/query/encrypt.ts","../../../src/query/delegated-decrypt.ts","../../../src/query/public-decrypt.ts","../../../src/query/grant-permit.ts","../../../src/query/has-permit.ts","../../../src/query/revoke-permits.ts","../../../src/query/clear-credentials.ts","../../../src/query/delegate-decryption.ts","../../../src/query/user-decrypt.ts","../../../src/query/decrypt-balance-as.ts","../../../src/query/batch-decrypt-balances-as.ts","../../../src/query/revoke-delegation.ts","../../../src/query/delegation-status.ts"],"sourcesContent":["// Adapted from the wagmi codebase\n// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-wrapper-object-types\nfunction isPlainObject(value: any): value is Object {\n  if (!hasObjectPrototype(value)) {\n    return false;\n  }\n\n  // If has modified constructor\n  const ctor = value.constructor;\n  if (ctor === undefined) {\n    return true;\n  }\n\n  // If has modified prototype\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n\n  // If constructor does not have an Object-specific method\n  // eslint-disable-next-line no-prototype-builtins\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n\n  // Most likely a plain Object\n  return true;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction hasObjectPrototype(o: any): boolean {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\n\nexport type StrippedQueryOptionKeys =\n  // Keep this union aligned with @tanstack/query-core behavioral options\n  // (for example QueryObserverOptions). Revisit on every upgrade to avoid\n  // leaking query controls into lower-level query factories.\n  | \"gcTime\"\n  | \"staleTime\"\n  | \"enabled\"\n  | \"select\"\n  | \"refetchInterval\"\n  | \"refetchOnMount\"\n  | \"refetchOnWindowFocus\"\n  | \"refetchOnReconnect\"\n  | \"retry\"\n  | \"retryDelay\"\n  | \"retryOnMount\"\n  | \"queryFn\"\n  | \"queryKey\"\n  | \"queryKeyHashFn\"\n  | \"initialData\"\n  | \"initialDataUpdatedAt\"\n  | \"placeholderData\"\n  | \"structuralSharing\"\n  | \"throwOnError\"\n  | \"meta\"\n  | \"query\"\n  | \"pollingInterval\";\n\n/**\n * Remove TanStack behavioral options from a query config object so only domain\n * parameters remain for the lower-level factory.\n *\n * @example\n * ```ts\n * const params = filterQueryOptions({\n *   query: { enabled: false },\n *   gcTime: 60_000,\n *   owner: \"0xabc\",\n * });\n * // => { owner: \"0xabc\" }\n * ```\n */\nexport function filterQueryOptions<TOptions extends Record<string, unknown>>(\n  options: TOptions,\n): Omit<TOptions, StrippedQueryOptionKeys> {\n  const {\n    gcTime: _gcTime,\n    staleTime: _staleTime,\n    enabled: _enabled,\n    select: _select,\n    refetchInterval: _refetchInterval,\n    refetchOnMount: _refetchOnMount,\n    refetchOnWindowFocus: _refetchOnWindowFocus,\n    refetchOnReconnect: _refetchOnReconnect,\n    retry: _retry,\n    retryDelay: _retryDelay,\n    retryOnMount: _retryOnMount,\n    queryFn: _queryFn,\n    queryKey: _queryKey,\n    queryKeyHashFn: _queryKeyHashFn,\n    initialData: _initialData,\n    initialDataUpdatedAt: _initialDataUpdatedAt,\n    placeholderData: _placeholderData,\n    structuralSharing: _structuralSharing,\n    throwOnError: _throwOnError,\n    meta: _meta,\n    query: _query,\n    pollingInterval: _pollingInterval,\n    ...rest\n  } = options;\n\n  return rest;\n}\n\n/**\n * Stable hash function for query keys.\n * Sorts object keys recursively and converts bigint values to strings.\n *\n * @remarks\n * bigint values are serialized as decimal strings, so `42n` and `\"42\"` hash to\n * the same token when they occupy the same position. This collision is accepted\n * by design for the current query-key conventions in this package.\n */\nexport function hashFn(queryKey: readonly unknown[]): string {\n  return JSON.stringify(queryKey, (_, value) => {\n    if (isPlainObject(value)) {\n      return Object.keys(value)\n        .toSorted()\n        .reduce(\n          (result, key) => {\n            result[key] = value[key];\n            return result;\n          },\n          {} as Record<string, unknown>,\n        );\n    }\n\n    if (typeof value === \"bigint\") {\n      return value.toString();\n    }\n\n    return value;\n  });\n}\n","import { getAddress } from \"viem\";\nimport type { Address, Hex } from \"viem\";\nimport type { WalletAccount } from \"../types\";\n\nconst normalizeAddresses = (addresses: Address[]): Address[] =>\n  addresses.map((address) => getAddress(address));\nconst normalizeAddress = (address?: Address): Address | undefined =>\n  address === undefined ? undefined : getAddress(address);\nconst walletAccountKey = (walletAccount?: WalletAccount) =>\n  walletAccount\n    ? {\n        walletAddress: getAddress(walletAccount.address),\n        walletChainId: walletAccount.chainId,\n      }\n    : {};\n\n/**\n * Canonical query-key namespace for `@zama-fhe/sdk/query`.\n *\n * @example\n * ```ts\n * queryClient.invalidateQueries({\n *   queryKey: zamaQueryKeys.confidentialBalance.token(\"0xToken\"),\n * });\n * ```\n */\nexport const zamaQueryKeys = {\n  confidentialBalance: {\n    all: [\"zama.confidentialBalance\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.confidentialBalance\", { tokenAddress: getAddress(tokenAddress) }] as const,\n    owner: (tokenAddress: Address, owner?: Address, walletAccount?: WalletAccount) =>\n      [\n        \"zama.confidentialBalance\",\n        {\n          tokenAddress: getAddress(tokenAddress),\n          ...walletAccountKey(walletAccount),\n          ...(owner ? { owner: getAddress(owner) } : {}),\n        },\n      ] as const,\n  },\n\n  confidentialBalances: {\n    all: [\"zama.confidentialBalances\"] as const,\n    tokens: (tokenAddresses: Address[], owner?: Address, walletAccount?: WalletAccount) =>\n      [\n        \"zama.confidentialBalances\",\n        {\n          tokenAddresses: normalizeAddresses(tokenAddresses),\n          ...walletAccountKey(walletAccount),\n          ...(owner ? { owner: getAddress(owner) } : {}),\n        },\n      ] as const,\n  },\n\n  tokenMetadata: {\n    all: [\"zama.tokenMetadata\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.tokenMetadata\", { tokenAddress: getAddress(tokenAddress) }] as const,\n  },\n\n  isConfidential: {\n    all: [\"zama.isConfidential\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.isConfidential\", { tokenAddress: getAddress(tokenAddress) }] as const,\n  },\n\n  isWrapper: {\n    all: [\"zama.isWrapper\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.isWrapper\", { tokenAddress: getAddress(tokenAddress) }] as const,\n  },\n\n  wrapperDiscovery: {\n    all: [\"zama.wrapperDiscovery\"] as const,\n    token: (tokenAddress?: Address, erc20Address?: Address, registryAddress?: Address) => {\n      const t = normalizeAddress(tokenAddress);\n      const e = normalizeAddress(erc20Address);\n      const r = normalizeAddress(registryAddress);\n      return [\n        \"zama.wrapperDiscovery\",\n        {\n          ...(t ? { tokenAddress: t } : {}),\n          ...(e ? { erc20Address: e } : {}),\n          ...(r ? { registryAddress: r } : {}),\n        },\n      ] as const;\n    },\n  },\n\n  underlyingAllowance: {\n    all: [\"zama.underlyingAllowance\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.underlyingAllowance\", { tokenAddress: getAddress(tokenAddress) }] as const,\n    scope: (tokenAddress: Address, owner?: Address) =>\n      [\n        \"zama.underlyingAllowance\",\n        {\n          tokenAddress: getAddress(tokenAddress),\n          ...(owner ? { owner: getAddress(owner) } : {}),\n        },\n      ] as const,\n  },\n\n  confidentialIsOperator: {\n    all: [\"zama.confidentialIsOperator\"] as const,\n    token: (tokenAddress?: Address) => {\n      const t = normalizeAddress(tokenAddress);\n      return [\"zama.confidentialIsOperator\", t ? { tokenAddress: t } : {}] as const;\n    },\n    scope: (tokenAddress?: Address, holder?: Address, spender?: Address) => {\n      const t = normalizeAddress(tokenAddress);\n      const h = normalizeAddress(holder);\n      const s = normalizeAddress(spender);\n      return [\n        \"zama.confidentialIsOperator\",\n        {\n          ...(t ? { tokenAddress: t } : {}),\n          ...(h ? { holder: h } : {}),\n          ...(s ? { spender: s } : {}),\n        },\n      ] as const;\n    },\n  },\n\n  totalSupply: {\n    all: [\"zama.totalSupply\"] as const,\n    token: (tokenAddress: Address) =>\n      [\"zama.totalSupply\", { tokenAddress: getAddress(tokenAddress) }] as const,\n  },\n\n  hasPermit: {\n    all: [\"zama.hasPermit\"] as const,\n    scope: (contractAddresses: Address[], walletAccount?: WalletAccount) =>\n      [\n        \"zama.hasPermit\",\n        {\n          ...walletAccountKey(walletAccount),\n          contractAddresses: normalizeAddresses(contractAddresses).toSorted(),\n        },\n      ] as const,\n  },\n\n  delegationStatus: {\n    all: [\"zama.delegationStatus\"] as const,\n    contract: (contractAddress?: Address) => {\n      const t = normalizeAddress(contractAddress);\n      return [\"zama.delegationStatus\", t ? { contractAddress: t } : {}] as const;\n    },\n    scope: (contractAddress?: Address, delegator?: Address, delegate?: Address) => {\n      const t = normalizeAddress(contractAddress);\n      const dr = normalizeAddress(delegator);\n      const de = normalizeAddress(delegate);\n      return [\n        \"zama.delegationStatus\",\n        {\n          ...(t ? { contractAddress: t } : {}),\n          ...(dr ? { delegatorAddress: dr } : {}),\n          ...(de ? { delegateAddress: de } : {}),\n        },\n      ] as const;\n    },\n  },\n\n  decryption: {\n    all: [\"zama.decryption\"] as const,\n    encryptedValue: (encryptedValue: string, contractAddress?: Address) =>\n      [\n        \"zama.decryption\",\n        {\n          encryptedValue,\n          ...(contractAddress === undefined\n            ? {}\n            : { contractAddress: getAddress(contractAddress) }),\n        },\n      ] as const,\n    encryptedInputs: (\n      encryptedInputs: readonly {\n        encryptedValue: string;\n        contractAddress: Address;\n      }[],\n      walletAccount?: WalletAccount,\n    ) =>\n      [\n        \"zama.decryption\",\n        {\n          ...walletAccountKey(walletAccount),\n          encryptedInputs: [...encryptedInputs]\n            .toSorted((a, b) => a.encryptedValue.localeCompare(b.encryptedValue))\n            .map((h) => ({\n              encryptedValue: h.encryptedValue as Hex,\n              contractAddress: getAddress(h.contractAddress),\n            })),\n        },\n      ] as const,\n  },\n\n  wrappersRegistry: {\n    all: [\"zama.wrappersRegistry\"] as const,\n    chainId: () => [\"zama.wrappersRegistry\", { type: \"chainId\" }] as const,\n    tokenPairs: (registryAddress: Address) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"tokenPairs\",\n          registryAddress: getAddress(registryAddress),\n        },\n      ] as const,\n    confidentialTokenAddress: (registryAddress: Address, tokenAddress: Address) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"confidentialTokenAddress\",\n          registryAddress: getAddress(registryAddress),\n          tokenAddress: getAddress(tokenAddress),\n        },\n      ] as const,\n    tokenAddress: (registryAddress: Address, confidentialTokenAddress: Address) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"tokenAddress\",\n          registryAddress: getAddress(registryAddress),\n          confidentialTokenAddress: getAddress(confidentialTokenAddress),\n        },\n      ] as const,\n    tokenPairsLength: (registryAddress: Address) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"tokenPairsLength\",\n          registryAddress: getAddress(registryAddress),\n        },\n      ] as const,\n    tokenPairsSlice: (registryAddress: Address, fromIndex: string, toIndex: string) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"tokenPairsSlice\",\n          registryAddress: getAddress(registryAddress),\n          fromIndex,\n          toIndex,\n        },\n      ] as const,\n    tokenPair: (registryAddress: Address, index: string) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"tokenPair\",\n          registryAddress: getAddress(registryAddress),\n          index,\n        },\n      ] as const,\n    isConfidentialTokenValid: (registryAddress: Address, confidentialTokenAddress: Address) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"isConfidentialTokenValid\",\n          registryAddress: getAddress(registryAddress),\n          confidentialTokenAddress: getAddress(confidentialTokenAddress),\n        },\n      ] as const,\n    listPairs: (registryAddress: Address, page: number, pageSize: number, metadata: boolean) =>\n      [\n        \"zama.wrappersRegistry\",\n        {\n          type: \"listPairs\",\n          registryAddress: getAddress(registryAddress),\n          page,\n          pageSize,\n          metadata,\n        },\n      ] as const,\n  },\n} as const;\n","import type { Address } from \"viem\";\nimport { z } from \"zod/mini\";\nimport { zamaQueryKeys } from \"./query-keys\";\n\nexport interface QueryLike {\n  queryKey: readonly unknown[];\n}\n\nexport interface QueryFilterLike {\n  queryKey?: readonly unknown[];\n  predicate?: (query: QueryLike) => boolean;\n}\n\nexport interface QueryClientLike {\n  invalidateQueries(filters: QueryFilterLike): void | Promise<void>;\n  removeQueries(filters: QueryFilterLike): void;\n}\n\nfunction invalidateUnderlyingAllowanceQueries(\n  queryClient: QueryClientLike,\n  tokenAddress: Address,\n): void {\n  void queryClient.invalidateQueries({\n    queryKey: zamaQueryKeys.underlyingAllowance.token(tokenAddress),\n  });\n}\n\nexport function invalidateAfterUnwrap(queryClient: QueryClientLike, tokenAddress: Address): void {\n  invalidateBalanceQueries(queryClient, tokenAddress);\n  invalidateUnderlyingAllowanceQueries(queryClient, tokenAddress);\n  invalidateWagmiBalanceQueries(queryClient);\n}\n\nexport function invalidateBalanceQueries(\n  queryClient: QueryClientLike,\n  tokenAddress: Address,\n): void {\n  void queryClient.invalidateQueries({\n    queryKey: zamaQueryKeys.confidentialBalance.token(tokenAddress),\n  });\n  void queryClient.invalidateQueries({ queryKey: zamaQueryKeys.confidentialBalances.all });\n}\n\nexport function invalidateAfterShield(queryClient: QueryClientLike, tokenAddress: Address): void {\n  invalidateBalanceQueries(queryClient, tokenAddress);\n  invalidateUnderlyingAllowanceQueries(queryClient, tokenAddress);\n  invalidateWagmiBalanceQueries(queryClient);\n}\n\nexport function invalidateAfterUnshield(queryClient: QueryClientLike, tokenAddress: Address): void {\n  invalidateBalanceQueries(queryClient, tokenAddress);\n  invalidateUnderlyingAllowanceQueries(queryClient, tokenAddress);\n  invalidateWagmiBalanceQueries(queryClient);\n}\n\nexport function invalidateAfterTransfer(queryClient: QueryClientLike, tokenAddress: Address): void {\n  invalidateBalanceQueries(queryClient, tokenAddress);\n}\n\nexport function invalidateAfterApproveUnderlying(\n  queryClient: QueryClientLike,\n  tokenAddress: Address,\n): void {\n  invalidateUnderlyingAllowanceQueries(queryClient, tokenAddress);\n}\n\nexport function invalidateAfterSetOperator(\n  queryClient: QueryClientLike,\n  tokenAddress: Address,\n): void {\n  void queryClient.invalidateQueries({\n    queryKey: zamaQueryKeys.confidentialIsOperator.token(tokenAddress),\n  });\n}\n\nfunction isZamaQuery(query: QueryLike): boolean {\n  return Array.isArray(query.queryKey) && typeof query.queryKey[0] === \"string\"\n    ? query.queryKey[0].startsWith(\"zama.\")\n    : false;\n}\n\nconst balanceFunctionName = z.enum([\"balanceOf\", \"confidentialBalanceOf\"]);\n\nconst balanceReadArgs = z.object({ functionName: balanceFunctionName });\n\nconst batchedReadArgs = z.object({ contracts: z.array(z.unknown()) });\n\nfunction isBalanceReadPart(part: unknown): boolean {\n  if (balanceReadArgs.safeParse(part).success) {\n    return true;\n  }\n  const batched = batchedReadArgs.safeParse(part);\n  return (\n    batched.success && batched.data.contracts.some((c) => balanceReadArgs.safeParse(c).success)\n  );\n}\n\nfunction isWagmiBalanceQuery(query: QueryLike): boolean {\n  return Array.isArray(query.queryKey) && query.queryKey.some(isBalanceReadPart);\n}\n\nexport function invalidateWagmiBalanceQueries(queryClient: QueryClientLike): void {\n  void queryClient.invalidateQueries({ predicate: isWagmiBalanceQuery });\n}\n\nexport function invalidateWalletLifecycleQueries(queryClient: QueryClientLike): void {\n  // Remove (not just invalidate) wallet-local caches so a stale allowed/true\n  // cannot surface between wallet disconnect and the next refetch.\n  queryClient.removeQueries({ queryKey: zamaQueryKeys.decryption.all });\n  queryClient.removeQueries({ queryKey: zamaQueryKeys.hasPermit.all });\n  void queryClient.invalidateQueries({ predicate: isZamaQuery });\n  invalidateWagmiBalanceQueries(queryClient);\n}\n","import { decimalsContract, nameContract, symbolContract } from \"../contracts\";\n\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\n/** ERC-20 token metadata returned by {@link tokenMetadataQueryOptions}. */\nexport interface TokenMetadata {\n  name: string;\n  symbol: string;\n  decimals: number;\n}\n\nexport interface TokenMetadataQueryConfig {\n  query?: Record<string, unknown>;\n}\n\nexport function tokenMetadataQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address,\n  config?: TokenMetadataQueryConfig,\n): QueryFactoryOptions<\n  TokenMetadata,\n  Error,\n  TokenMetadata,\n  ReturnType<typeof zamaQueryKeys.tokenMetadata.token>\n> {\n  const queryKey = zamaQueryKeys.tokenMetadata.token(tokenAddress);\n\n  return {\n    ...filterQueryOptions(config?.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n      const [name, symbol, decimals] = await Promise.all([\n        sdk.provider.readContract(nameContract(keyTokenAddress)),\n        sdk.provider.readContract(symbolContract(keyTokenAddress)),\n        sdk.provider.readContract(decimalsContract(keyTokenAddress)),\n      ]);\n      return { name, symbol, decimals };\n    },\n    staleTime: Infinity,\n    enabled: config?.query?.enabled !== false,\n  };\n}\n","import { isConfidentialTokenContract, isConfidentialWrapperContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { isContractCallError } from \"../utils\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\nexport interface IsConfidentialQueryConfig {\n  query?: Record<string, unknown>;\n}\n\nexport function isConfidentialQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address,\n  config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<\n  boolean,\n  Error,\n  boolean,\n  ReturnType<typeof zamaQueryKeys.isConfidential.token>\n> {\n  const queryKey = zamaQueryKeys.isConfidential.token(tokenAddress);\n  return {\n    ...filterQueryOptions(config?.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n      try {\n        return await sdk.provider.readContract(isConfidentialTokenContract(keyTokenAddress));\n      } catch (err) {\n        // Only suppress contract execution reverts (non-ERC-165 contracts).\n        // Re-throw network/transport errors so TanStack Query's retry logic applies.\n        if (isContractCallError(err)) {\n          return false;\n        }\n        throw err;\n      }\n    },\n    staleTime: Infinity,\n    enabled: config?.query?.enabled !== false,\n  };\n}\n\nexport function isWrapperQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address,\n  config?: IsConfidentialQueryConfig,\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.isWrapper.token>> {\n  const queryKey = zamaQueryKeys.isWrapper.token(tokenAddress);\n  return {\n    ...filterQueryOptions(config?.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n      try {\n        return await sdk.provider.readContract(isConfidentialWrapperContract(keyTokenAddress));\n      } catch (err) {\n        // Only suppress contract execution reverts (non-ERC-165 contracts).\n        // Re-throw network/transport errors so TanStack Query's retry logic applies.\n        if (isContractCallError(err)) {\n          return false;\n        }\n        throw err;\n      }\n    },\n    staleTime: Infinity,\n    enabled: config?.query?.enabled !== false,\n  };\n}\n","import { inferredTotalSupplyContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\nexport interface TotalSupplyQueryConfig {\n  query?: Record<string, unknown>;\n}\n\nexport function totalSupplyQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address,\n  config?: TotalSupplyQueryConfig,\n): QueryFactoryOptions<bigint, Error, bigint, ReturnType<typeof zamaQueryKeys.totalSupply.token>> {\n  const queryKey = zamaQueryKeys.totalSupply.token(tokenAddress);\n\n  return {\n    ...filterQueryOptions(config?.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress }] = context.queryKey;\n      return sdk.provider.readContract(inferredTotalSupplyContract(keyTokenAddress));\n    },\n    staleTime: 30_000,\n    enabled: config?.query?.enabled !== false,\n  };\n}\n","import type { Address } from \"viem\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport { filterQueryOptions } from \"./utils\";\n\nexport interface WrapperDiscoveryQueryConfig {\n  /**\n   * Address of any confidential token you control.\n   * Used to scope the query cache key and to gate whether the query\n   * is enabled — it does not affect which wrapper the registry returns.\n   */\n  tokenAddress?: Address;\n  /**\n   * The ERC-20 token address to discover the confidential wrapper for.\n   * The registry is resolved automatically from chain config.\n   */\n  erc20Address?: Address;\n  /**\n   * The resolved registry contract address for the current chain.\n   * Included in the query key so that switching chains invalidates\n   * stale cached results. Pass `undefined` when the chain ID is not\n   * yet known — the query will be disabled.\n   */\n  registryAddress?: Address;\n  query?: Record<string, unknown>;\n}\n\nexport function wrapperDiscoveryQueryOptions(\n  registry: WrappersRegistry,\n  config: WrapperDiscoveryQueryConfig,\n): QueryFactoryOptions<\n  Address | null,\n  Error,\n  Address | null,\n  ReturnType<typeof zamaQueryKeys.wrapperDiscovery.token>\n> {\n  const queryKey = zamaQueryKeys.wrapperDiscovery.token(\n    config.tokenAddress,\n    config.erc20Address,\n    config.registryAddress,\n  );\n\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { erc20Address }] = context.queryKey;\n      assertNonNullable(erc20Address, \"wrapperDiscoveryQueryOptions: erc20Address\");\n      const result = await registry.getConfidentialToken(erc20Address);\n      return result ? result.confidentialTokenAddress : null;\n    },\n    staleTime: Infinity,\n    enabled:\n      Boolean(config.tokenAddress && config.erc20Address && config.registryAddress) &&\n      config.query?.enabled !== false,\n  };\n}\n","import { allowanceContract, underlyingContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\nimport type { Address } from \"viem\";\n\nexport interface UnderlyingAllowanceQueryConfig {\n  owner?: Address;\n  query?: Record<string, unknown>;\n}\n\nexport function underlyingAllowanceQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address,\n  config: UnderlyingAllowanceQueryConfig,\n): QueryFactoryOptions<\n  bigint,\n  Error,\n  bigint,\n  ReturnType<typeof zamaQueryKeys.underlyingAllowance.scope>\n> {\n  const ownerKey = config.owner;\n  const queryEnabled = config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.underlyingAllowance.scope(tokenAddress, ownerKey);\n\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress, owner: keyOwner }] = context.queryKey;\n      assertNonNullable(keyOwner, \"underlyingAllowanceQueryOptions: owner\");\n      const underlying = await sdk.provider.readContract(underlyingContract(keyTokenAddress));\n      return sdk.provider.readContract(allowanceContract(underlying, keyOwner, keyTokenAddress));\n    },\n    staleTime: 30_000,\n    enabled: Boolean(ownerKey) && queryEnabled,\n  };\n}\n","import { isOperatorContract } from \"../contracts\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { Address } from \"viem\";\n\nexport interface ConfidentialIsOperatorQueryConfig {\n  holder?: Address;\n  spender?: Address;\n  query?: Record<string, unknown>;\n}\n\nexport function confidentialIsOperatorQueryOptions(\n  sdk: ZamaSDK,\n  tokenAddress: Address | undefined,\n  config: ConfidentialIsOperatorQueryConfig,\n): QueryFactoryOptions<\n  boolean,\n  Error,\n  boolean,\n  ReturnType<typeof zamaQueryKeys.confidentialIsOperator.scope>\n> {\n  const holderKey = config.holder;\n  const spenderKey = config.spender;\n  const queryEnabled = config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.confidentialIsOperator.scope(tokenAddress, holderKey, spenderKey);\n\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { tokenAddress: keyTokenAddress, holder: keyHolder, spender: keySpender }] =\n        context.queryKey;\n      assertNonNullable(keyTokenAddress, \"confidentialIsOperatorQueryOptions: tokenAddress\");\n      assertNonNullable(keyHolder, \"confidentialIsOperatorQueryOptions: holder\");\n      assertNonNullable(keySpender, \"confidentialIsOperatorQueryOptions: spender\");\n      return sdk.provider.readContract(isOperatorContract(keyTokenAddress, keyHolder, keySpender));\n    },\n    staleTime: 30_000,\n    enabled: Boolean(tokenAddress && holderKey && spenderKey) && queryEnabled,\n  };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\nexport interface ConfidentialBalanceQueryConfig {\n  tokenAddress: Address;\n  account?: Address;\n  query?: Record<string, unknown>;\n}\n\n/** Query options for a single confidential token balance. Auto-gated on `account`. */\nexport function confidentialBalanceQueryOptions(\n  token: Token,\n  config: ConfidentialBalanceQueryConfig,\n  signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n  bigint,\n  Error,\n  bigint,\n  ReturnType<typeof zamaQueryKeys.confidentialBalance.owner>\n> {\n  const queryOpts = config.query ?? {};\n\n  return {\n    ...filterQueryOptions(queryOpts),\n    queryKey: zamaQueryKeys.confidentialBalance.owner(\n      config.tokenAddress,\n      config.account,\n      signerContext.walletAccount,\n    ),\n    queryFn: async (context) => {\n      const [, { owner: keyOwner }] = context.queryKey;\n      assertNonNullable(keyOwner, \"confidentialBalanceQueryOptions: owner\");\n      return token.balanceOf(keyOwner);\n    },\n    enabled:\n      Boolean(config.account) &&\n      signerContext.walletAccount !== undefined &&\n      queryOpts?.enabled !== false,\n  };\n}\n","import type { Address } from \"viem\";\nimport { Token, type BatchBalancesResult } from \"../token/token\";\nimport { assertNonNullable } from \"../utils/assertions\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\nexport interface ConfidentialBalancesQueryConfig {\n  account?: Address;\n  query?: Record<string, unknown>;\n}\n\nexport function confidentialBalancesQueryOptions(\n  tokens: Token[],\n  config?: ConfidentialBalancesQueryConfig,\n  signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n  BatchBalancesResult,\n  Error,\n  BatchBalancesResult,\n  ReturnType<typeof zamaQueryKeys.confidentialBalances.tokens>\n> {\n  const accountKey = config?.account;\n  const walletAccount = signerContext.walletAccount;\n  const queryOpts = config?.query ?? {};\n  const tokenAddresses = tokens.map((token) => token.address);\n\n  return {\n    ...filterQueryOptions(queryOpts),\n    queryKey: zamaQueryKeys.confidentialBalances.tokens(tokenAddresses, accountKey, walletAccount),\n    queryFn: async (signerContextQuery) => {\n      const [, { owner: keyOwner }] = signerContextQuery.queryKey;\n      assertNonNullable(keyOwner, \"confidentialBalancesQueryOptions: owner\");\n      return Token.batchBalancesOf(tokens, keyOwner);\n    },\n    enabled:\n      Boolean(accountKey) &&\n      tokens.length > 0 &&\n      walletAccount !== undefined &&\n      queryOpts?.enabled !== false,\n  };\n}\n","import { type Address, zeroAddress } from \"viem\";\nimport {\n  getTokenPairsContract,\n  getTokenPairsLengthContract,\n  getTokenPairsSliceContract,\n  getTokenPairContract,\n  getConfidentialTokenAddressContract,\n  getTokenAddressContract,\n  isConfidentialTokenValidContract,\n} from \"../contracts\";\nimport type {\n  TokenWrapperPair,\n  TokenWrapperPairWithMetadata,\n  PaginatedResult,\n} from \"../contracts/wrappers-registry\";\nimport type { WrappersRegistry } from \"../wrappers-registry\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { filterQueryOptions } from \"./utils\";\n\n/** Default registry TTL in milliseconds — matches {@link WrappersRegistry} default of 86400 s. */\nconst DEFAULT_STALE_TIME_MS = 86400 * 1000;\n\nexport interface WrappersRegistryQueryConfig {\n  registryAddress: Address | undefined;\n  query?: Record<string, unknown>;\n}\n\nexport function tokenPairsQueryOptions(\n  sdk: ZamaSDK,\n  config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n  readonly TokenWrapperPair[],\n  Error,\n  readonly TokenWrapperPair[],\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairs>\n> {\n  const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairs(config.registryAddress ?? zeroAddress);\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress }] = context.queryKey;\n      return sdk.provider.readContract(getTokenPairsContract(registryAddress));\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface ConfidentialTokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n  tokenAddress?: Address;\n}\n\nexport function confidentialTokenAddressQueryOptions(\n  sdk: ZamaSDK,\n  config: ConfidentialTokenAddressQueryConfig,\n): QueryFactoryOptions<\n  readonly [boolean, Address],\n  Error,\n  readonly [boolean, Address],\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.confidentialTokenAddress>\n> {\n  const enabled =\n    Boolean(config.registryAddress) &&\n    Boolean(config.tokenAddress) &&\n    config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.confidentialTokenAddress(\n    config.registryAddress ?? zeroAddress,\n    config.tokenAddress ?? zeroAddress,\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress, tokenAddress }] = context.queryKey;\n      return sdk.provider.readContract(\n        getConfidentialTokenAddressContract(registryAddress, tokenAddress),\n      );\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface TokenAddressQueryConfig extends WrappersRegistryQueryConfig {\n  confidentialTokenAddress?: Address;\n}\n\nexport function tokenAddressQueryOptions(\n  sdk: ZamaSDK,\n  config: TokenAddressQueryConfig,\n): QueryFactoryOptions<\n  readonly [boolean, Address],\n  Error,\n  readonly [boolean, Address],\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenAddress>\n> {\n  const enabled =\n    Boolean(config.registryAddress) &&\n    Boolean(config.confidentialTokenAddress) &&\n    config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.tokenAddress(\n    config.registryAddress ?? zeroAddress,\n    config.confidentialTokenAddress ?? zeroAddress,\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n      return sdk.provider.readContract(\n        getTokenAddressContract(registryAddress, confidentialTokenAddress),\n      );\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport function tokenPairsLengthQueryOptions(\n  sdk: ZamaSDK,\n  config: WrappersRegistryQueryConfig,\n): QueryFactoryOptions<\n  bigint,\n  Error,\n  bigint,\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsLength>\n> {\n  const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsLength(\n    config.registryAddress ?? zeroAddress,\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress }] = context.queryKey;\n      return sdk.provider.readContract(getTokenPairsLengthContract(registryAddress));\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface TokenPairsSliceQueryConfig extends WrappersRegistryQueryConfig {\n  fromIndex?: bigint;\n  toIndex?: bigint;\n}\n\nexport function tokenPairsSliceQueryOptions(\n  sdk: ZamaSDK,\n  config: TokenPairsSliceQueryConfig,\n): QueryFactoryOptions<\n  readonly TokenWrapperPair[],\n  Error,\n  readonly TokenWrapperPair[],\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPairsSlice>\n> {\n  const enabled =\n    Boolean(config.registryAddress) &&\n    config.fromIndex !== undefined &&\n    config.toIndex !== undefined &&\n    config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.tokenPairsSlice(\n    config.registryAddress ?? zeroAddress,\n    String(config.fromIndex ?? 0n),\n    String(config.toIndex ?? 0n),\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress, fromIndex, toIndex }] = context.queryKey;\n      return sdk.provider.readContract(\n        getTokenPairsSliceContract(registryAddress, BigInt(fromIndex), BigInt(toIndex)),\n      );\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface TokenPairQueryConfig extends WrappersRegistryQueryConfig {\n  index?: bigint;\n}\n\nexport function tokenPairQueryOptions(\n  sdk: ZamaSDK,\n  config: TokenPairQueryConfig,\n): QueryFactoryOptions<\n  TokenWrapperPair,\n  Error,\n  TokenWrapperPair,\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.tokenPair>\n> {\n  const enabled =\n    Boolean(config.registryAddress) &&\n    config.index !== undefined &&\n    config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.tokenPair(\n    config.registryAddress ?? zeroAddress,\n    String(config.index ?? 0n),\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress, index }] = context.queryKey;\n      return sdk.provider.readContract(getTokenPairContract(registryAddress, BigInt(index)));\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface IsConfidentialTokenValidQueryConfig extends WrappersRegistryQueryConfig {\n  confidentialTokenAddress?: Address;\n}\n\nexport function isConfidentialTokenValidQueryOptions(\n  sdk: ZamaSDK,\n  config: IsConfidentialTokenValidQueryConfig,\n): QueryFactoryOptions<\n  boolean,\n  Error,\n  boolean,\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid>\n> {\n  const enabled =\n    Boolean(config.registryAddress) &&\n    Boolean(config.confidentialTokenAddress) &&\n    config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.isConfidentialTokenValid(\n    config.registryAddress ?? zeroAddress,\n    config.confidentialTokenAddress ?? zeroAddress,\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { registryAddress, confidentialTokenAddress }] = context.queryKey;\n      return sdk.provider.readContract(\n        isConfidentialTokenValidContract(registryAddress, confidentialTokenAddress),\n      );\n    },\n    staleTime: DEFAULT_STALE_TIME_MS,\n    enabled,\n  };\n}\n\nexport interface ListPairsQueryConfig {\n  /**\n   * The registry address for this chain — used as a query key discriminator.\n   * The registry instance already knows how to resolve the address for the\n   * current chain; this field just keeps the TanStack Query cache isolated\n   * per registry contract.\n   */\n  registryAddress: Address | undefined;\n  page?: number;\n  pageSize?: number;\n  metadata?: boolean;\n  query?: Record<string, unknown>;\n}\n\n/**\n * Query options for paginated listing of token wrapper pairs.\n *\n * Accepts a {@link WrappersRegistry} instance rather than a raw provider so that the\n * class-level TTL cache is shared across multiple `queryFn` executions. Pass\n * `sdk.registry` (the ZamaSDK lazy singleton) to ensure a single shared cache.\n */\nexport function listPairsQueryOptions(\n  registry: WrappersRegistry,\n  config: ListPairsQueryConfig,\n): QueryFactoryOptions<\n  PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n  Error,\n  PaginatedResult<TokenWrapperPair | TokenWrapperPairWithMetadata>,\n  ReturnType<typeof zamaQueryKeys.wrappersRegistry.listPairs>\n> {\n  const enabled = Boolean(config.registryAddress) && config.query?.enabled !== false;\n  const queryKey = zamaQueryKeys.wrappersRegistry.listPairs(\n    config.registryAddress ?? zeroAddress,\n    config.page ?? 1,\n    config.pageSize ?? 100,\n    config.metadata ?? false,\n  );\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey,\n    queryFn: async (context) => {\n      const [, { page, pageSize, metadata }] = context.queryKey;\n      return registry.listPairs({ page, pageSize, metadata });\n    },\n    // Use the registry's own TTL so TanStack Query and the class-level cache\n    // operate under the same freshness contract.\n    staleTime: registry.ttlMs,\n    enabled,\n  };\n}\n","import type { Address } from \"viem\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { ShieldOptions, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link shieldMutationOptions}. */\nexport interface ShieldParams extends ShieldOptions {\n  amount: bigint;\n}\n\nexport function shieldMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.shield\", Address], ShieldParams, TransactionResult> {\n  return {\n    mutationKey: [\"zama.shield\", token.address] as const,\n    mutationFn: async ({ amount, ...rest }) => token.shield(amount, rest),\n  };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult, TransferOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferMutationOptions}. */\nexport interface ConfidentialTransferParams extends TransferOptions {\n  to: Address;\n  amount: bigint;\n}\n\nexport function confidentialTransferMutationOptions(\n  token: Token,\n): MutationFactoryOptions<\n  readonly [\"zama.confidentialTransfer\", Address],\n  ConfidentialTransferParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.confidentialTransfer\", token.address] as const,\n    mutationFn: async ({ to, amount, ...options }) =>\n      token.confidentialTransfer(to, amount, options),\n  };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransferCallbacks, TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialTransferFromMutationOptions}. */\nexport interface ConfidentialTransferFromParams {\n  from: Address;\n  to: Address;\n  amount: bigint;\n  /** Optional progress callbacks for the multi-step transfer flow. */\n  callbacks?: TransferCallbacks;\n}\n\nexport function confidentialTransferFromMutationOptions(\n  token: Token,\n): MutationFactoryOptions<\n  readonly [\"zama.confidentialTransferFrom\", Address],\n  ConfidentialTransferFromParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.confidentialTransferFrom\", token.address] as const,\n    mutationFn: async ({ from, to, amount, callbacks }) =>\n      token.confidentialTransferFrom(from, to, amount, callbacks),\n  };\n}\n","import type { Token } from \"../token/token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link confidentialSetOperatorMutationOptions}. */\nexport interface ConfidentialSetOperatorParams {\n  operator: Address;\n  until?: number;\n}\n\nexport function confidentialSetOperatorMutationOptions(\n  token: Token,\n): MutationFactoryOptions<\n  readonly [\"zama.confidentialSetOperator\", Address],\n  ConfidentialSetOperatorParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.confidentialSetOperator\", token.address] as const,\n    mutationFn: async ({ operator, until }) => token.setOperator(operator, until),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link approveUnderlyingMutationOptions}. */\nexport interface ApproveUnderlyingParams {\n  amount?: bigint;\n}\n\nexport function approveUnderlyingMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<\n  readonly [\"zama.approveUnderlying\", Address],\n  ApproveUnderlyingParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.approveUnderlying\", token.address] as const,\n    mutationFn: async ({ amount }) => token.approveUnderlying(amount),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldOptions } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldMutationOptions}. */\nexport interface UnshieldParams extends UnshieldOptions {\n  amount: bigint;\n}\n\nexport function unshieldMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unshield\", Address], UnshieldParams, TransactionResult> {\n  return {\n    mutationKey: [\"zama.unshield\", token.address] as const,\n    mutationFn: async ({ amount, ...options }) => token.unshield(amount, options),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unshieldAllMutationOptions}. */\nexport interface UnshieldAllParams extends UnshieldCallbacks {}\n\nexport function unshieldAllMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<\n  readonly [\"zama.unshieldAll\", Address],\n  UnshieldAllParams | void,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.unshieldAll\", token.address] as const,\n    mutationFn: async (params) => token.unshieldAll(params || undefined),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult, UnshieldCallbacks } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address, Hex } from \"viem\";\n\n/** Variables for {@link resumeUnshieldMutationOptions}. */\nexport interface ResumeUnshieldParams extends UnshieldCallbacks {\n  unwrapTxHash: Hex;\n}\n\nexport function resumeUnshieldMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<\n  readonly [\"zama.resumeUnshield\", Address],\n  ResumeUnshieldParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.resumeUnshield\", token.address] as const,\n    mutationFn: async ({ unwrapTxHash, ...callbacks }) =>\n      token.resumeUnshield(unwrapTxHash, callbacks),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\n/** Variables for {@link unwrapMutationOptions}. */\nexport interface UnwrapParams {\n  amount: bigint;\n}\n\nexport function unwrapMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrap\", Address], UnwrapParams, TransactionResult> {\n  return {\n    mutationKey: [\"zama.unwrap\", token.address] as const,\n    mutationFn: async ({ amount }) => token.unwrap(amount),\n  };\n}\n","import type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n\nexport function unwrapAllMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<readonly [\"zama.unwrapAll\", Address], void, TransactionResult> {\n  return {\n    mutationKey: [\"zama.unwrapAll\", token.address] as const,\n    mutationFn: async () => token.unwrapAll(),\n  };\n}\n","import type { EncryptedValue } from \"../relayer/relayer-sdk.types\";\nimport type { WrappedToken } from \"../token/wrapped-token\";\nimport type { TransactionResult } from \"../types\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport type { Address } from \"viem\";\n/** Variables for {@link finalizeUnwrapMutationOptions}. */\nexport type FinalizeUnwrapParams = {\n  /** Identifier from an `UnwrapRequested` event. */\n  unwrapRequestId: EncryptedValue;\n};\n\nexport function finalizeUnwrapMutationOptions(\n  token: WrappedToken,\n): MutationFactoryOptions<\n  readonly [\"zama.finalizeUnwrap\", Address],\n  FinalizeUnwrapParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.finalizeUnwrap\", token.address] as const,\n    mutationFn: async ({ unwrapRequestId }) => token.finalizeUnwrap(unwrapRequestId),\n  };\n}\n","import type { EncryptParams, EncryptResult } from \"../relayer/relayer-sdk.types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\nexport function encryptMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.encrypt\"], EncryptParams, EncryptResult> {\n  return {\n    mutationKey: [\"zama.encrypt\"],\n    mutationFn: async (params) => sdk.encrypt(params),\n  };\n}\n","import type { Address } from \"viem\";\nimport type { ClearValue, EncryptedValue } from \"../relayer/relayer-sdk.types\";\nimport type { EncryptedInput } from \"./user-decrypt\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\nexport interface DelegatedDecryptValuesMutationParams {\n  encryptedInputs: EncryptedInput[];\n  delegatorAddress: Address;\n}\n\nexport function delegatedDecryptValuesMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<\n  readonly [\"zama.delegatedDecryptValues\"],\n  DelegatedDecryptValuesMutationParams,\n  Readonly<Record<EncryptedValue, ClearValue>>\n> {\n  return {\n    mutationKey: [\"zama.delegatedDecryptValues\"],\n    mutationFn: async (params) =>\n      sdk.decryption.delegatedDecryptValues(params.encryptedInputs, params.delegatorAddress),\n  };\n}\n","import type { ClearValue, EncryptedValue, PublicDecryptResult } from \"../relayer/relayer-sdk.types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\n\nexport function decryptPublicValuesMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<\n  readonly [\"zama.decryptPublicValues\"],\n  EncryptedValue[],\n  PublicDecryptResult\n> {\n  return {\n    mutationKey: [\"zama.decryptPublicValues\"],\n    mutationFn: async (handles) => sdk.decryption.decryptPublicValues(handles),\n    onSuccess: (data, _variables, _onMutateResult, context) => {\n      for (const [handle, value] of Object.entries(data.clearValues) as [\n        EncryptedValue,\n        ClearValue,\n      ][]) {\n        context.client.setQueryData(zamaQueryKeys.decryption.encryptedValue(handle), value);\n      }\n    },\n  };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\nexport function grantPermitMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.grantPermit\"], Address[], void> {\n  return {\n    mutationKey: [\"zama.grantPermit\"],\n    mutationFn: (contractAddresses) => sdk.permits.grantPermit(contractAddresses),\n  };\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\nimport { filterQueryOptions } from \"./utils\";\n\nexport interface HasPermitQueryConfig {\n  /** Contract addresses to check credentials against. */\n  contractAddresses: Address[];\n  /**\n   * Standard TanStack query options. `hasPermit` intentionally overrides cache\n   * timing because permit state is wallet-local, not server state: every fetch\n   * should read the SDK credential service directly.\n   */\n  query?: Record<string, unknown>;\n}\n\nexport function hasPermitQueryOptions(\n  sdk: ZamaSDK,\n  config: HasPermitQueryConfig,\n  signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<boolean, Error, boolean, ReturnType<typeof zamaQueryKeys.hasPermit.scope>> {\n  const callerEnabled = config.query?.enabled !== false;\n  return {\n    ...filterQueryOptions(config?.query ?? {}),\n    queryKey: zamaQueryKeys.hasPermit.scope(config.contractAddresses, signerContext.walletAccount),\n    queryFn: (context) => {\n      const [, { contractAddresses }] = context.queryKey;\n      return sdk.permits.hasPermit(contractAddresses as Address[]);\n    },\n    staleTime: 0,\n    gcTime: 0,\n    refetchOnMount: \"always\",\n    refetchOnWindowFocus: false,\n    enabled:\n      callerEnabled &&\n      signerContext.walletAccount !== undefined &&\n      config.contractAddresses.length > 0,\n  } as const;\n}\n","import type { Address } from \"viem\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.revokePermits}. */\nexport function revokePermitsMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.revokePermits\"], Address[] | void, void> {\n  return {\n    mutationKey: [\"zama.revokePermits\"],\n    mutationFn: (contracts: Address[] | void) =>\n      contracts === undefined ? sdk.permits.revokePermits() : sdk.permits.revokePermits(contracts),\n  };\n}\n","import type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** TanStack Query mutation factory for {@link Permits.clear}. */\nexport function clearCredentialsMutationOptions(\n  sdk: ZamaSDK,\n): MutationFactoryOptions<readonly [\"zama.clearCredentials\"], void, void> {\n  return {\n    mutationKey: [\"zama.clearCredentials\"],\n    mutationFn: () => sdk.permits.clear(),\n  };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link delegateDecryptionMutationOptions}. */\nexport interface DelegateDecryptionParams {\n  delegateAddress: Address;\n  expirationDate?: Date;\n}\n\nexport function delegateDecryptionMutationOptions(\n  sdk: ZamaSDK,\n  contractAddress: Address,\n): MutationFactoryOptions<\n  readonly [\"zama.delegateDecryption\", Address],\n  DelegateDecryptionParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.delegateDecryption\", contractAddress] as const,\n    mutationFn: async ({ delegateAddress, expirationDate }) =>\n      sdk.delegations.delegateDecryption({ contractAddress, delegateAddress, expirationDate }),\n  };\n}\n","import type { UserDecryptResults } from \"@zama-fhe/relayer-sdk/bundle\";\nimport type { Address } from \"viem\";\nimport type { EncryptedValue } from \"../relayer/relayer-sdk.types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport type { SignerQueryContext } from \"./signer-query-context\";\n\nexport interface EncryptedInput {\n  encryptedValue: EncryptedValue;\n  contractAddress: Address;\n}\n\n/** Alias for {@link UserDecryptResults}. */\nexport type DecryptResult = UserDecryptResults;\n\nexport function decryptValuesQueryOptions(\n  sdk: ZamaSDK,\n  encryptedInputs: EncryptedInput[],\n  signerContext: SignerQueryContext = {},\n): QueryFactoryOptions<\n  DecryptResult,\n  Error,\n  DecryptResult,\n  ReturnType<typeof zamaQueryKeys.decryption.encryptedInputs>\n> {\n  return {\n    queryKey: zamaQueryKeys.decryption.encryptedInputs(\n      encryptedInputs,\n      signerContext.walletAccount,\n    ),\n    queryFn: (context) => {\n      const [, { encryptedInputs: keyedInputs }] = context.queryKey;\n      return sdk.decryption.decryptValues(keyedInputs);\n    },\n    staleTime: Infinity,\n    enabled: encryptedInputs.length > 0 && signerContext.walletAccount !== undefined,\n  };\n}\n","import type { Address } from \"viem\";\nimport type { Token } from \"../token/token\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link decryptBalanceAsMutationOptions}. */\nexport interface DecryptBalanceAsParams {\n  delegatorAddress: Address;\n  accountAddress?: Address;\n}\n\nexport function decryptBalanceAsMutationOptions(\n  token: Token,\n): MutationFactoryOptions<\n  readonly [\"zama.decryptBalanceAs\", Address],\n  DecryptBalanceAsParams,\n  bigint\n> {\n  return {\n    mutationKey: [\"zama.decryptBalanceAs\", token.address] as const,\n    mutationFn: async ({ delegatorAddress, accountAddress }) =>\n      token.decryptBalanceAs({ delegatorAddress, accountAddress }),\n  };\n}\n","import { Token, type BatchDecryptAsOptions } from \"../token/token\";\nimport type { Address } from \"viem\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link batchDecryptBalancesAsMutationOptions}. */\nexport type BatchDecryptBalancesAsParams = BatchDecryptAsOptions;\n\nexport function batchDecryptBalancesAsMutationOptions(\n  tokens: Token[],\n): MutationFactoryOptions<\n  readonly [\"zama.batchDecryptBalancesAs\", ...Address[]],\n  BatchDecryptBalancesAsParams,\n  Map<Address, bigint>\n> {\n  return {\n    mutationKey: [\"zama.batchDecryptBalancesAs\", ...tokens.map((t) => t.address)] as const,\n    mutationFn: async (params) => Token.batchDecryptBalancesAs(tokens, params),\n  };\n}\n","import type { Address } from \"viem\";\nimport type { TransactionResult } from \"../types\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { MutationFactoryOptions } from \"./factory-types\";\n\n/** Variables for {@link revokeDelegationMutationOptions}. */\nexport interface RevokeDelegationParams {\n  delegateAddress: Address;\n}\n\nexport function revokeDelegationMutationOptions(\n  sdk: ZamaSDK,\n  contractAddress: Address,\n): MutationFactoryOptions<\n  readonly [\"zama.revokeDelegation\", Address],\n  RevokeDelegationParams,\n  TransactionResult\n> {\n  return {\n    mutationKey: [\"zama.revokeDelegation\", contractAddress] as const,\n    mutationFn: async ({ delegateAddress }) =>\n      sdk.delegations.revokeDelegation({ contractAddress, delegateAddress }),\n  };\n}\n","import type { Address } from \"viem\";\nimport { MAX_UINT64 } from \"../contracts\";\nimport { getDelegationExpiryContract } from \"../contracts/acl\";\nimport type { ZamaSDK } from \"../zama-sdk\";\nimport type { QueryFactoryOptions } from \"./factory-types\";\nimport { filterQueryOptions } from \"./utils\";\nimport { zamaQueryKeys } from \"./query-keys\";\nimport { assertNonNullable } from \"../utils\";\n\nexport interface DelegationStatusData {\n  isActive: boolean;\n  expiryTimestamp: bigint;\n}\n\nexport interface DelegationStatusQueryConfig {\n  contractAddress: Address | undefined;\n  delegatorAddress?: Address;\n  delegateAddress?: Address;\n  query?: Record<string, unknown>;\n}\n\nexport function delegationStatusQueryOptions(\n  sdk: ZamaSDK,\n  config: DelegationStatusQueryConfig,\n): QueryFactoryOptions<\n  DelegationStatusData,\n  Error,\n  DelegationStatusData,\n  ReturnType<typeof zamaQueryKeys.delegationStatus.scope>\n> {\n  return {\n    ...filterQueryOptions(config.query ?? {}),\n    queryKey: zamaQueryKeys.delegationStatus.scope(\n      config.contractAddress,\n      config.delegatorAddress,\n      config.delegateAddress,\n    ),\n    queryFn: async (context) => {\n      const [, { contractAddress, delegatorAddress, delegateAddress }] = context.queryKey;\n      assertNonNullable(contractAddress, \"delegationStatusQueryOptions: contractAddress\");\n      assertNonNullable(delegatorAddress, \"delegationStatusQueryOptions: delegatorAddress\");\n      assertNonNullable(delegateAddress, \"delegationStatusQueryOptions: delegateAddress\");\n      const acl = await sdk.relayer.getAclAddress();\n      const expiryTimestamp = await sdk.provider.readContract(\n        getDelegationExpiryContract(acl, delegatorAddress, delegateAddress, contractAddress),\n      );\n      // Derive isActive from expiry + chain time to stay consistent\n      // with sdk.delegations.isActive() (avoids client-clock skew).\n      let isActive: boolean;\n      if (expiryTimestamp === 0n) {\n        isActive = false;\n      } else if (expiryTimestamp === MAX_UINT64) {\n        isActive = true;\n      } else {\n        const now = await sdk.provider.getBlockTimestamp();\n        isActive = expiryTimestamp > now;\n      }\n      return { isActive, expiryTimestamp };\n    },\n    enabled:\n      Boolean(config.contractAddress && config.delegatorAddress && config.delegateAddress) &&\n      config.query?.enabled !== false,\n  } as const;\n}\n"],"mappings":"oNAEA,SAAS,EAAc,EAA6B,CAClD,GAAI,CAAC,EAAmB,CAAK,EAC3B,MAAO,GAIT,IAAM,EAAO,EAAM,YACnB,GAAI,IAAS,IAAA,GACX,MAAO,GAIT,IAAM,EAAO,EAAK,UAYlB,MALA,EANI,CAAC,EAAmB,CAAI,GAMxB,CAAC,EAAK,eAAe,eAAe,EAM1C,CAGA,SAAS,EAAmB,EAAiB,CAC3C,OAAO,OAAO,UAAU,SAAS,KAAK,CAAC,IAAM,iBAC/C,CA2CA,SAAgB,EACd,EACyC,CACzC,GAAM,CACJ,OAAQ,EACR,UAAW,EACX,QAAS,EACT,OAAQ,EACR,gBAAiB,EACjB,eAAgB,EAChB,qBAAsB,EACtB,mBAAoB,EACpB,MAAO,EACP,WAAY,EACZ,aAAc,EACd,QAAS,EACT,SAAU,EACV,eAAgB,EAChB,YAAa,EACb,qBAAsB,EACtB,gBAAiB,EACjB,kBAAmB,GACnB,aAAc,EACd,KAAM,EACN,MAAO,EACP,gBAAiB,EACjB,GAAG,GACD,EAEJ,OAAO,CACT,CAWA,SAAgB,EAAO,EAAsC,CAC3D,OAAO,KAAK,UAAU,GAAW,EAAG,IAC9B,EAAc,CAAK,EACd,OAAO,KAAK,CAAK,CAAC,CACtB,SAAS,CAAC,CACV,QACE,EAAQ,KACP,EAAO,GAAO,EAAM,GACb,GAET,CAAC,CACH,EAGA,OAAO,GAAU,SACZ,EAAM,SAAS,EAGjB,CACR,CACH,CCpIA,MAAM,EAAsB,GAC1B,EAAU,IAAK,IAAA,EAAA,EAAA,WAAA,CAAuB,CAAO,CAAC,EAC1C,EAAoB,GACxB,IAAY,IAAA,GAAY,IAAA,IAAA,EAAA,EAAA,WAAA,CAAuB,CAAO,EAClD,EAAoB,GACxB,EACI,CACE,eAAA,EAAA,EAAA,WAAA,CAA0B,EAAc,OAAO,EAC/C,cAAe,EAAc,OAC/B,EACA,CAAC,EAYM,EAAgB,CAC3B,oBAAqB,CACnB,IAAK,CAAC,0BAA0B,EAChC,MAAQ,GACN,CAAC,2BAA4B,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,EACzE,OAAQ,EAAuB,EAAiB,IAC9C,CACE,2BACA,CACE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,EACrC,GAAG,EAAiB,CAAa,EACjC,GAAI,EAAQ,CAAE,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAK,CAAE,EAAI,CAAC,CAC9C,CACF,CACJ,EAEA,qBAAsB,CACpB,IAAK,CAAC,2BAA2B,EACjC,QAAS,EAA2B,EAAiB,IACnD,CACE,4BACA,CACE,eAAgB,EAAmB,CAAc,EACjD,GAAG,EAAiB,CAAa,EACjC,GAAI,EAAQ,CAAE,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAK,CAAE,EAAI,CAAC,CAC9C,CACF,CACJ,EAEA,cAAe,CACb,IAAK,CAAC,oBAAoB,EAC1B,MAAQ,GACN,CAAC,qBAAsB,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,CACrE,EAEA,eAAgB,CACd,IAAK,CAAC,qBAAqB,EAC3B,MAAQ,GACN,CAAC,sBAAuB,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,CACtE,EAEA,UAAW,CACT,IAAK,CAAC,gBAAgB,EACtB,MAAQ,GACN,CAAC,iBAAkB,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,CACjE,EAEA,iBAAkB,CAChB,IAAK,CAAC,uBAAuB,EAC7B,OAAQ,EAAwB,EAAwB,IAA8B,CACpF,IAAM,EAAI,EAAiB,CAAY,EACjC,EAAI,EAAiB,CAAY,EACjC,EAAI,EAAiB,CAAe,EAC1C,MAAO,CACL,wBACA,CACE,GAAI,EAAI,CAAE,aAAc,CAAE,EAAI,CAAC,EAC/B,GAAI,EAAI,CAAE,aAAc,CAAE,EAAI,CAAC,EAC/B,GAAI,EAAI,CAAE,gBAAiB,CAAE,EAAI,CAAC,CACpC,CACF,CACF,CACF,EAEA,oBAAqB,CACnB,IAAK,CAAC,0BAA0B,EAChC,MAAQ,GACN,CAAC,2BAA4B,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,EACzE,OAAQ,EAAuB,IAC7B,CACE,2BACA,CACE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,EACrC,GAAI,EAAQ,CAAE,OAAA,EAAA,EAAA,WAAA,CAAkB,CAAK,CAAE,EAAI,CAAC,CAC9C,CACF,CACJ,EAEA,uBAAwB,CACtB,IAAK,CAAC,6BAA6B,EACnC,MAAQ,GAA2B,CACjC,IAAM,EAAI,EAAiB,CAAY,EACvC,MAAO,CAAC,8BAA+B,EAAI,CAAE,aAAc,CAAE,EAAI,CAAC,CAAC,CACrE,EACA,OAAQ,EAAwB,EAAkB,IAAsB,CACtE,IAAM,EAAI,EAAiB,CAAY,EACjC,EAAI,EAAiB,CAAM,EAC3B,EAAI,EAAiB,CAAO,EAClC,MAAO,CACL,8BACA,CACE,GAAI,EAAI,CAAE,aAAc,CAAE,EAAI,CAAC,EAC/B,GAAI,EAAI,CAAE,OAAQ,CAAE,EAAI,CAAC,EACzB,GAAI,EAAI,CAAE,QAAS,CAAE,EAAI,CAAC,CAC5B,CACF,CACF,CACF,EAEA,YAAa,CACX,IAAK,CAAC,kBAAkB,EACxB,MAAQ,GACN,CAAC,mBAAoB,CAAE,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CAAE,CAAC,CACnE,EAEA,UAAW,CACT,IAAK,CAAC,gBAAgB,EACtB,OAAQ,EAA8B,IACpC,CACE,iBACA,CACE,GAAG,EAAiB,CAAa,EACjC,kBAAmB,EAAmB,CAAiB,CAAC,CAAC,SAAS,CACpE,CACF,CACJ,EAEA,iBAAkB,CAChB,IAAK,CAAC,uBAAuB,EAC7B,SAAW,GAA8B,CACvC,IAAM,EAAI,EAAiB,CAAe,EAC1C,MAAO,CAAC,wBAAyB,EAAI,CAAE,gBAAiB,CAAE,EAAI,CAAC,CAAC,CAClE,EACA,OAAQ,EAA2B,EAAqB,IAAuB,CAC7E,IAAM,EAAI,EAAiB,CAAe,EACpC,EAAK,EAAiB,CAAS,EAC/B,EAAK,EAAiB,CAAQ,EACpC,MAAO,CACL,wBACA,CACE,GAAI,EAAI,CAAE,gBAAiB,CAAE,EAAI,CAAC,EAClC,GAAI,EAAK,CAAE,iBAAkB,CAAG,EAAI,CAAC,EACrC,GAAI,EAAK,CAAE,gBAAiB,CAAG,EAAI,CAAC,CACtC,CACF,CACF,CACF,EAEA,WAAY,CACV,IAAK,CAAC,iBAAiB,EACvB,gBAAiB,EAAwB,IACvC,CACE,kBACA,CACE,iBACA,GAAI,IAAoB,IAAA,GACpB,CAAC,EACD,CAAE,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,CAAE,CACrD,CACF,EACF,iBACE,EAIA,IAEA,CACE,kBACA,CACE,GAAG,EAAiB,CAAa,EACjC,gBAAiB,CAAC,GAAG,CAAe,CAAC,CAClC,UAAU,EAAG,IAAM,EAAE,eAAe,cAAc,EAAE,cAAc,CAAC,CAAC,CACpE,IAAK,IAAO,CACX,eAAgB,EAAE,eAClB,iBAAA,EAAA,EAAA,WAAA,CAA4B,EAAE,eAAe,CAC/C,EAAE,CACN,CACF,CACJ,EAEA,iBAAkB,CAChB,IAAK,CAAC,uBAAuB,EAC7B,YAAe,CAAC,wBAAyB,CAAE,KAAM,SAAU,CAAC,EAC5D,WAAa,GACX,CACE,wBACA,CACE,KAAM,aACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,CAC7C,CACF,EACF,0BAA2B,EAA0B,IACnD,CACE,wBACA,CACE,KAAM,2BACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,cAAA,EAAA,EAAA,WAAA,CAAyB,CAAY,CACvC,CACF,EACF,cAAe,EAA0B,IACvC,CACE,wBACA,CACE,KAAM,eACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,0BAAA,EAAA,EAAA,WAAA,CAAqC,CAAwB,CAC/D,CACF,EACF,iBAAmB,GACjB,CACE,wBACA,CACE,KAAM,mBACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,CAC7C,CACF,EACF,iBAAkB,EAA0B,EAAmB,IAC7D,CACE,wBACA,CACE,KAAM,kBACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,YACA,SACF,CACF,EACF,WAAY,EAA0B,IACpC,CACE,wBACA,CACE,KAAM,YACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,OACF,CACF,EACF,0BAA2B,EAA0B,IACnD,CACE,wBACA,CACE,KAAM,2BACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,0BAAA,EAAA,EAAA,WAAA,CAAqC,CAAwB,CAC/D,CACF,EACF,WAAY,EAA0B,EAAc,EAAkB,IACpE,CACE,wBACA,CACE,KAAM,YACN,iBAAA,EAAA,EAAA,WAAA,CAA4B,CAAe,EAC3C,OACA,WACA,UACF,CACF,CACJ,CACF,EChQA,SAAS,EACP,EACA,EACM,CACN,EAAiB,kBAAkB,CACjC,SAAU,EAAc,oBAAoB,MAAM,CAAY,CAChE,CAAC,CACH,CAEA,SAAgB,EAAsB,EAA8B,EAA6B,CAC/F,EAAyB,EAAa,CAAY,EAClD,EAAqC,EAAa,CAAY,EAC9D,EAA8B,CAAW,CAC3C,CAEA,SAAgB,EACd,EACA,EACM,CACN,EAAiB,kBAAkB,CACjC,SAAU,EAAc,oBAAoB,MAAM,CAAY,CAChE,CAAC,EACD,EAAiB,kBAAkB,CAAE,SAAU,EAAc,qBAAqB,GAAI,CAAC,CACzF,CAEA,SAAgB,EAAsB,EAA8B,EAA6B,CAC/F,EAAyB,EAAa,CAAY,EAClD,EAAqC,EAAa,CAAY,EAC9D,EAA8B,CAAW,CAC3C,CAEA,SAAgB,EAAwB,EAA8B,EAA6B,CACjG,EAAyB,EAAa,CAAY,EAClD,EAAqC,EAAa,CAAY,EAC9D,EAA8B,CAAW,CAC3C,CAEA,SAAgB,GAAwB,EAA8B,EAA6B,CACjG,EAAyB,EAAa,CAAY,CACpD,CAEA,SAAgB,EACd,EACA,EACM,CACN,EAAqC,EAAa,CAAY,CAChE,CAEA,SAAgB,EACd,EACA,EACM,CACN,EAAiB,kBAAkB,CACjC,SAAU,EAAc,uBAAuB,MAAM,CAAY,CACnE,CAAC,CACH,CAEA,SAAS,EAAY,EAA2B,CAC9C,OAAO,MAAM,QAAQ,EAAM,QAAQ,GAAK,OAAO,EAAM,SAAS,IAAO,SACjE,EAAM,SAAS,EAAE,CAAC,WAAW,OAAO,EACpC,EACN,CAEA,MAAM,EAAsBA,EAAAA,EAAE,KAAK,CAAC,YAAa,uBAAuB,CAAC,EAEnE,EAAkBA,EAAAA,EAAE,OAAO,CAAE,aAAc,CAAoB,CAAC,EAEhE,EAAkBA,EAAAA,EAAE,OAAO,CAAE,UAAWA,EAAAA,EAAE,MAAMA,EAAAA,EAAE,QAAQ,CAAC,CAAE,CAAC,EAEpE,SAAS,EAAkB,EAAwB,CACjD,GAAI,EAAgB,UAAU,CAAI,CAAC,CAAC,QAClC,MAAO,GAET,IAAM,EAAU,EAAgB,UAAU,CAAI,EAC9C,OACE,EAAQ,SAAW,EAAQ,KAAK,UAAU,KAAM,GAAM,EAAgB,UAAU,CAAC,CAAC,CAAC,OAAO,CAE9F,CAEA,SAAS,EAAoB,EAA2B,CACtD,OAAO,MAAM,QAAQ,EAAM,QAAQ,GAAK,EAAM,SAAS,KAAK,CAAiB,CAC/E,CAEA,SAAgB,EAA8B,EAAoC,CAChF,EAAiB,kBAAkB,CAAE,UAAW,CAAoB,CAAC,CACvE,CAEA,SAAgB,EAAiC,EAAoC,CAGnF,EAAY,cAAc,CAAE,SAAU,EAAc,WAAW,GAAI,CAAC,EACpE,EAAY,cAAc,CAAE,SAAU,EAAc,UAAU,GAAI,CAAC,EACnE,EAAiB,kBAAkB,CAAE,UAAW,CAAY,CAAC,EAC7D,EAA8B,CAAW,CAC3C,CC7FA,SAAgB,EACd,EACA,EACA,EAMA,CACA,IAAM,EAAW,EAAc,cAAc,MAAM,CAAY,EAE/D,MAAO,CACL,GAAG,EAAmB,GAAQ,OAAS,CAAC,CAAC,EACzC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,IAAqB,EAAQ,SAChD,CAAC,EAAM,EAAQ,GAAY,MAAM,QAAQ,IAAI,CACjD,EAAI,SAAS,aAAaC,EAAAA,EAAa,CAAe,CAAC,EACvD,EAAI,SAAS,aAAaC,EAAAA,EAAe,CAAe,CAAC,EACzD,EAAI,SAAS,aAAaC,EAAAA,EAAiB,CAAe,CAAC,CAC7D,CAAC,EACD,MAAO,CAAE,OAAM,SAAQ,UAAS,CAClC,EACA,UAAW,IACX,QAAS,GAAQ,OAAO,UAAY,EACtC,CACF,CClCA,SAAgB,EACd,EACA,EACA,EAMA,CACA,IAAM,EAAW,EAAc,eAAe,MAAM,CAAY,EAChE,MAAO,CACL,GAAG,EAAmB,GAAQ,OAAS,CAAC,CAAC,EACzC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,IAAqB,EAAQ,SACtD,GAAI,CACF,OAAO,MAAM,EAAI,SAAS,aAAaC,EAAAA,EAA4B,CAAe,CAAC,CACrF,OAAS,EAAK,CAGZ,GAAIC,EAAAA,EAAoB,CAAG,EACzB,MAAO,GAET,MAAM,CACR,CACF,EACA,UAAW,IACX,QAAS,GAAQ,OAAO,UAAY,EACtC,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACgG,CAChG,IAAM,EAAW,EAAc,UAAU,MAAM,CAAY,EAC3D,MAAO,CACL,GAAG,EAAmB,GAAQ,OAAS,CAAC,CAAC,EACzC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,IAAqB,EAAQ,SACtD,GAAI,CACF,OAAO,MAAM,EAAI,SAAS,aAAaC,EAAAA,EAA8B,CAAe,CAAC,CACvF,OAAS,EAAK,CAGZ,GAAID,EAAAA,EAAoB,CAAG,EACzB,MAAO,GAET,MAAM,CACR,CACF,EACA,UAAW,IACX,QAAS,GAAQ,OAAO,UAAY,EACtC,CACF,CC1DA,SAAgB,EACd,EACA,EACA,EACgG,CAChG,IAAM,EAAW,EAAc,YAAY,MAAM,CAAY,EAE7D,MAAO,CACL,GAAG,EAAmB,GAAQ,OAAS,CAAC,CAAC,EACzC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,IAAqB,EAAQ,SACtD,OAAO,EAAI,SAAS,aAAaE,EAAAA,EAA4B,CAAe,CAAC,CAC/E,EACA,UAAW,IACX,QAAS,GAAQ,OAAO,UAAY,EACtC,CACF,CCCA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EAAW,EAAc,iBAAiB,MAC9C,EAAO,aACP,EAAO,aACP,EAAO,eACT,EAEA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,iBAAkB,EAAQ,SACrC,EAAA,EAAkB,EAAc,4CAA4C,EAC5E,IAAM,EAAS,MAAM,EAAS,qBAAqB,CAAY,EAC/D,OAAO,EAAS,EAAO,yBAA2B,IACpD,EACA,UAAW,IACX,QACE,GAAQ,EAAO,cAAgB,EAAO,cAAgB,EAAO,kBAC7D,EAAO,OAAO,UAAY,EAC9B,CACF,CC7CA,SAAgB,EACd,EACA,EACA,EAMA,CACA,IAAM,EAAW,EAAO,MAClB,EAAe,EAAO,OAAO,UAAY,GACzC,EAAW,EAAc,oBAAoB,MAAM,EAAc,CAAQ,EAE/E,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,EAAiB,MAAO,IAAc,EAAQ,SACvE,EAAA,EAAkB,EAAU,wCAAwC,EACpE,IAAM,EAAa,MAAM,EAAI,SAAS,aAAaC,EAAAA,EAAmB,CAAe,CAAC,EACtF,OAAO,EAAI,SAAS,aAAaC,EAAAA,EAAkB,EAAY,EAAU,CAAe,CAAC,CAC3F,EACA,UAAW,IACX,QAAS,EAAQ,GAAa,CAChC,CACF,CCzBA,SAAgB,EACd,EACA,EACA,EAMA,CACA,IAAM,EAAY,EAAO,OACnB,EAAa,EAAO,QACpB,EAAe,EAAO,OAAO,UAAY,GACzC,EAAW,EAAc,uBAAuB,MAAM,EAAc,EAAW,CAAU,EAE/F,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,aAAc,EAAiB,OAAQ,EAAW,QAAS,IACpE,EAAQ,SAIV,OAHA,EAAA,EAAkB,EAAiB,kDAAkD,EACrF,EAAA,EAAkB,EAAW,4CAA4C,EACzE,EAAA,EAAkB,EAAY,6CAA6C,EACpE,EAAI,SAAS,aAAaC,EAAAA,EAAmB,EAAiB,EAAW,CAAU,CAAC,CAC7F,EACA,UAAW,IACX,QAAS,GAAQ,GAAgB,GAAa,IAAe,CAC/D,CACF,CC5BA,SAAgB,EACd,EACA,EACA,EAAoC,CAAC,EAMrC,CACA,IAAM,EAAY,EAAO,OAAS,CAAC,EAEnC,MAAO,CACL,GAAG,EAAmB,CAAS,EAC/B,SAAU,EAAc,oBAAoB,MAC1C,EAAO,aACP,EAAO,QACP,EAAc,aAChB,EACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,MAAO,IAAc,EAAQ,SAExC,OADA,EAAA,EAAkB,EAAU,wCAAwC,EAC7D,EAAM,UAAU,CAAQ,CACjC,EACA,QACE,EAAQ,EAAO,SACf,EAAc,gBAAkB,IAAA,IAChC,GAAW,UAAY,EAC3B,CACF,CC/BA,SAAgB,EACd,EACA,EACA,EAAoC,CAAC,EAMrC,CACA,IAAM,EAAa,GAAQ,QACrB,EAAgB,EAAc,cAC9B,EAAY,GAAQ,OAAS,CAAC,EAC9B,EAAiB,EAAO,IAAK,GAAU,EAAM,OAAO,EAE1D,MAAO,CACL,GAAG,EAAmB,CAAS,EAC/B,SAAU,EAAc,qBAAqB,OAAO,EAAgB,EAAY,CAAa,EAC7F,QAAS,KAAO,IAAuB,CACrC,GAAM,EAAG,CAAE,MAAO,IAAc,EAAmB,SAEnD,OADA,EAAA,EAAkB,EAAU,yCAAyC,EAC9DC,EAAAA,EAAM,gBAAgB,EAAQ,CAAQ,CAC/C,EACA,QACE,EAAQ,GACR,EAAO,OAAS,GAChB,IAAkB,IAAA,IAClB,GAAW,UAAY,EAC3B,CACF,CCpBA,MAAM,EAAwB,MAAQ,IAOtC,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EAAU,EAAQ,EAAO,iBAAoB,EAAO,OAAO,UAAY,GACvE,EAAW,EAAc,iBAAiB,WAAW,EAAO,iBAAmBC,EAAAA,WAAW,EAChG,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,oBAAqB,EAAQ,SACxC,OAAO,EAAI,SAAS,aAAaC,EAAAA,EAAsB,CAAe,CAAC,CACzE,EACA,UAAW,EACX,SACF,CACF,CAMA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EACJ,EAAQ,EAAO,iBACf,EAAQ,EAAO,cACf,EAAO,OAAO,UAAY,GACtB,EAAW,EAAc,iBAAiB,yBAC9C,EAAO,iBAAmBD,EAAAA,YAC1B,EAAO,cAAgBA,EAAAA,WACzB,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,iBAAkB,EAAQ,SACtD,OAAO,EAAI,SAAS,aAClBE,EAAAA,EAAoC,EAAiB,CAAY,CACnE,CACF,EACA,UAAW,EACX,SACF,CACF,CAMA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EACJ,EAAQ,EAAO,iBACf,EAAQ,EAAO,0BACf,EAAO,OAAO,UAAY,GACtB,EAAW,EAAc,iBAAiB,aAC9C,EAAO,iBAAmBF,EAAAA,YAC1B,EAAO,0BAA4BA,EAAAA,WACrC,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,6BAA8B,EAAQ,SAClE,OAAO,EAAI,SAAS,aAClBG,EAAAA,EAAwB,EAAiB,CAAwB,CACnE,CACF,EACA,UAAW,EACX,SACF,CACF,CAEA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EAAU,EAAQ,EAAO,iBAAoB,EAAO,OAAO,UAAY,GACvE,EAAW,EAAc,iBAAiB,iBAC9C,EAAO,iBAAmBH,EAAAA,WAC5B,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,oBAAqB,EAAQ,SACxC,OAAO,EAAI,SAAS,aAAaI,EAAAA,EAA4B,CAAe,CAAC,CAC/E,EACA,UAAW,EACX,SACF,CACF,CAOA,SAAgB,GACd,EACA,EAMA,CACA,IAAM,EACJ,EAAQ,EAAO,iBACf,EAAO,YAAc,IAAA,IACrB,EAAO,UAAY,IAAA,IACnB,EAAO,OAAO,UAAY,GACtB,EAAW,EAAc,iBAAiB,gBAC9C,EAAO,iBAAmBJ,EAAAA,YAC1B,OAAO,EAAO,WAAa,EAAE,EAC7B,OAAO,EAAO,SAAW,EAAE,CAC7B,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,YAAW,YAAa,EAAQ,SAC5D,OAAO,EAAI,SAAS,aAClBK,EAAAA,EAA2B,EAAiB,OAAO,CAAS,EAAG,OAAO,CAAO,CAAC,CAChF,CACF,EACA,UAAW,EACX,SACF,CACF,CAMA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EACJ,EAAQ,EAAO,iBACf,EAAO,QAAU,IAAA,IACjB,EAAO,OAAO,UAAY,GACtB,EAAW,EAAc,iBAAiB,UAC9C,EAAO,iBAAmBL,EAAAA,YAC1B,OAAO,EAAO,OAAS,EAAE,CAC3B,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,UAAW,EAAQ,SAC/C,OAAO,EAAI,SAAS,aAAaM,EAAAA,EAAqB,EAAiB,OAAO,CAAK,CAAC,CAAC,CACvF,EACA,UAAW,EACX,SACF,CACF,CAMA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EACJ,EAAQ,EAAO,iBACf,EAAQ,EAAO,0BACf,EAAO,OAAO,UAAY,GACtB,EAAW,EAAc,iBAAiB,yBAC9C,EAAO,iBAAmBN,EAAAA,YAC1B,EAAO,0BAA4BA,EAAAA,WACrC,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,6BAA8B,EAAQ,SAClE,OAAO,EAAI,SAAS,aAClBO,EAAAA,EAAiC,EAAiB,CAAwB,CAC5E,CACF,EACA,UAAW,EACX,SACF,CACF,CAuBA,SAAgB,EACd,EACA,EAMA,CACA,IAAM,EAAU,EAAQ,EAAO,iBAAoB,EAAO,OAAO,UAAY,GACvE,EAAW,EAAc,iBAAiB,UAC9C,EAAO,iBAAmBP,EAAAA,YAC1B,EAAO,MAAQ,EACf,EAAO,UAAY,IACnB,EAAO,UAAY,EACrB,EACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,WACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,OAAM,WAAU,aAAc,EAAQ,SACjD,OAAO,EAAS,UAAU,CAAE,OAAM,WAAU,UAAS,CAAC,CACxD,EAGA,UAAW,EAAS,MACpB,SACF,CACF,CCpSA,SAAgB,EACd,EAC4F,CAC5F,MAAO,CACL,YAAa,CAAC,cAAe,EAAM,OAAO,EAC1C,WAAY,MAAO,CAAE,SAAQ,GAAG,KAAW,EAAM,OAAO,EAAQ,CAAI,CACtE,CACF,CCNA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,4BAA6B,EAAM,OAAO,EACxD,WAAY,MAAO,CAAE,KAAI,SAAQ,GAAG,KAClC,EAAM,qBAAqB,EAAI,EAAQ,CAAO,CAClD,CACF,CCTA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,gCAAiC,EAAM,OAAO,EAC5D,WAAY,MAAO,CAAE,OAAM,KAAI,SAAQ,eACrC,EAAM,yBAAyB,EAAM,EAAI,EAAQ,CAAS,CAC9D,CACF,CCfA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,+BAAgC,EAAM,OAAO,EAC3D,WAAY,MAAO,CAAE,WAAU,WAAY,EAAM,YAAY,EAAU,CAAK,CAC9E,CACF,CCZA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,yBAA0B,EAAM,OAAO,EACrD,WAAY,MAAO,CAAE,YAAa,EAAM,kBAAkB,CAAM,CAClE,CACF,CCXA,SAAgB,EACd,EACgG,CAChG,MAAO,CACL,YAAa,CAAC,gBAAiB,EAAM,OAAO,EAC5C,WAAY,MAAO,CAAE,SAAQ,GAAG,KAAc,EAAM,SAAS,EAAQ,CAAO,CAC9E,CACF,CCTA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,mBAAoB,EAAM,OAAO,EAC/C,WAAY,KAAO,IAAW,EAAM,YAAY,GAAU,IAAA,EAAS,CACrE,CACF,CCTA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,sBAAuB,EAAM,OAAO,EAClD,WAAY,MAAO,CAAE,eAAc,GAAG,KACpC,EAAM,eAAe,EAAc,CAAS,CAChD,CACF,CCZA,SAAgB,GACd,EAC4F,CAC5F,MAAO,CACL,YAAa,CAAC,cAAe,EAAM,OAAO,EAC1C,WAAY,MAAO,CAAE,YAAa,EAAM,OAAO,CAAM,CACvD,CACF,CCZA,SAAgB,GACd,EACuF,CACvF,MAAO,CACL,YAAa,CAAC,iBAAkB,EAAM,OAAO,EAC7C,WAAY,SAAY,EAAM,UAAU,CAC1C,CACF,CCDA,SAAgB,GACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,sBAAuB,EAAM,OAAO,EAClD,WAAY,MAAO,CAAE,qBAAsB,EAAM,eAAe,CAAe,CACjF,CACF,CClBA,SAAgB,GACd,EACiF,CACjF,MAAO,CACL,YAAa,CAAC,cAAc,EAC5B,WAAY,KAAO,IAAW,EAAI,QAAQ,CAAM,CAClD,CACF,CCAA,SAAgB,GACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,6BAA6B,EAC3C,WAAY,KAAO,IACjB,EAAI,WAAW,uBAAuB,EAAO,gBAAiB,EAAO,gBAAgB,CACzF,CACF,CClBA,SAAgB,EACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,0BAA0B,EACxC,WAAY,KAAO,IAAY,EAAI,WAAW,oBAAoB,CAAO,EACzE,WAAY,EAAM,EAAY,EAAiB,IAAY,CACzD,IAAK,GAAM,CAAC,EAAQ,KAAU,OAAO,QAAQ,EAAK,WAAW,EAI3D,EAAQ,OAAO,aAAa,EAAc,WAAW,eAAe,CAAM,EAAG,CAAK,CAEtF,CACF,CACF,CCpBA,SAAgB,GACd,EACwE,CACxE,MAAO,CACL,YAAa,CAAC,kBAAkB,EAChC,WAAa,GAAsB,EAAI,QAAQ,YAAY,CAAiB,CAC9E,CACF,CCOA,SAAgB,GACd,EACA,EACA,EAAoC,CAAC,EAC2D,CAChG,IAAM,EAAgB,EAAO,OAAO,UAAY,GAChD,MAAO,CACL,GAAG,EAAmB,GAAQ,OAAS,CAAC,CAAC,EACzC,SAAU,EAAc,UAAU,MAAM,EAAO,kBAAmB,EAAc,aAAa,EAC7F,QAAU,GAAY,CACpB,GAAM,EAAG,CAAE,sBAAuB,EAAQ,SAC1C,OAAO,EAAI,QAAQ,UAAU,CAA8B,CAC7D,EACA,UAAW,EACX,OAAQ,EACR,eAAgB,SAChB,qBAAsB,GACtB,QACE,GACA,EAAc,gBAAkB,IAAA,IAChC,EAAO,kBAAkB,OAAS,CACtC,CACF,CCnCA,SAAgB,GACd,EACiF,CACjF,MAAO,CACL,YAAa,CAAC,oBAAoB,EAClC,WAAa,GACX,IAAc,IAAA,GAAY,EAAI,QAAQ,cAAc,EAAI,EAAI,QAAQ,cAAc,CAAS,CAC/F,CACF,CCTA,SAAgB,GACd,EACwE,CACxE,MAAO,CACL,YAAa,CAAC,uBAAuB,EACrC,eAAkB,EAAI,QAAQ,MAAM,CACtC,CACF,CCAA,SAAgB,GACd,EACA,EAKA,CACA,MAAO,CACL,YAAa,CAAC,0BAA2B,CAAe,EACxD,WAAY,MAAO,CAAE,kBAAiB,oBACpC,EAAI,YAAY,mBAAmB,CAAE,kBAAiB,kBAAiB,gBAAe,CAAC,CAC3F,CACF,CCRA,SAAgB,GACd,EACA,EACA,EAAoC,CAAC,EAMrC,CACA,MAAO,CACL,SAAU,EAAc,WAAW,gBACjC,EACA,EAAc,aAChB,EACA,QAAU,GAAY,CACpB,GAAM,EAAG,CAAE,gBAAiB,IAAiB,EAAQ,SACrD,OAAO,EAAI,WAAW,cAAc,CAAW,CACjD,EACA,UAAW,IACX,QAAS,EAAgB,OAAS,GAAK,EAAc,gBAAkB,IAAA,EACzE,CACF,CC5BA,SAAgB,GACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,wBAAyB,EAAM,OAAO,EACpD,WAAY,MAAO,CAAE,mBAAkB,oBACrC,EAAM,iBAAiB,CAAE,mBAAkB,gBAAe,CAAC,CAC/D,CACF,CCfA,SAAgB,GACd,EAKA,CACA,MAAO,CACL,YAAa,CAAC,8BAA+B,GAAG,EAAO,IAAK,GAAM,EAAE,OAAO,CAAC,EAC5E,WAAY,KAAO,IAAWQ,EAAAA,EAAM,uBAAuB,EAAQ,CAAM,CAC3E,CACF,CCRA,SAAgB,GACd,EACA,EAKA,CACA,MAAO,CACL,YAAa,CAAC,wBAAyB,CAAe,EACtD,WAAY,MAAO,CAAE,qBACnB,EAAI,YAAY,iBAAiB,CAAE,kBAAiB,iBAAgB,CAAC,CACzE,CACF,CCFA,SAAgB,GACd,EACA,EAMA,CACA,MAAO,CACL,GAAG,EAAmB,EAAO,OAAS,CAAC,CAAC,EACxC,SAAU,EAAc,iBAAiB,MACvC,EAAO,gBACP,EAAO,iBACP,EAAO,eACT,EACA,QAAS,KAAO,IAAY,CAC1B,GAAM,EAAG,CAAE,kBAAiB,mBAAkB,oBAAqB,EAAQ,SAC3E,EAAA,EAAkB,EAAiB,+CAA+C,EAClF,EAAA,EAAkB,EAAkB,gDAAgD,EACpF,EAAA,EAAkB,EAAiB,+CAA+C,EAClF,IAAM,EAAM,MAAM,EAAI,QAAQ,cAAc,EACtC,EAAkB,MAAM,EAAI,SAAS,aACzCC,EAAAA,EAA4B,EAAK,EAAkB,EAAiB,CAAe,CACrF,EAGI,EASJ,MARA,CAME,EANE,IAAoB,GACX,GACF,IAAoBC,EAAAA,EAClB,GAGA,EAAkB,MADX,EAAI,SAAS,kBAAkB,EAG5C,CAAE,WAAU,iBAAgB,CACrC,EACA,QACE,GAAQ,EAAO,iBAAmB,EAAO,kBAAoB,EAAO,kBACpE,EAAO,OAAO,UAAY,EAC9B,CACF"}