{"version":3,"file":"index.mjs","names":["transformCalls","account: AccountInterface | undefined","useGetStarknetConnect","handleChange: StandardEventsListeners[\"change\"]","account","cleanup: (() => void) | undefined","targetChainId: bigint","StarknetWalletApi","state: StarknetState","useQuery","useQuery_","useMutation","useMutation_","useInfiniteQuery","useInfiniteQuery_","useMutation","abi","useQuery","DEFAULT_FETCH_INTERVAL","useQuery","useQuery","useQuery","useMutation","abi","useMutation","useMutation","useQuery","useInfiniteQuery","useQuery","useQuery","useQuery","useMutation","useQuery","useQuery","useQuery","useQuery"],"sources":["../src/errors.ts","../src/connectors/mock.ts","../src/context/account.tsx","../src/context/starknet.tsx","../src/context/index.tsx","../src/utils.ts","../src/hooks/use-provider.ts","../src/hooks/use-account.ts","../src/query.ts","../src/hooks/use-wallet-request.ts","../src/hooks/use-add-chain.ts","../src/hooks/use-contract.ts","../src/hooks/use-block-number.ts","../src/hooks/use-invalidate-on-block.ts","../src/hooks/use-network.ts","../src/hooks/use-balance.ts","../src/hooks/use-block.ts","../src/hooks/use-call.ts","../src/hooks/use-connect.ts","../src/hooks/use-contract-factory.ts","../src/hooks/use-declare-contract.ts","../src/hooks/use-deploy-account.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-estimate-fees.ts","../src/hooks/use-events.ts","../src/hooks/use-explorer.ts","../src/hooks/use-nonce-for-address.ts","../src/hooks/use-paymaster-estimate-fees.ts","../src/hooks/use-paymaster-gas-tokens.ts","../src/hooks/use-paymaster-send-transaction.ts","../src/hooks/use-read-contract.ts","../src/hooks/use-send-transaction.ts","../src/hooks/use-sign.ts","../src/hooks/use-stark-address.ts","../src/hooks/use-stark-name.ts","../src/hooks/use-stark-profile.ts","../src/hooks/use-switch-chain.ts","../src/hooks/use-transaction-receipt.ts","../src/hooks/use-universal-deployer-contract.tsx","../src/hooks/use-watch-asset.ts"],"sourcesContent":["export class ConnectorAlreadyConnectedError extends Error {\n  override name = \"ConnectorAlreadyConnectedError\";\n  override message = \"Connector already connected\";\n}\n\nexport class ConnectorNotConnectedError extends Error {\n  override name = \"ConnectorNotConnectedError\";\n  override message = \"Connector not connected\";\n}\n\nexport class ConnectorNotFoundError extends Error {\n  override name = \"ConnectorNotFoundError\";\n  override message = \"Connector not found\";\n}\n\nexport class UserRejectedRequestError extends Error {\n  override name = \"UserRejectedRequestError\";\n  override message = \"User rejected request\";\n}\n\nexport class WalletRequestError extends Error {\n  constructor(error?: string | Error | unknown, _cause?: Error | unknown) {\n    super(error instanceof Error ? error.message : typeof error === \"string\" ? error : \"Unknown Request Error\");\n    this.name = \"WalletRequestError\";\n    this.stack = error instanceof Error ? error.stack : undefined;\n  }\n}\n\nexport class UserNotConnectedError extends Error {\n  override name = \"UserNotConnectedError\";\n  override message = \"User not connected\";\n}\n\nexport class UnsupportedAccountInterfaceError extends Error {\n  override name = \"UnsupportedAccountInterfaceError\";\n  override message =\n    \"Unsupported account interface. starknet-react v1 only supports the starknet.js v5 account interface\";\n}\n","import type { WalletWithStarknetFeatures } from \"@starknet-io/get-starknet-core\";\nimport type { RequestFn, RequestFnCall, RpcMessage, RpcTypeToMessageMap } from \"@starknet-io/types-js\";\nimport type { Chain } from \"@starknet-start/chains\";\nimport type {\n  StandardConnectMethod,\n  StandardDisconnectMethod,\n  StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\nimport type { AccountInterface, Call } from \"starknet\";\n\nimport {\n  StandardConnect,\n  StandardDisconnect,\n  StandardEvents,\n  type StandardEventsListeners,\n  type StandardEventsNames,\n  StarknetWalletApi,\n} from \"@starknet-io/get-starknet-core\";\nimport {\n  type AddDeclareTransactionParameters,\n  type AddInvokeTransactionParameters,\n  Permission,\n  type Call as RequestCall,\n  type SwitchStarknetChainParameters,\n  type TypedData,\n} from \"@starknet-io/types-js\";\nimport { devnet, mainnet, sepolia } from \"@starknet-start/chains\";\n\nimport { UserRejectedRequestError } from \"../errors\";\n\nexport type MockWalletOptions = {\n  id: string;\n  name: string;\n  icon?: string;\n  available?: boolean;\n  failConnect?: boolean;\n  rejectRequest?: boolean;\n  rejectDeclare?: boolean;\n};\n\nexport type MockWalletAccounts = {\n  sepolia: AccountInterface[];\n  mainnet: AccountInterface[];\n};\n\nexport type IdentifierString = `${string}:${string}`;\n\nexport function chainToWalletStandardChain(chain: Chain): IdentifierString {\n  return `starknet:0x${chain.id.toString(16)}`;\n}\n\nfunction transformCalls(calls: RequestCall[]): Call[] {\n  return calls.map(\n    (call) =>\n      ({\n        contractAddress: call.contract_address,\n        entrypoint: call.entry_point,\n        calldata: call.calldata,\n      }) as Call,\n  );\n}\n\nexport class MockWallet implements WalletWithStarknetFeatures {\n  readonly version = \"1.0.0\" as const;\n  readonly name: string;\n  readonly icon: `data:image/svg+xml;base64,${string}`;\n\n  private _accounts: MockWalletAccounts;\n  private _accountIndex = 0;\n  private _connected = false;\n  private _chainId: bigint = devnet.id;\n  private _options: MockWalletOptions;\n\n  private _listeners: {\n    [E in StandardEventsNames]?: StandardEventsListeners[E][];\n  } = {};\n\n  constructor(accounts: MockWalletAccounts, options: MockWalletOptions) {\n    if (accounts.mainnet.length === 0 || accounts.sepolia.length === 0) {\n      throw new Error(\"MockWallet: accounts must not be empty\");\n    }\n\n    this._accounts = accounts;\n    this._options = options;\n    this.name = options.name;\n    this.icon = \"data:image/svg+xml;base64,mock\";\n  }\n\n  get chains(): readonly IdentifierString[] {\n    const currentChain = this._getCurrentChain();\n    return [chainToWalletStandardChain(currentChain)];\n  }\n\n  get accounts() {\n    if (!this._connected) {\n      return [];\n    }\n\n    const chain = this._getCurrentChain();\n\n    return [\n      {\n        address: this._currentAccount.address,\n        publicKey: new Uint8Array(),\n        chains: [chainToWalletStandardChain(chain)],\n        features: [],\n      },\n    ];\n  }\n\n  get features(): WalletWithStarknetFeatures[\"features\"] {\n    return {\n      [StandardConnect]: {\n        version: \"1.0.0\",\n        connect: this._connect.bind(this),\n      },\n      [StandardDisconnect]: {\n        version: \"1.0.0\",\n        disconnect: this._disconnect.bind(this),\n      },\n      [StandardEvents]: {\n        version: \"1.0.0\",\n        on: this._on.bind(this),\n      },\n      [StarknetWalletApi]: {\n        id: this._options.id,\n        version: \"1.0.0\",\n        request: this._request.bind(this),\n        walletVersion: \"1.0.0\",\n      },\n    };\n  }\n\n  // Public methods for testing\n  switchChain(chainId: bigint): void {\n    this._chainId = chainId;\n    this._accountIndex = 0;\n    this._emit(\"change\", { chains: this.chains, accounts: this.accounts });\n  }\n\n  switchAccount(accountIndex: number): void {\n    this._accountIndex = accountIndex;\n    this._emit(\"change\", { accounts: this.accounts });\n  }\n\n  readonly instanceId = Math.random().toString(36).slice(2);\n\n  updateOptions(options: Partial<MockWalletOptions>): void {\n    this._options = { ...this._options, ...options };\n  }\n\n  // Private implementation\n  private _connect: StandardConnectMethod = async ({ silent = false } = {}) => {\n    if (this._options.failConnect) {\n      throw new UserRejectedRequestError();\n    }\n\n    if (!this._options.available) {\n      throw new Error(\"Wallet not available\");\n    }\n\n    const accounts = await this._request({\n      type: \"wallet_requestAccounts\",\n      params: { silent_mode: silent },\n    });\n\n    if (accounts.length === 0) {\n      return { accounts: [] };\n    }\n\n    this._connected = true;\n\n    this._emit(\"change\", { accounts: this.accounts });\n\n    return { accounts: this.accounts };\n  };\n\n  private _disconnect: StandardDisconnectMethod = async () => {\n    this._connected = false;\n    this._emit(\"change\", { accounts: [] });\n  };\n\n  private _on: StandardEventsOnMethod = (event, listener) => {\n    if (!this._listeners[event]) {\n      this._listeners[event] = [];\n    }\n    this._listeners[event]?.push(listener);\n\n    return (): void => this._off(event, listener);\n  };\n\n  private _off<E extends StandardEventsNames>(event: E, listener: StandardEventsListeners[E]): void {\n    const listeners = this._listeners[event];\n    if (!listeners) return;\n\n    this._listeners[event] = listeners.filter((existingListener) => listener !== existingListener);\n  }\n\n  private _emit<E extends StandardEventsNames>(event: E, ...args: Parameters<StandardEventsListeners[E]>): void {\n    const listeners = this._listeners[event];\n    if (!listeners) return;\n\n    for (const listener of listeners) {\n      listener.apply(null, args);\n    }\n  }\n\n  private _request: RequestFn = async <T extends RpcMessage[\"type\"]>(\n    call: RequestFnCall<T>,\n  ): Promise<RpcTypeToMessageMap[T][\"result\"]> => {\n    const { type, params } = call;\n\n    if (this._options.rejectRequest) {\n      throw new UserRejectedRequestError();\n    }\n\n    switch (type) {\n      case \"wallet_requestChainId\":\n        return `0x${this._chainId.toString(16)}`;\n\n      case \"wallet_getPermissions\":\n        if (this._connected) return [Permission.ACCOUNTS];\n        return [];\n\n      case \"wallet_requestAccounts\":\n        return [this._currentAccount.address];\n\n      case \"wallet_addStarknetChain\":\n        return true;\n\n      case \"wallet_watchAsset\":\n        return true;\n\n      case \"wallet_switchStarknetChain\": {\n        if (!params) throw new Error(\"Params are missing\");\n        const { chainId } = params as SwitchStarknetChainParameters;\n        this.switchChain(BigInt(chainId));\n        return true;\n      }\n\n      case \"wallet_addDeclareTransaction\": {\n        if (this._options.rejectDeclare) {\n          throw new UserRejectedRequestError();\n        }\n        if (!params) throw new Error(\"Params are missing\");\n        const { compiled_class_hash, contract_class, class_hash } = params as AddDeclareTransactionParameters;\n\n        return await this._currentAccount.declare({\n          compiledClassHash: compiled_class_hash,\n          contract: {\n            ...contract_class,\n            abi: JSON.parse(contract_class.abi),\n          },\n          classHash: class_hash,\n        });\n      }\n\n      case \"wallet_addInvokeTransaction\": {\n        if (!params) throw new Error(\"Params are missing\");\n        const { calls } = params as AddInvokeTransactionParameters;\n        return await this._currentAccount.execute(transformCalls(calls));\n      }\n\n      case \"wallet_signTypedData\": {\n        if (!params) throw new Error(\"Params are missing\");\n        const { domain, message, primaryType, types } = params as TypedData;\n        return (await this._currentAccount.signMessage({\n          domain,\n          message,\n          primaryType,\n          types,\n        })) as string[];\n      }\n\n      default:\n        throw new Error(`Unknown request type: ${type}`);\n    }\n  };\n\n  private get _currentAccount(): AccountInterface {\n    let account: AccountInterface | undefined;\n    if (this._chainId === mainnet.id) {\n      account = this._accounts.mainnet[this._accountIndex];\n    } else {\n      account = this._accounts.sepolia[this._accountIndex];\n    }\n\n    if (!account) {\n      throw new Error(\"No account available\");\n    }\n\n    return account;\n  }\n\n  private _getCurrentChain(): Chain {\n    if (this._chainId === mainnet.id) return mainnet;\n    if (this._chainId === sepolia.id) return sepolia;\n    return devnet;\n  }\n}\n","import type { Address } from \"@starknet-start/chains\";\nimport type { AccountInterface } from \"starknet\";\n\nimport React, { useContext } from \"react\";\n\nconst AccountContext = React.createContext<{\n  account: AccountInterface | undefined;\n  address: Address | undefined;\n}>({\n  account: undefined,\n  address: undefined,\n});\n\nexport function useStarknetAccount() {\n  const { account, address } = useContext(AccountContext);\n  return { account, address };\n}\n\nexport function AccountProvider({\n  address,\n  account,\n  children,\n}: {\n  address?: Address;\n  account?: AccountInterface;\n  children: React.ReactNode;\n}) {\n  return <AccountContext.Provider value={{ account, address }}>{children}</AccountContext.Provider>;\n}\n","import type { ExplorerFactory } from \"@starknet-start/explorers\";\nimport type { ChainProviderFactory } from \"@starknet-start/providers\";\nimport type { AccountInterface, PaymasterRpc, ProviderInterface } from \"starknet\";\n\nimport { StandardEvents, type StandardEventsListeners } from \"@starknet-io/get-starknet-core\";\nimport {\n  GetStarknetProvider,\n  type UseConnect,\n  useConnect as useGetStarknetConnect,\n  useStarknetProvider,\n} from \"@starknet-io/get-starknet-modal\";\nimport { StarknetWalletApi } from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport { type Address, type Chain, mainnet, sepolia } from \"@starknet-start/chains\";\nimport { avnuPaymasterProvider, type ChainPaymasterFactory } from \"@starknet-start/providers/paymaster\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from \"react\";\nimport { constants, WalletAccountV5 } from \"starknet\";\n\nimport { AccountProvider } from \"./account\";\n\ntype Simplify<T> = { [K in keyof T]: T[K] } & {};\n\ntype GetStarknetState = ReturnType<typeof useStarknetProvider>;\ntype GetStarknetProviderProps = Parameters<typeof GetStarknetProvider>[0];\n\nconst defaultQueryClient = new QueryClient();\n\nexport type StarknetState = Simplify<\n  {\n    chains: Chain[];\n    chain: Chain;\n    explorer?: ExplorerFactory;\n    provider: ProviderInterface;\n    paymasterProvider?: PaymasterRpc;\n    error?: Error;\n  } & UseConnect &\n    GetStarknetState\n>;\n\nconst StarknetContext = createContext<StarknetState | undefined>(undefined);\n\nexport type StarknetProviderProps = Simplify<\n  StarknetProviderInnerProps & Omit<GetStarknetProviderProps, \"children\"> & { children?: React.ReactNode }\n>;\n\ntype StarknetProviderInnerProps = {\n  /** Chains supported by the app. */\n  chains: Chain[];\n  /** Provider to use. */\n  provider: ChainProviderFactory;\n  /** Paymaster provider to use. */\n  paymasterProvider?: ChainPaymasterFactory;\n  /** Explorer to use. */\n  explorer?: ExplorerFactory;\n  /** Connect the first available connector on page load. */\n  autoConnect?: boolean;\n  /** React-query client to use. */\n  queryClient?: QueryClient;\n  /** Application. */\n  children?: React.ReactNode;\n  /** Default chain to use when wallet is not connected */\n  defaultChainId?: bigint;\n};\n\nexport function StarknetProvider(props: StarknetProviderProps) {\n  const { recommendedWallets, extraWallets, store, children, ...rest } = props;\n  return (\n    <GetStarknetProvider extraWallets={extraWallets} recommendedWallets={recommendedWallets} store={store}>\n      <StarknetProviderInner {...rest}>{children}</StarknetProviderInner>\n    </GetStarknetProvider>\n  );\n}\n\nfunction StarknetProviderInner({\n  chains,\n  provider,\n  // autoConnect,\n  children,\n  defaultChainId,\n  explorer,\n  paymasterProvider,\n  queryClient,\n}: StarknetProviderInnerProps) {\n  const { connect, disconnect, isConnecting, isError, connected } = useGetStarknetConnect();\n  const { extraWallets, injectedWallets, onSelectedChange, recommendedWallets, wallets, selected } =\n    useStarknetProvider();\n\n  const defaultChain = defaultChainId ? (chains.find((c) => c.id === defaultChainId) ?? chains[0]) : chains[0];\n\n  if (defaultChain === undefined) {\n    throw new Error(\"Must provide at least one chain.\");\n  }\n\n  // check for duplicated ids in the chains list\n  const seen = new Set<bigint>();\n\n  for (const chain of chains) {\n    if (seen.has(chain.id)) {\n      throw new Error(`Duplicated chain id found: ${chain.id}`);\n    }\n    seen.add(chain.id);\n  }\n\n  const { provider: defaultProvider } = useMemo(\n    () => providerForChain(defaultChain, provider),\n    [defaultChain, provider],\n  );\n  const _paymasterProvider = useMemo(() => paymasterProvider ?? avnuPaymasterProvider({}), [paymasterProvider]);\n  const { paymasterProvider: defaultPaymasterProvider } = useMemo(\n    () => paymasterProviderForChain(defaultChain, _paymasterProvider),\n    [defaultChain, _paymasterProvider],\n  );\n\n  const [currentChain, setCurrentChain] = useState<Chain>(defaultChain);\n  const [currentProvider, setCurrentProvider] = useState<ProviderInterface>(defaultProvider);\n  const [currentPaymasterProvider, setCurrentPaymasterProvider] = useState<PaymasterRpc | undefined>(\n    defaultPaymasterProvider,\n  );\n  const [address, setAddress] = useState<Address | undefined>();\n  const [account, setAccount] = useState<AccountInterface | undefined>();\n\n  const updateChainAndProvider = useCallback(\n    (chainId: bigint) => {\n      const targetChain = chains.find((c) => c.id === chainId);\n      if (!targetChain) {\n        return;\n      }\n\n      const { provider: newProvider } = providerForChain(targetChain, provider);\n      const { paymasterProvider: newPaymasterProvider } = paymasterProviderForChain(targetChain, _paymasterProvider);\n      setCurrentChain(targetChain);\n      setCurrentProvider(newProvider);\n      setCurrentPaymasterProvider(newPaymasterProvider);\n    },\n    [chains, provider, _paymasterProvider],\n  );\n\n  const handleChange: StandardEventsListeners[\"change\"] = useCallback(\n    (change) => {\n      if (change.accounts && change.accounts.length > 0) {\n        const account = change.accounts[0];\n        setAddress(account.address as Address);\n\n        try {\n          const chainIdentifier = account.chains[0];\n          const parts = chainIdentifier.split(\":\");\n          const chainIdHex = parts[parts.length - 1];\n          const chainId = BigInt(chainIdHex);\n\n          updateChainAndProvider(chainId);\n        } catch (error) {\n          console.error(\"Failed to parse chain ID:\", error);\n        }\n      }\n    },\n    [updateChainAndProvider],\n  );\n\n  useEffect(() => {\n    let cleanup: (() => void) | undefined;\n    if (connected) {\n      const walletAddress = connected.accounts?.[0]?.address as Address;\n      setAddress(walletAddress);\n\n      if (connected.accounts?.[0]?.chains?.[0]) {\n        try {\n          const chainIdentifier = connected.accounts[0].chains[0];\n          const parts = chainIdentifier.split(\":\");\n          const chainIdHex = parts[parts.length - 1];\n          const chainId = BigInt(chainIdHex);\n\n          let targetChainId: bigint;\n\n          if (defaultChainId) {\n            targetChainId = defaultChainId;\n          } else if (chains.length > 0) {\n            targetChainId = chains[0].id;\n          } else {\n            targetChainId = chainId;\n          }\n\n          if (chainId !== targetChainId) {\n            const targetChain = chains.find((c) => c.id === targetChainId);\n            if (targetChain) {\n              updateChainAndProvider(targetChainId);\n\n              const targetStarknetChainId = starknetChainId(targetChainId);\n              if (targetStarknetChainId) {\n                connected.features[StarknetWalletApi]\n                  .request({\n                    type: \"wallet_switchStarknetChain\",\n                    params: { chainId: targetStarknetChainId },\n                  })\n                  .catch((error: Error) => {\n                    console.warn(\"Failed to switch wallet to target chain:\", error);\n                    updateChainAndProvider(chainId);\n                  });\n              }\n            } else {\n              updateChainAndProvider(chainId);\n            }\n          } else {\n            updateChainAndProvider(chainId);\n          }\n        } catch (error) {\n          console.error(\"Failed to parse chain ID:\", error);\n        }\n      } else if (defaultChainId) {\n        updateChainAndProvider(defaultChainId);\n      } else if (chains.length > 0) {\n        updateChainAndProvider(chains[0].id);\n      }\n\n      cleanup = connected.features[StandardEvents].on(\"change\", handleChange);\n    } else {\n      setAddress(undefined);\n      setAccount(undefined);\n      setCurrentChain(defaultChain);\n      setCurrentProvider(defaultProvider);\n      setCurrentPaymasterProvider(defaultPaymasterProvider);\n    }\n\n    return () => {\n      cleanup?.();\n    };\n  }, [\n    defaultChain,\n    defaultChainId,\n    defaultPaymasterProvider,\n    defaultProvider,\n    connected,\n    chains,\n    updateChainAndProvider,\n    handleChange,\n  ]);\n\n  useEffect(() => {\n    if (connected && address) {\n      setAccount(\n        new WalletAccountV5({\n          address,\n          provider: currentProvider,\n          walletProvider: connected,\n          paymaster: currentPaymasterProvider,\n        }),\n      );\n    }\n  }, [connected, address, currentProvider, currentPaymasterProvider]);\n\n  const state: StarknetState = useMemo(() => {\n    return {\n      connect,\n      disconnect,\n      isConnecting,\n      isError,\n      connected,\n      chains,\n      chain: currentChain,\n      explorer,\n      provider: currentProvider,\n      paymasterProvider: currentPaymasterProvider,\n      error: undefined,\n      extraWallets,\n      injectedWallets,\n      onSelectedChange,\n      recommendedWallets,\n      wallets,\n      selected,\n    };\n  }, [\n    connect,\n    disconnect,\n    isConnecting,\n    isError,\n    connected,\n    chains,\n    currentChain,\n    explorer,\n    currentProvider,\n    currentPaymasterProvider,\n    extraWallets,\n    injectedWallets,\n    onSelectedChange,\n    recommendedWallets,\n    wallets,\n    selected,\n  ]);\n\n  return (\n    <QueryClientProvider client={queryClient ?? defaultQueryClient}>\n      <StarknetContext.Provider value={state}>\n        <AccountProvider address={address} account={account}>\n          {children}\n        </AccountProvider>\n      </StarknetContext.Provider>\n    </QueryClientProvider>\n  );\n}\n\nexport function useStarknet(): StarknetState {\n  const context = useContext(StarknetContext);\n  if (!context) {\n    throw new Error(\"useStarknet must be used within a StarknetProvider\");\n  }\n  return context;\n}\n\nexport function useStarknetManager() {\n  const { connect, disconnect } = useStarknet();\n  return { connect, disconnect };\n}\n\nfunction providerForChain(chain: Chain, factory: ChainProviderFactory): { chain: Chain; provider: ProviderInterface } {\n  const provider = factory(chain);\n  if (provider) {\n    return { chain, provider };\n  }\n  throw new Error(`No provider found for chain ${chain.name}`);\n}\n\nfunction paymasterProviderForChain(\n  chain: Chain,\n  factory: ChainPaymasterFactory,\n): { chain: Chain; paymasterProvider: PaymasterRpc } {\n  const paymasterProvider = factory(chain);\n  if (paymasterProvider) {\n    return { chain, paymasterProvider };\n  }\n  throw new Error(`No paymaster provider found for chain ${chain.name}`);\n}\n\nexport function starknetChainId(chainId: bigint): constants.StarknetChainId | undefined {\n  switch (chainId) {\n    case mainnet.id:\n      return constants.StarknetChainId.SN_MAIN;\n    case sepolia.id:\n      return constants.StarknetChainId.SN_SEPOLIA;\n    default:\n      return undefined;\n  }\n}\n","import { StarknetProvider, type StarknetProviderProps } from \"./starknet\";\n\nexport { AccountProvider as OverrideAccount } from \"./account\";\nexport { starknetChainId } from \"./starknet\";\n\nexport type StarknetConfigProps = StarknetProviderProps;\n\nexport function StarknetConfig({ children, ...config }: StarknetConfigProps) {\n  return <StarknetProvider {...config}>{children}</StarknetProvider>;\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { validateAndParseAddress } from \"starknet\";\n\n/**\n * Validate and format the address.\n *\n * @param address - The address string to validate.\n * @returns The validated and formatted address as Address type.\n */\nexport function getAddress(address: string): Address {\n  return validateAndParseAddress(address) as Address;\n}\n","import type { PaymasterInterface, ProviderInterface } from \"starknet\";\n\nimport { useStarknet } from \"../context/starknet\";\n\n/** Value returned from `useProvider`. */\nexport interface UseProviderResult {\n  /** The current provider. */\n  provider: ProviderInterface;\n  /** The current paymaster provider. */\n  paymasterProvider?: PaymasterInterface;\n}\n\n/**\n * Hook for accessing the current provider.\n *\n * @remarks\n *\n * Use this hook to access the current provider object\n * implementing starknet.js `ProviderInterface`.\n */\nexport function useProvider(): UseProviderResult {\n  const { provider, paymasterProvider } = useStarknet();\n  return { provider, paymasterProvider };\n}\n","import type { WalletWithStarknetFeatures } from \"@starknet-io/get-starknet-core\";\nimport type { Address } from \"@starknet-start/chains\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nimport { useStarknetAccount } from \"../context/account\";\nimport { useStarknet } from \"../context/starknet\";\nimport { getAddress } from \"../utils\";\nimport { useProvider } from \"./use-provider\";\n\n/** Account connection status. */\nexport type AccountStatus = \"connected\" | \"disconnected\" | \"connecting\" | \"reconnecting\";\n\n/** Value returned from `useAccount`. */\nexport type UseAccountResult = {\n  /** The address of the connected account. */\n  address?: Address;\n  /** The connected connector. */\n  connector?: WalletWithStarknetFeatures;\n  /** Connector's chain id */\n  chainId?: bigint;\n  /** True if connecting. */\n  isConnecting?: boolean;\n  /** True if reconnecting. */\n  isReconnecting?: boolean;\n  /** True if connected. */\n  isConnected?: boolean;\n  /** True if disconnected. */\n  isDisconnected?: boolean;\n  /** The connection status. */\n  status: AccountStatus;\n};\n\n/**\n * Hook for accessing the account and its connection status.\n *\n * @remarks\n *\n * This hook is used to access the `AccountInterface` object provided by the\n * currently connected wallet.\n */\nexport function useAccount(): UseAccountResult {\n  const { chain, connected: connector } = useStarknet();\n\n  const { provider } = useProvider();\n  const { address: connectedAddress } = useStarknetAccount();\n\n  const [state, setState] = useState<UseAccountResult>(\n    connectedAddress === undefined\n      ? {\n          status: \"disconnected\",\n        }\n      : {\n          status: \"connected\" as const,\n          connector,\n          chainId: chain.id,\n          address: getAddress(connectedAddress),\n          isConnected: true,\n          isConnecting: false,\n          isDisconnected: false,\n          isReconnecting: false,\n        },\n  );\n\n  const refreshState = useCallback(async () => {\n    if (connector && provider && connectedAddress) {\n      setState({\n        status: \"connected\" as const,\n        connector,\n        chainId: chain.id,\n        address: getAddress(connectedAddress),\n        isConnected: true,\n        isConnecting: false,\n        isDisconnected: false,\n        isReconnecting: false,\n      });\n    } else {\n      return setState({\n        status: \"disconnected\" as const,\n        connector: undefined,\n        chainId: undefined,\n        address: undefined,\n        isConnected: false,\n        isConnecting: false,\n        isDisconnected: true,\n        isReconnecting: false,\n      });\n    }\n  }, [provider, connector, chain.id, connectedAddress]);\n\n  useEffect(() => {\n    refreshState();\n  }, [refreshState]);\n\n  return state;\n}\n","import {\n  type InfiniteData,\n  type QueryKey,\n  type UseInfiniteQueryOptions as UseInfiniteQueryOptions_,\n  type UseInfiniteQueryResult as UseInfiniteQueryResult_,\n  type UseMutationOptions as UseMutationOptions_,\n  type UseMutationResult as UseMutationResult_,\n  type UseQueryOptions as UseQueryOptions_,\n  type UseQueryResult as UseQueryResult_,\n  useInfiniteQuery as useInfiniteQuery_,\n  useMutation as useMutation_,\n  useQuery as useQuery_,\n} from \"@tanstack/react-query\";\n\nexport type UseQueryProps<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n> = Pick<\n  UseQueryOptions_<TQueryFnData, TError, TData, TQueryKey>,\n  \"enabled\" | \"refetchInterval\" | \"retry\" | \"retryDelay\"\n>;\n\nexport type UseQueryResult<TData, TError> = Pick<\n  UseQueryResult_<TData, TError>,\n  | \"data\"\n  | \"error\"\n  | \"status\"\n  | \"isSuccess\"\n  | \"isError\"\n  | \"isPending\"\n  | \"fetchStatus\"\n  | \"isFetching\"\n  | \"isLoading\"\n  | \"refetch\"\n>;\n\nexport function useQuery<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n>(args: UseQueryOptions_<TQueryFnData, TError, TData, TQueryKey>): UseQueryResult<TData, TError> {\n  const base = useQuery_({ ...args, structuralSharing: false });\n\n  return {\n    data: base.data,\n    error: base.error,\n    status: base.status,\n    isSuccess: base.isSuccess,\n    isError: base.isError,\n    isPending: base.isPending,\n    fetchStatus: base.fetchStatus,\n    isFetching: base.isFetching,\n    isLoading: base.isLoading,\n    refetch: base.refetch,\n  };\n}\nexport type UseMutationProps<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> = Pick<\n  UseMutationOptions_<TData, TError, TVariables, TContext>,\n  \"onSuccess\" | \"onError\" | \"onMutate\" | \"onSettled\"\n>;\n\nexport type UseMutationResult<TData = unknown, TError = unknown, TVariables = void, TContext = unknown> = Pick<\n  UseMutationResult_<TData, TError, TVariables, TContext>,\n  | \"data\"\n  | \"error\"\n  | \"isError\"\n  | \"isIdle\"\n  | \"isPending\"\n  | \"isPaused\"\n  | \"isSuccess\"\n  | \"reset\"\n  | \"mutate\"\n  | \"mutateAsync\"\n  | \"status\"\n  | \"variables\"\n>;\n\nexport function useMutation<TData = unknown, TError = unknown, TVariables = unknown, TContext = unknown>(\n  args: UseMutationOptions_<TData, TError, TVariables, TContext>,\n): UseMutationResult<TData, TError, TVariables, TContext> {\n  const base = useMutation_(args);\n\n  return {\n    data: base.data,\n    error: base.error,\n    reset: base.reset,\n    isError: base.isError,\n    isIdle: base.isIdle,\n    isPending: base.isPending,\n    isSuccess: base.isSuccess,\n    isPaused: base.isPaused,\n    mutate: base.mutate,\n    mutateAsync: base.mutateAsync,\n    status: base.status,\n    variables: base.variables,\n  };\n}\n\nexport type UseInfiniteQueryProps<\n  TQueryFnData = unknown,\n  TError = unknown,\n  TData = TQueryFnData,\n  _TQueryData = TQueryFnData,\n  TQueryKey extends QueryKey = QueryKey,\n  TPageParam = unknown,\n> = Pick<\n  UseInfiniteQueryOptions_<TQueryFnData, TError, TData, TQueryKey, TPageParam>,\n  \"enabled\" | \"refetchInterval\" | \"retry\" | \"retryDelay\"\n>;\n\nexport type UseInfiniteQueryResult<TData, TPageParam, TError> = Pick<\n  UseInfiniteQueryResult_<InfiniteData<TData, TPageParam>, TError>,\n  | \"data\"\n  | \"error\"\n  | \"status\"\n  | \"isSuccess\"\n  | \"isError\"\n  | \"isPending\"\n  | \"fetchStatus\"\n  | \"isFetching\"\n  | \"isLoading\"\n  | \"refetch\"\n  | \"fetchNextPage\"\n  | \"fetchPreviousPage\"\n  | \"hasNextPage\"\n  | \"hasPreviousPage\"\n  | \"isFetchingNextPage\"\n  | \"isFetchingPreviousPage\"\n>;\n\nexport function useInfiniteQuery<\n  TQueryFnData,\n  TError = unknown,\n  TData = InfiniteData<TQueryFnData>,\n  TQueryKey extends QueryKey = QueryKey,\n  TPageParam = unknown,\n>(args: UseInfiniteQueryOptions_<TQueryFnData, TError, TData, TQueryKey, TPageParam>) {\n  const base = useInfiniteQuery_({ ...args, structuralSharing: false });\n\n  return {\n    data: base.data,\n    error: base.error,\n    status: base.status,\n    isSuccess: base.isSuccess,\n    isError: base.isError,\n    isPending: base.isPending,\n    fetchStatus: base.fetchStatus,\n    isFetching: base.isFetching,\n    isLoading: base.isLoading,\n    refetch: base.refetch,\n    fetchNextPage: base.fetchNextPage,\n    fetchPreviousPage: base.fetchPreviousPage,\n    hasNextPage: base.hasNextPage,\n    hasPreviousPage: base.hasPreviousPage,\n    isFetchingNextPage: base.isFetchingNextPage,\n    isFetchingPreviousPage: base.isFetchingPreviousPage,\n  };\n}\n","import type { RpcTypeToMessageMap } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestMessageTypes,\n  type RequestResult,\n  walletRequestMutationFn,\n  walletRequestMutationKey,\n} from \"@starknet-start/query\";\nimport { useCallback } from \"react\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseMutationProps, type UseMutationResult, useMutation } from \"../query\";\n\nexport type { RequestArgs, RequestResult, RequestMessageTypes };\n\ntype MutationResult<T extends RequestMessageTypes> = UseMutationResult<\n  RpcTypeToMessageMap[T][\"result\"],\n  Error,\n  RequestArgs<T>\n>;\n\n/** Arguments for `useWalletRequest` hook. */\nexport type UseWalletRequestProps<T extends RequestMessageTypes> = RequestArgs<T> &\n  UseMutationProps<RequestResult<T>, Error, RequestArgs<T>>;\n\n/** Value returned from `useWalletRequest`. */\nexport type UseWalletRequestResult<T extends RequestMessageTypes> = Omit<\n  MutationResult<T>,\n  \"mutate\" | \"mutateAsync\"\n> & {\n  request: (args?: RequestArgs<T>) => void;\n  requestAsync: (args?: RequestArgs<T>) => Promise<RequestResult<T>>;\n};\n\n/** Hook to perform request calls to connected wallet */\nexport function useWalletRequest<T extends RequestMessageTypes>(\n  props: UseWalletRequestProps<T>,\n): UseWalletRequestResult<T> {\n  const { connected: connector } = useStarknet();\n\n  const { type, params, ...rest } = props;\n\n  const { mutate, mutateAsync, ...result } = useMutation({\n    mutationKey: walletRequestMutationKey({ type, params }),\n    mutationFn: walletRequestMutationFn({ connector }),\n    ...rest,\n  });\n\n  const request = useCallback((args?: RequestArgs<T>) => mutate(args ?? { type, params }), [mutate, type, params]);\n\n  const requestAsync = useCallback(\n    (args?: RequestArgs<T>) => mutateAsync(args ?? { type, params }),\n    [mutateAsync, type, params],\n  );\n\n  return {\n    request,\n    requestAsync,\n    ...result,\n  };\n}\n","import type { AddStarknetChainParameters } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseAddChainArgs = AddStarknetChainParameters;\n\nexport type UseAddChainProps = Omit<\n  UseWalletRequestProps<\"wallet_addStarknetChain\">,\n  keyof RequestArgs<\"wallet_addStarknetChain\">\n> & {\n  params?: UseAddChainArgs;\n};\n\nexport type UseAddChainResult = Omit<UseWalletRequestResult<\"wallet_addStarknetChain\">, \"request\" | \"requestAsync\"> & {\n  addChain: (args?: UseAddChainArgs) => void;\n  addChainAsync: (args?: UseAddChainArgs) => Promise<RequestResult<\"wallet_addStarknetChain\">>;\n};\n\n/**\n * Hook to add a new network in the list of networks of the wallet.\n */\nexport function useAddChain(props: UseAddChainProps): UseAddChainResult {\n  const { params, ...rest } = props;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_addStarknetChain\",\n    params,\n    ...rest,\n  });\n\n  const addChain = (args?: UseAddChainArgs) => {\n    return request(\n      args\n        ? {\n            params: args,\n            type: \"wallet_addStarknetChain\",\n          }\n        : undefined,\n    );\n  };\n\n  const addChainAsync = (args?: UseAddChainArgs) => {\n    return requestAsync(\n      args\n        ? {\n            params: args,\n            type: \"wallet_addStarknetChain\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    addChain,\n    addChainAsync,\n    ...result,\n  };\n}\n","import type { StarknetTypedContract, UseContractArgs, UseContractResult } from \"@starknet-start/query\";\nimport type { Abi } from \"abi-wan-kanabi\";\n\nimport { useMemo } from \"react\";\nimport { Contract } from \"starknet\";\n\nimport { useStarknet } from \"../context/starknet\";\n\n/**\n * Hook to bind a `Contract` instance.\n *\n * @remarks\n *\n * - The returned contract is a starknet.js `Contract` object.\n * - Must pass `abi` as const for strict type safety\n *\n */\nexport function useContract<TAbi extends Abi>({\n  abi,\n  address,\n  provider: providedProvider,\n}: UseContractArgs<TAbi>): UseContractResult<TAbi> {\n  const { provider: currentProvider } = useStarknet();\n\n  const contract = useMemo(() => {\n    const provider = providedProvider ? providedProvider : currentProvider;\n    if (abi && address && provider) {\n      return new Contract({\n        abi,\n        address,\n        providerOrAccount: provider,\n      }).typedv2(abi) as StarknetTypedContract<TAbi>;\n    }\n    return undefined;\n  }, [abi, address, providedProvider, currentProvider]);\n\n  return { contract };\n}\n","import { blockNumberQueryFn, blockNumberQueryKey } from \"@starknet-start/query\";\nimport { type BlockNumber, BlockTag } from \"starknet\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\n\n/** Arguments for `useBlockNumber`. */\nexport type UseBlockNumberProps = UseQueryProps<\n  number | undefined,\n  Error,\n  number,\n  ReturnType<typeof blockNumberQueryKey>\n> & {\n  /** Identifier for the block to fetch. */\n  blockIdentifier?: BlockNumber;\n};\n\n/** Value returned from `useBlockNumber`. */\nexport type UseBlockNumberResult = UseQueryResult<number | undefined, Error>;\n\n/**\n * Hook for fetching the current block number.\n *\n * @remarks\n *\n * Control if and how often data is refreshed with `refetchInterval`.\n */\nexport function useBlockNumber({\n  blockIdentifier = BlockTag.LATEST,\n  ...props\n}: UseBlockNumberProps = {}): UseBlockNumberResult {\n  const { provider } = useStarknet();\n\n  return useQuery({\n    queryKey: blockNumberQueryKey({ blockIdentifier }),\n    queryFn: blockNumberQueryFn({ provider, blockIdentifier }),\n    ...props,\n  });\n}\n","import { type QueryKey, useQueryClient } from \"@tanstack/react-query\";\nimport { useEffect, useState } from \"react\";\n\nimport { useBlockNumber } from \"./use-block-number\";\n\n/**\n * Invalidate the given query on every new block.\n */\nexport function useInvalidateOnBlock({ enabled = true, queryKey }: { enabled?: boolean; queryKey: QueryKey }) {\n  const queryClient = useQueryClient();\n\n  const [prevBlockNumber, setPrevBlockNumber] = useState<number | undefined>();\n\n  const { data: blockNumber } = useBlockNumber({\n    enabled,\n  });\n\n  useEffect(() => {\n    if (!prevBlockNumber) {\n      return setPrevBlockNumber(blockNumber);\n    }\n\n    if (blockNumber !== prevBlockNumber) {\n      queryClient.invalidateQueries({ queryKey }, { cancelRefetch: false });\n      return setPrevBlockNumber(blockNumber);\n    }\n  }, [blockNumber, prevBlockNumber, queryKey, queryClient]);\n}\n","import type { Chain } from \"@starknet-start/chains\";\n\nimport { useStarknet } from \"../context/starknet\";\n\n/** Value returned from `useNetwork`. */\nexport type UseNetworkResult = {\n  /** The current chain. */\n  chain: Chain;\n  /** List of supported chains. */\n  chains: Chain[];\n};\n\n/**\n * Hook for accessing the current connected chain.\n *\n * @remarks\n *\n * The network object contains information about the\n * network.\n *\n */\nexport function useNetwork(): UseNetworkResult {\n  const { chain, chains } = useStarknet();\n  return { chain, chains };\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { balanceQueryFn, balanceQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\nimport { type BlockNumber, BlockTag } from \"starknet\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useContract } from \"./use-contract\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\nimport { useNetwork } from \"./use-network\";\n\nconst DEFAULT_FETCH_INTERVAL = 5_000;\n\nexport type Balance = {\n  decimals: number;\n  symbol: string;\n  formatted: string;\n  value: bigint;\n};\n\nexport type UseBalanceProps = UseQueryProps<Balance, Error, Balance, ReturnType<typeof balanceQueryKey>> & {\n  /** The contract's address. Defaults to the native currency. */\n  token?: Address;\n  /** The address to fetch balance for. */\n  address?: Address;\n  /** Whether to watch for changes. */\n  watch?: boolean;\n  /** Block identifier used when performing call. */\n  blockIdentifier?: BlockNumber;\n};\n\nexport type UseBalanceResult = UseQueryResult<Balance, Error>;\n\n/**\n * Fetch the balance for the provided address and token.\n *\n * If no token is provided, the native currency is used.\n */\nexport function useBalance({\n  token: token_,\n  address,\n  refetchInterval: refetchInterval_,\n  watch = false,\n  enabled: enabled_ = true,\n  blockIdentifier = BlockTag.LATEST,\n  ...props\n}: UseBalanceProps) {\n  const { chain } = useNetwork();\n  const token = token_ ?? chain.nativeCurrency.address;\n\n  const { contract } = useContract({\n    abi: balanceABIFragment,\n    address: token,\n  });\n\n  const queryKey_ = useMemo(\n    () => balanceQueryKey({ chain, token, address, blockIdentifier }),\n    [chain, token, address, blockIdentifier],\n  );\n\n  const enabled = useMemo(() => Boolean(enabled_ && contract && address), [enabled_, contract, address]);\n\n  const refetchInterval =\n    refetchInterval_ ?? (blockIdentifier === BlockTag.PRE_CONFIRMED && watch ? DEFAULT_FETCH_INTERVAL : undefined);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    enabled,\n    refetchInterval,\n    queryKey: queryKey_,\n    queryFn: balanceQueryFn({\n      chain,\n      contract,\n      token,\n      address,\n      blockIdentifier,\n    }),\n    ...props,\n  });\n}\n\nconst balanceABIFragment = [\n  {\n    name: \"core::integer::u256\",\n    type: \"struct\",\n    members: [\n      {\n        name: \"low\",\n        type: \"core::integer::u128\",\n      },\n      {\n        name: \"high\",\n        type: \"core::integer::u128\",\n      },\n    ],\n  },\n  {\n    name: \"balanceOf\",\n    type: \"function\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"core::starknet::contract_address::ContractAddress\",\n      },\n    ],\n    outputs: [\n      {\n        type: \"core::integer::u256\",\n      },\n    ],\n    state_mutability: \"view\",\n  },\n  {\n    name: \"symbol\",\n    type: \"function\",\n    inputs: [],\n    outputs: [\n      {\n        type: \"core::felt252\",\n      },\n    ],\n    state_mutability: \"view\",\n  },\n  {\n    name: \"decimals\",\n    type: \"function\",\n    inputs: [],\n    outputs: [\n      {\n        type: \"core::integer::u8\",\n      },\n    ],\n    state_mutability: \"view\",\n  },\n] as const;\n","import { blockQueryFn, blockQueryKey } from \"@starknet-start/query\";\nimport { type BlockNumber, BlockTag, type GetBlockResponse } from \"starknet\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\n\n/** Arguments for `useBlock`. */\nexport type UseBlockProps = UseQueryProps<\n  GetBlockResponse,\n  Error,\n  GetBlockResponse,\n  ReturnType<typeof blockQueryKey>\n> & {\n  /** Identifier for the block to fetch. */\n  blockIdentifier?: BlockNumber;\n};\n\n/** Value returned from `useBlock`. */\nexport type UseBlockResult = UseQueryResult<GetBlockResponse, Error>;\n\n/**\n * Hook for fetching a block.\n *\n * @remarks\n *\n * Specify which block to fetch with the `blockIdentifier` argument.\n * Control if and how often data is refreshed with `refetchInterval`.\n */\nexport function useBlock({ blockIdentifier = BlockTag.LATEST, ...props }: UseBlockProps = {}): UseBlockResult {\n  const { provider } = useStarknet();\n  return useQuery({\n    queryKey: blockQueryKey({ blockIdentifier }),\n    queryFn: blockQueryFn({ provider, blockIdentifier }),\n    ...props,\n  });\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { type CallQueryArgs, callQueryFn, callQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\nimport { type Abi, BlockTag, type CallResult, type Contract } from \"starknet\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useContract } from \"./use-contract\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\nimport { useNetwork } from \"./use-network\";\n\nconst DEFAULT_FETCH_INTERVAL = 5_000;\n\nexport type CallQueryKey = typeof callQueryKey;\n\n/** Options for `useCall`. */\nexport type UseCallProps = CallQueryArgs &\n  UseQueryProps<CallResult, Error, CallResult, ReturnType<CallQueryKey>> & {\n    /** The target contract's ABI. */\n    abi?: Abi;\n    /** The target contract's address. */\n    address?: Address;\n    /** Refresh data at every block. */\n    watch?: boolean;\n  };\n\n/** Value returned from `useCall`. */\nexport type UseCallResult = UseQueryResult<CallResult, Error>;\n\n/**\n * Hook to perform a read-only contract call.\n *\n * @remarks\n *\n * The hook only performs a call if the target `abi`, `address`,\n * `functionName`, and `args` are not undefined.\n *\n */\nexport function useCall({\n  abi,\n  address,\n  functionName,\n  args,\n  blockIdentifier = BlockTag.LATEST,\n  refetchInterval: refetchInterval_,\n  watch = false,\n  enabled: enabled_ = true,\n  parseArgs,\n  parseResult,\n  ...props\n}: UseCallProps): UseCallResult {\n  const { chain } = useNetwork();\n  const { contract } = useContract({ abi, address });\n\n  const queryKey_ = useMemo(\n    () =>\n      callQueryKey({\n        chain,\n        contract: contract as Contract,\n        functionName,\n        args,\n        blockIdentifier,\n      }),\n    [chain, contract, functionName, args, blockIdentifier],\n  );\n\n  const enabled = useMemo(\n    () => Boolean(enabled_ && contract && functionName && args),\n    [enabled_, contract, functionName, args],\n  );\n\n  const refetchInterval =\n    refetchInterval_ ?? (blockIdentifier === BlockTag.PRE_CONFIRMED && watch ? DEFAULT_FETCH_INTERVAL : undefined);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    queryKey: queryKey_,\n    queryFn: callQueryFn({\n      contract: contract as Contract,\n      functionName,\n      args,\n      blockIdentifier,\n      parseArgs,\n      parseResult,\n    }),\n    refetchInterval,\n    enabled,\n    ...props,\n  });\n}\n","import type { WalletWithStarknetFeatures } from \"@starknet-io/get-starknet-core\";\n\nimport { type ConnectVariables, connectMutationFn, connectMutationKey } from \"@starknet-start/query\";\nimport { useCallback } from \"react\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseMutationProps, type UseMutationResult, useMutation } from \"../query\";\n\nexport type { ConnectVariables };\n\ntype MutationResult = UseMutationResult<void, Error, ConnectVariables>;\n\nexport type UseConnectProps = UseMutationProps<void, Error, ConnectVariables>;\n\n/** Value returned from `useConnect`. */\nexport type UseConnectResult = Omit<MutationResult, \"mutate\" | \"mutateAsync\"> & {\n  /** Current connector. */\n  connector?: WalletWithStarknetFeatures;\n  /** Connectors available for the current chain. */\n  connectors: WalletWithStarknetFeatures[];\n  /** Connector waiting approval for connection. */\n  pendingConnector?: WalletWithStarknetFeatures;\n  /** Connect to a new connector. */\n  connect: (args?: ConnectVariables) => void;\n  /** Connect to a new connector. */\n  connectAsync: (args?: ConnectVariables) => Promise<void>;\n};\n\n/**\n * Hook for connecting to a StarkNet wallet.\n *\n * @remarks\n *\n * Use this to implement a \"connect wallet\" component.\n *\n * ```\n */\nexport function useConnect(props: UseConnectProps = {}): UseConnectResult {\n  const { connected: connector, injectedWallets, extraWallets, connect: connect_, chain } = useStarknet();\n\n  const connectWrapper = useCallback(\n    async (args: ConnectVariables): Promise<void> => {\n      if (!args.connector) {\n        throw new Error(\"Connector is required\");\n      }\n      await connect_(args.connector);\n    },\n    [connect_],\n  );\n\n  const { mutate, mutateAsync, variables, ...result } = useMutation({\n    mutationKey: connectMutationKey({ chainId: chain.name }),\n    mutationFn: connectMutationFn({ connect: connectWrapper }),\n    ...props,\n  });\n\n  const connect = useCallback((args?: ConnectVariables) => mutate(args ?? { connector }), [mutate, connector]);\n\n  const connectAsync = useCallback(\n    (args?: ConnectVariables) => mutateAsync(args ?? { connector }),\n    [mutateAsync, connector],\n  );\n\n  return {\n    connector,\n    connectors: [...injectedWallets, ...extraWallets],\n    pendingConnector: variables?.connector,\n    connect,\n    connectAsync,\n    variables,\n    ...result,\n  };\n}\n","import { useCallback } from \"react\";\nimport { useStarknetAccount } from \"src/context/account\";\nimport {\n  type Abi,\n  type CompiledContract,\n  type CompiledSierraCasm,\n  Contract,\n  type RawArgs,\n  type UniversalDetails,\n} from \"starknet\";\n\n/** Arguments for `useContractFactory`. */\nexport interface UseContractFactoryProps {\n  /** The compiled contract (for declare and deploy). */\n  compiledContract?: CompiledContract;\n  /** The CASM contract (required when declaring). */\n  casm?: CompiledSierraCasm;\n  /** The class hash (for deploy-only mode). */\n  classHash?: string;\n  /** The contract abi. */\n  abi?: Abi;\n}\n\n/** Options for deploying a contract. */\nexport interface DeployContractOptions {\n  /** Constructor calldata. */\n  constructorCalldata?: RawArgs;\n  /** Salt for address generation. */\n  salt?: string;\n  /** Make the address unique. */\n  unique?: boolean;\n  /** Additional transaction details. */\n  details?: UniversalDetails;\n}\n\n/** Value returned from `useContractFactory`. */\nexport interface UseContractFactoryResult {\n  /** Function to deploy the contract. */\n  deployContract?: (options?: DeployContractOptions) => Promise<Contract>;\n}\n\n/**\n * Hook to deploy contracts using the new Contract.factory() method.\n *\n * @remarks\n *\n * This hook provides a function to deploy contracts using starknet.js v8's\n * Contract.factory() static method.\n *\n * For declare and deploy, provide compiledContract and casm.\n * For deploy-only, provide classHash and optionally abi.\n */\nexport function useContractFactory({\n  compiledContract,\n  casm,\n  classHash,\n  abi,\n}: UseContractFactoryProps): UseContractFactoryResult {\n  const { account } = useStarknetAccount();\n\n  const deployContract = useCallback(\n    async (options?: DeployContractOptions) => {\n      if (!account) {\n        throw new Error(\"Account is required to deploy a contract\");\n      }\n\n      const { constructorCalldata, salt, unique, details } = options || {};\n\n      // Declare and deploy mode\n      if (compiledContract && casm) {\n        return await Contract.factory(\n          {\n            account,\n            contract: compiledContract,\n            casm,\n            constructorCalldata,\n            salt,\n            unique,\n          },\n          details,\n        );\n      }\n\n      // Deploy-only mode\n      if (classHash) {\n        return await Contract.factory(\n          {\n            account,\n            classHash,\n            abi,\n            constructorCalldata,\n            salt,\n            unique,\n          },\n          details,\n        );\n      }\n\n      throw new Error(\"Either compiledContract + casm or classHash is required to deploy a contract\");\n    },\n    [account, compiledContract, casm, classHash, abi],\n  );\n\n  return {\n    deployContract: account && ((compiledContract && casm) || classHash) ? deployContract : undefined,\n  };\n}\n","import type { AddDeclareTransactionParameters } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseDeclareContractArgs = AddDeclareTransactionParameters;\n\nexport type UseDeclareContractProps = Omit<\n  UseWalletRequestProps<\"wallet_addDeclareTransaction\">,\n  keyof RequestArgs<\"wallet_addDeclareTransaction\">\n> & {\n  params?: UseDeclareContractArgs;\n};\n\nexport type UseDeclareContractResult = Omit<\n  UseWalletRequestResult<\"wallet_addDeclareTransaction\">,\n  \"request\" | \"requestAsync\"\n> & {\n  declare: (args?: UseDeclareContractArgs) => void;\n  declareAsync: (args?: UseDeclareContractArgs) => Promise<RequestResult<\"wallet_addDeclareTransaction\">>;\n};\n\n/**\n * Hook to declare a new class in the current network.\n *\n */\nexport function useDeclareContract(props: UseDeclareContractProps): UseDeclareContractResult {\n  const { params, ...rest } = props;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_addDeclareTransaction\",\n    params,\n    ...rest,\n  });\n\n  const declare = (args?: UseDeclareContractArgs) => {\n    return request(\n      args\n        ? {\n            params: args,\n            type: \"wallet_addDeclareTransaction\",\n          }\n        : undefined,\n    );\n  };\n\n  const declareAsync = (args?: UseDeclareContractArgs) => {\n    return requestAsync(\n      args\n        ? {\n            params: args,\n            type: \"wallet_addDeclareTransaction\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    declare,\n    declareAsync,\n    ...result,\n  };\n}\n","import type { DeployContractResponse } from \"starknet\";\n\nimport { type DeployAccountVariables, deployAccountMutationFn, deployAccountMutationKey } from \"@starknet-start/query\";\nimport { useStarknetAccount } from \"src/context/account\";\n\nimport { type UseMutationProps, type UseMutationResult, useMutation } from \"../query\";\n\nexport type { DeployAccountVariables };\n\nexport type UseDeployAccountProps = DeployAccountVariables &\n  UseMutationProps<DeployContractResponse, Error, DeployAccountVariables>;\n\ntype MutationResult = UseMutationResult<DeployContractResponse, Error, DeployAccountVariables>;\n\nexport type UseDeployAccountResult = Omit<MutationResult, \"mutate\" | \"mutateAsync\"> & {\n  /** Deploy account. */\n  deployAccount: MutationResult[\"mutate\"];\n\n  /** Deploy account. */\n  deployAccountAsync: MutationResult[\"mutateAsync\"];\n};\n\n/**\n * Hook for deploying a contract.\n *\n * @remarks\n *\n * This hook deploys a new contract from the currently connected account.\n */\nexport function useDeployAccount({\n  classHash,\n  constructorCalldata,\n  addressSalt,\n  contractAddress,\n  options,\n  ...props\n}: UseDeployAccountProps): UseDeployAccountResult {\n  const { account } = useStarknetAccount();\n  const { mutate, mutateAsync, ...result } = useMutation({\n    mutationKey: deployAccountMutationKey({\n      account,\n      classHash,\n      constructorCalldata,\n      addressSalt,\n      contractAddress,\n      options,\n    }),\n    mutationFn: deployAccountMutationFn({\n      account,\n      classHash,\n      constructorCalldata,\n      addressSalt,\n      contractAddress,\n      options,\n    }),\n    ...props,\n  });\n\n  return {\n    deployAccount: mutate,\n    deployAccountAsync: mutateAsync,\n    ...result,\n  };\n}\n","import { disconnectMutationFn, disconnectMutationKey } from \"@starknet-start/query\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseMutationProps, type UseMutationResult, useMutation } from \"../query\";\n\ntype MutationResult = UseMutationResult<void, Error, void>;\n\nexport type UseDisconnectProps = UseMutationProps<void, Error, void>;\n\n/** Value returned from `useDisconnect`. */\nexport type UseDisconnectResult = Omit<MutationResult, \"mutate\" | \"mutateAsync\"> & {\n  /** Disconnect wallet. */\n  disconnect: MutationResult[\"mutate\"];\n  /** Disconnect wallet. */\n  disconnectAsync: MutationResult[\"mutateAsync\"];\n};\n\n/**\n *\n * Hook for disconnecting connected wallet.\n */\nexport function useDisconnect(props: UseDisconnectProps = {}): UseDisconnectResult {\n  const { disconnect, chain } = useStarknet();\n\n  const { mutate, mutateAsync, ...result } = useMutation({\n    mutationKey: disconnectMutationKey({ chainId: chain.name }),\n    mutationFn: disconnectMutationFn({ disconnect }),\n    ...props,\n  });\n\n  return {\n    disconnect: mutate,\n    disconnectAsync: mutateAsync,\n    ...result,\n  };\n}\n","import type { EstimateFeeResponseOverhead } from \"starknet\";\n\nimport { type EstimateFeesArgs, estimateFeesQueryFn, estimateFeesQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\nimport { useStarknetAccount } from \"src/context/account\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\n\n/** Options for `useEstimateFees`. */\nexport type UseEstimateFeesProps = EstimateFeesArgs &\n  UseQueryProps<\n    EstimateFeeResponseOverhead,\n    Error,\n    EstimateFeeResponseOverhead,\n    ReturnType<typeof estimateFeesQueryKey>\n  > & {\n    /** Refresh data at every block. */\n    watch?: boolean;\n  };\n\n/** Value returned from `useEstimateFees`. */\nexport type UseEstimateFeesResult = UseQueryResult<EstimateFeeResponseOverhead, Error>;\n\n/**\n * Hook to estimate fees for smart contract calls.\n *\n * @remarks\n *\n * The hook only performs estimation if the `calls` is not undefined.\n */\nexport function useEstimateFees({\n  calls,\n  options,\n  watch = false,\n  enabled: enabled_ = true,\n  ...props\n}: UseEstimateFeesProps): UseEstimateFeesResult {\n  const { account } = useStarknetAccount();\n\n  const queryKey_ = useMemo(() => estimateFeesQueryKey({ calls, options }), [calls, options]);\n\n  const enabled = useMemo(() => Boolean(enabled_ && calls), [enabled_, calls]);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    queryKey: queryKey_,\n    queryFn: estimateFeesQueryFn({\n      account,\n      calls,\n      options,\n    }),\n    enabled,\n    ...props,\n  });\n}\n","import type { Events } from \"@starknet-io/types-js\";\nimport type { RpcProvider } from \"starknet\";\n\nimport { type EventsQueryKeyParams, eventsQueryFn, eventsQueryKey } from \"@starknet-start/query\";\n\nimport { type UseInfiniteQueryProps, type UseInfiniteQueryResult, useInfiniteQuery } from \"../query\";\nimport { useProvider } from \"./use-provider\";\n\n/** Arguments for `useEvents`. */\nexport type UseEventsProps = UseInfiniteQueryProps<\n  Events,\n  Error,\n  Events,\n  Events,\n  ReturnType<typeof eventsQueryKey>,\n  string\n> &\n  EventsQueryKeyParams;\n\n/** Value returned from `useEvents`. */\nexport type UseEventsResult = Omit<\n  UseInfiniteQueryResult<Events, string, Error>,\n  \"fetchPreviousPage\" | \"isFetchingPreviousPage\" | \"hasPreviousPage\"\n>;\n\n/**\n * Hook to fetch events continuously\n *\n * The parameters could be used to filter the events by contract address, name\n * or specify a range of blocks to get the events from\n *\n * The returned object contain different functions and props to fetch next pages\n */\nexport function useEvents({\n  address,\n  eventName,\n  fromBlock: fromBlock_,\n  toBlock: toBlock_,\n  pageSize,\n}: UseEventsProps): UseEventsResult {\n  const { provider } = useProvider();\n  const rpcProvider = provider as RpcProvider;\n\n  return useInfiniteQuery({\n    // TODO: useMemo ?\n    queryKey: eventsQueryKey({\n      address,\n      eventName,\n      fromBlock: fromBlock_,\n      toBlock: toBlock_,\n      pageSize,\n    }),\n    queryFn: eventsQueryFn({\n      provider: rpcProvider,\n      address,\n      eventName,\n      fromBlock: fromBlock_,\n      toBlock: toBlock_,\n      pageSize,\n    }),\n    initialPageParam: \"0\",\n    getNextPageParam: (lastPage, _pages) => lastPage.continuation_token,\n  });\n}\n","import type { Explorer } from \"@starknet-start/explorers\";\n\nimport { useStarknet } from \"../context/starknet\";\n\n/** Access the current explorer, should be inside a StarknetConfig. */\nexport function useExplorer(): Explorer {\n  const { explorer, chain } = useStarknet();\n  if (!explorer) throw Error(\"Explorer is undefined. Try adding it to StarknetConfig.\");\n  const explorerInstance = explorer(chain);\n  if (!explorerInstance) throw Error(\"Explorer Instance is undefined\");\n  return explorerInstance;\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { nonceForAddressQueryFn, nonceForAddressQueryKey } from \"@starknet-start/query\";\nimport { type BlockNumber, BlockTag, type Nonce } from \"starknet\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\n\n/** Arguments for `useNonceForAddress`. */\nexport type UseNonceForAddressProps = UseQueryProps<Nonce, Error, Nonce, ReturnType<typeof nonceForAddressQueryKey>> & {\n  /** Address to fetch nonce for. */\n  address?: Address;\n  /** Identifier for the block to fetch. */\n  blockIdentifier?: BlockNumber;\n};\n\n/** Value returned from `useNonceForAddress`. */\nexport type UseNonceForAddressResult = UseQueryResult<Nonce, Error>;\n\n/**\n * Hook for fetching the nonce for the given address.\n */\nexport function useNonceForAddress({\n  address,\n  blockIdentifier = BlockTag.LATEST,\n  ...props\n}: UseNonceForAddressProps): UseNonceForAddressResult {\n  const { provider } = useStarknet();\n\n  return useQuery({\n    queryKey: nonceForAddressQueryKey({ address, blockIdentifier }),\n    queryFn: nonceForAddressQueryFn({\n      address,\n      provider,\n      blockIdentifier,\n    }),\n    enabled: props.enabled ?? !!address,\n    ...props,\n  });\n}\n","import type { PaymasterFeeEstimate } from \"starknet\";\n\nimport {\n  type PaymasterEstimateFeesArgs,\n  paymasterEstimateFeesQueryFn,\n  paymasterEstimateFeesQueryKey,\n} from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\nimport { useStarknetAccount } from \"src/context/account\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\n\n/** Options for `useEstimateFees`. */\nexport type UsePaymasterEstimateFeesProps = PaymasterEstimateFeesArgs &\n  UseQueryProps<PaymasterFeeEstimate, Error, PaymasterFeeEstimate, ReturnType<typeof paymasterEstimateFeesQueryKey>> & {\n    /** Refresh data at every block. */\n    watch?: boolean;\n  };\n\n/** Value returned from `useEstimateFees`. */\nexport type UsePaymasterEstimateFeesResult = UseQueryResult<PaymasterFeeEstimate, Error>;\n\n/**\n * Hook to estimate fees for smart contract calls.\n *\n * @remarks\n *\n * The hook only performs estimation if the `calls` is not undefined.\n */\nexport function usePaymasterEstimateFees({\n  calls,\n  options,\n  watch = false,\n  enabled: enabled_ = true,\n  ...props\n}: UsePaymasterEstimateFeesProps): UsePaymasterEstimateFeesResult {\n  const { account } = useStarknetAccount();\n\n  const queryKey_ = useMemo(() => paymasterEstimateFeesQueryKey({ calls, options }), [calls, options]);\n\n  const enabled = useMemo(() => Boolean(enabled_ && calls && options), [enabled_, calls, options]);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    queryKey: queryKey_,\n    queryFn: paymasterEstimateFeesQueryFn({\n      account,\n      calls,\n      options,\n    }),\n    enabled,\n    ...props,\n  });\n}\n","import type { TokenData } from \"starknet\";\n\nimport { paymasterGasTokensQueryFn, paymasterGasTokensQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\nimport { useProvider } from \"./use-provider\";\n\n/** Options for `usePaymasterGasTokens`. */\nexport type UsePaymasterGasTokensProps = UseQueryProps<\n  TokenData[],\n  Error,\n  TokenData[],\n  ReturnType<typeof paymasterGasTokensQueryKey>\n> & {\n  /** Refresh data at every block. */\n  watch?: boolean;\n};\n\n/** Value returned from `usePaymasterGasTokens`. */\nexport type UsePaymasterGasTokensResult = UseQueryResult<TokenData[], Error>;\n\n/**\n * Hook to fetch all gas token supported by the Paymaster.\n *\n * @remarks\n *\n * The hook only performs fetch if the `paymasterProvider` is not undefined.\n */\nexport function usePaymasterGasTokens({\n  watch = false,\n  enabled: enabled_ = true,\n  ...props\n}: UsePaymasterGasTokensProps = {}): UsePaymasterGasTokensResult {\n  const { paymasterProvider } = useProvider();\n\n  const queryKey_ = useMemo(() => paymasterGasTokensQueryKey(), []);\n\n  const enabled = useMemo(() => Boolean(enabled_), [enabled_]);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    queryKey: queryKey_,\n    queryFn: paymasterGasTokensQueryFn({\n      paymasterProvider,\n    }),\n    enabled,\n    ...props,\n  });\n}\n","import type { BigNumberish, Call, InvokeFunctionResponse, PaymasterDetails } from \"starknet\";\n\nimport { paymasterSendTransactionMutationFn, paymasterSendTransactionMutationKey } from \"@starknet-start/query\";\nimport { useCallback } from \"react\";\nimport { useStarknetAccount } from \"src/context/account\";\n\nimport { type UseMutationResult, useMutation } from \"../query\";\n\nexport type UsePaymasterSendTransactionArgs = {\n  /** List of smart contract calls to execute. */\n  calls?: Call[];\n  /** Paymaster details. */\n  options?: PaymasterDetails;\n  /** Max fee in gas token. */\n  maxFeeInGasToken?: BigNumberish;\n};\n\n/** Value returned from `usePaymasterSendTransaction`. */\nexport type UsePaymasterSendTransactionResult = Omit<\n  UseMutationResult<InvokeFunctionResponse, Error, Call[]>,\n  \"mutate\" | \"mutateAsync\"\n> & {\n  send: (args?: Call[]) => void;\n  sendAsync: (args?: Call[]) => Promise<InvokeFunctionResponse>;\n};\n\n/** Hook to send one or several transaction(s) to the network through a paymaster. */\nexport function usePaymasterSendTransaction(props: UsePaymasterSendTransactionArgs): UsePaymasterSendTransactionResult {\n  const { calls, options, maxFeeInGasToken, ...rest } = props;\n  const { account } = useStarknetAccount();\n\n  const { mutate, mutateAsync, ...result } = useMutation<InvokeFunctionResponse, Error, Call[]>({\n    mutationKey: paymasterSendTransactionMutationKey(calls || []),\n    mutationFn: paymasterSendTransactionMutationFn({\n      account,\n      options,\n      maxFeeInGasToken,\n    }),\n    ...rest,\n  });\n\n  const send = useCallback(\n    (args?: Call[]) => {\n      mutate(args || calls || []);\n    },\n    [mutate, calls],\n  );\n\n  const sendAsync = useCallback(\n    (args?: Call[]) => {\n      return mutateAsync(args || calls || []);\n    },\n    [mutateAsync, calls],\n  );\n\n  return {\n    send,\n    sendAsync,\n    ...result,\n  };\n}\n","import type { Address } from \"@starknet-start/chains\";\nimport type { Abi, ExtractAbiFunction, ExtractAbiFunctionNames, ExtractArgs, FunctionRet } from \"abi-wan-kanabi/kanabi\";\nimport type { BlockNumber } from \"starknet\";\n\nimport type { UseQueryProps, UseQueryResult } from \"../query\";\n\nimport { type CallQueryKey, type UseCallProps, useCall } from \"./use-call\";\n\ntype Result<TAbi extends Abi, TFunctionName extends ExtractAbiFunctionNames<TAbi>> = FunctionRet<TAbi, TFunctionName>;\n\n/** Options for `useReadContract`. */\nexport type UseReadContractProps<TAbi extends Abi, TFunctionName extends ExtractAbiFunctionNames<TAbi>> = UseQueryProps<\n  Result<TAbi, TFunctionName>,\n  Error,\n  Result<TAbi, TFunctionName>,\n  ReturnType<CallQueryKey>\n> & {\n  /** The target contract's ABI.\n   *\n   * @remarks\n   *\n   * You must pass ABI as const\n   *\n   */\n  abi?: TAbi;\n  /** The target contract's address. */\n  address?: Address;\n  /** Refresh data at every block. */\n  watch?: boolean;\n  /** The contract's function name. */\n  functionName: TFunctionName;\n  /** Read arguments. */\n  args?: ExtractArgs<TAbi, ExtractAbiFunction<TAbi, TFunctionName>>;\n  /** Block identifier used when performing call. */\n  blockIdentifier?: BlockNumber;\n};\n\n/** Value returned from `useReadContract`. */\nexport type UseReadContractResult<\n  TAbi extends Abi,\n  TFunctionName extends ExtractAbiFunctionNames<TAbi>,\n> = UseQueryResult<Result<TAbi, TFunctionName>, Error>;\n\n/**\n * Perform a read-only contract call. If the specified block identifier is pending,\n * the hook will periodically refetch data automatically.\n *\n * @remarks\n *\n * - The hook only performs a call if the target `abi`, `address`,\n * `functionName`, and `args` are not undefined.\n *\n * - You must pass `abi` as `const` for autocomplete to work.\n */\nexport function useReadContract<TAbi extends Abi, TFunctionName extends ExtractAbiFunctionNames<TAbi>>(\n  props: UseReadContractProps<TAbi, TFunctionName>,\n) {\n  return useCall(props as UseCallProps) as UseReadContractResult<TAbi, TFunctionName>;\n}\n","import type { Call as RequestCall } from \"@starknet-io/types-js\";\nimport type { Call } from \"starknet\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseSendTransactionArgs = {\n  /** List of smart contract calls to execute. */\n  calls?: Call[];\n};\n\nexport type UseSendTransactionProps = UseSendTransactionArgs &\n  Omit<UseWalletRequestProps<\"wallet_addInvokeTransaction\">, keyof RequestArgs<\"wallet_addInvokeTransaction\">>;\n\nexport type UseSendTransactionResult = Omit<\n  UseWalletRequestResult<\"wallet_addInvokeTransaction\">,\n  \"request\" | \"requestAsync\"\n> & {\n  send: (args?: Call[]) => void;\n  sendAsync: (args?: Call[]) => Promise<RequestResult<\"wallet_addInvokeTransaction\">>;\n};\n\n/** Hook to send one or several transaction(s) to the network. */\nexport function useSendTransaction(props: UseSendTransactionProps): UseSendTransactionResult {\n  const { calls, ...rest } = props;\n\n  const params = calls ? { calls: transformCalls(calls) } : undefined;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_addInvokeTransaction\",\n    params,\n    ...rest,\n  });\n\n  const send = (args?: Call[]) => {\n    return request(\n      args\n        ? {\n            params: { calls: transformCalls(args) },\n            type: \"wallet_addInvokeTransaction\",\n          }\n        : undefined,\n    );\n  };\n\n  const sendAsync = (args?: Call[]) => {\n    return requestAsync(\n      args\n        ? {\n            params: { calls: transformCalls(args) },\n            type: \"wallet_addInvokeTransaction\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    send,\n    sendAsync,\n    ...result,\n  };\n}\n\nfunction transformCalls(calls: Call[]) {\n  return calls.map(\n    (call) =>\n      ({\n        contract_address: call.contractAddress,\n        entry_point: call.entrypoint,\n        calldata: call.calldata,\n      }) as RequestCall,\n  );\n}\n","import type { TypedData } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseSignTypedDataArgs = TypedData;\n\nexport type UseSignTypedDataProps = Omit<\n  UseWalletRequestProps<\"wallet_signTypedData\">,\n  keyof RequestArgs<\"wallet_signTypedData\">\n> & {\n  params?: UseSignTypedDataArgs;\n};\n\nexport type UseSignTypedDataResult = Omit<\n  UseWalletRequestResult<\"wallet_signTypedData\">,\n  \"request\" | \"requestAsync\"\n> & {\n  signTypedData: (args?: UseSignTypedDataArgs) => void;\n  signTypedDataAsync: (args?: UseSignTypedDataArgs) => Promise<RequestResult<\"wallet_signTypedData\">>;\n};\n\nexport function useSignTypedData(props: UseSignTypedDataProps): UseSignTypedDataResult {\n  const { params, ...rest } = props;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_signTypedData\",\n    params,\n    ...rest,\n  });\n\n  const signTypedData = (args?: UseSignTypedDataArgs) => {\n    return request(\n      args\n        ? {\n            params: args,\n            type: \"wallet_signTypedData\",\n          }\n        : undefined,\n    );\n  };\n\n  const signTypedDataAsync = (args?: UseSignTypedDataArgs) => {\n    return requestAsync(\n      args\n        ? {\n            params: args,\n            type: \"wallet_signTypedData\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    signTypedData,\n    signTypedDataAsync,\n    ...result,\n  };\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { starkAddressQueryFn, starkAddressQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useNetwork } from \"./use-network\";\nimport { useProvider } from \"./use-provider\";\n\nexport type UseStarkAddressProps = UseQueryProps<Address, Error, Address, ReturnType<typeof starkAddressQueryKey>> & {\n  /** Stark name. */\n  name?: string;\n  /** Naming contract to use . */\n  contract?: Address;\n};\n\nexport type UseStarkAddressResult = UseQueryResult<Address, Error>;\n\n/**\n * Hook to get the address associated to a stark name.\n *\n * @remarks\n *\n * This hook fetches the address of the specified stark name\n * It defaults to the starknetID contract but a different contract can be targetted by specifying its address\n * If stark name does not have an associated address, it will return \"0x0\"\n *\n */\nexport function useStarkAddress({\n  name,\n  contract,\n  enabled: enabled_ = true,\n  ...props\n}: UseStarkAddressProps): UseStarkAddressResult {\n  const { provider } = useProvider();\n  const { chain } = useNetwork();\n\n  const enabled = useMemo(() => Boolean(enabled_ && name), [enabled_, name]);\n\n  return useQuery({\n    queryKey: starkAddressQueryKey({ name, contract, network: chain.network }),\n    queryFn: starkAddressQueryFn({\n      name,\n      contract,\n      provider,\n      network: chain.network,\n    }),\n    enabled,\n    ...props,\n  });\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport { starkNameQueryFn, starkNameQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useNetwork } from \"./use-network\";\nimport { useProvider } from \"./use-provider\";\n\n/** Arguments for `useStarkName` hook. */\nexport type StarkNameArgs = UseQueryProps<string, Error, string, ReturnType<typeof starkNameQueryKey>> & {\n  /** Account address. */\n  address?: Address;\n  /** Naming contract to use . */\n  contract?: Address;\n};\n\n/** Value returned by `useStarkName` hook. */\nexport type StarkNameResult = UseQueryResult<string, Error>;\n\n/**\n * Hook for fetching Stark name for address.\n *\n * @remarks\n *\n * This hook fetches the stark name of the specified address.\n * It defaults to the starknet.id contract but a different contract can be\n * targetted by specifying its contract address\n * If address does not have a stark name, it will return \"stark\"\n */\nexport function useStarkName({\n  address,\n  contract,\n  enabled: enabled_ = true,\n  ...props\n}: StarkNameArgs): StarkNameResult {\n  const { provider } = useProvider();\n  const { chain } = useNetwork();\n\n  const enabled = useMemo(() => Boolean(enabled_ && address), [enabled_, address]);\n\n  return useQuery({\n    queryKey: starkNameQueryKey({\n      address,\n      contract,\n      network: chain.network,\n    }),\n    queryFn: starkNameQueryFn({\n      address,\n      contract,\n      provider,\n      network: chain.network,\n    }),\n    enabled,\n    ...props,\n  });\n}\n","import type { Address } from \"@starknet-start/chains\";\n\nimport {\n  STARKNET_ID_CONTRACTS,\n  type StarkProfileQueryFnParams,\n  type StarkProfileResponse,\n  starkProfileQueryFn,\n  starkProfileQueryKey,\n} from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\n\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useContract } from \"./use-contract\";\nimport { useNetwork } from \"./use-network\";\n\n/** Arguments for `useStarkProfile` hook. */\nexport type StarkProfileArgs = UseQueryProps<\n  GetStarkprofileResponse,\n  Error,\n  GetStarkprofileResponse,\n  ReturnType<typeof starkProfileQueryKey>\n> & {\n  /** Account address. */\n  address?: Address;\n  /** Get Starknet ID default pfp url if no profile picture is set */\n  useDefaultPfp?: boolean;\n  /** Naming contract to use. */\n  namingContract?: Address;\n  /** Identity contract to use. */\n  identityContract?: Address;\n};\n\n/** Value returned by `useStarkProfile` hook. */\nexport type GetStarkprofileResponse = StarkProfileResponse;\n\nexport type UseStarkProfileResult = UseQueryResult<GetStarkprofileResponse, Error>;\n\n/**\n * Hook for fetching Stark profile for address.\n */\nexport function useStarkProfile({\n  address,\n  useDefaultPfp = true,\n  namingContract,\n  identityContract,\n  enabled: enabled_ = true,\n  ...props\n}: StarkProfileArgs): UseStarkProfileResult {\n  const { chain } = useNetwork();\n  const networkContracts = STARKNET_ID_CONTRACTS[chain.network];\n  if (!networkContracts) throw new Error(\"Network not supported\");\n\n  const { contract: multicallContract_ } = useContract({\n    abi: multicallABI,\n    address: networkContracts.multicall,\n  });\n\n  const enabled = useMemo(() => Boolean(enabled_ && address), [enabled_, address]);\n\n  const { refetchInterval, ...rest } = props;\n\n  return useQuery({\n    queryKey: starkProfileQueryKey({\n      address,\n      namingContract,\n      identityContract,\n      network: chain.network,\n      useDefaultPfp,\n    }),\n    queryFn: starkProfileQueryFn({\n      address,\n      useDefaultPfp,\n      namingContract,\n      network: chain.network,\n      identityContract,\n      multicallContract: multicallContract_ as StarkProfileQueryFnParams[\"multicallContract\"],\n    }),\n    enabled,\n    refetchInterval,\n    ...rest,\n  });\n}\n\nconst multicallABI = [\n  {\n    name: \"ComposableMulticallImpl\",\n    type: \"impl\",\n    interface_name: \"composable_multicall::IComposableMulticall\",\n  },\n  {\n    name: \"composable_multicall::Execution\",\n    type: \"enum\",\n    variants: [\n      {\n        name: \"Static\",\n        type: \"()\",\n      },\n      {\n        name: \"IfEqual\",\n        type: \"(core::integer::u32, core::integer::u32, core::felt252)\",\n      },\n      {\n        name: \"IfNotEqual\",\n        type: \"(core::integer::u32, core::integer::u32, core::felt252)\",\n      },\n    ],\n  },\n  {\n    name: \"composable_multicall::DynamicFelt\",\n    type: \"enum\",\n    variants: [\n      {\n        name: \"Hardcoded\",\n        type: \"core::felt252\",\n      },\n      {\n        name: \"Reference\",\n        type: \"(core::integer::u32, core::integer::u32)\",\n      },\n    ],\n  },\n  {\n    name: \"composable_multicall::DynamicCalldata\",\n    type: \"enum\",\n    variants: [\n      {\n        name: \"Hardcoded\",\n        type: \"core::felt252\",\n      },\n      {\n        name: \"Reference\",\n        type: \"(core::integer::u32, core::integer::u32)\",\n      },\n      {\n        name: \"ArrayReference\",\n        type: \"(core::integer::u32, core::integer::u32)\",\n      },\n    ],\n  },\n  {\n    name: \"composable_multicall::DynamicCall\",\n    type: \"struct\",\n    members: [\n      {\n        name: \"execution\",\n        type: \"composable_multicall::Execution\",\n      },\n      {\n        name: \"to\",\n        type: \"composable_multicall::DynamicFelt\",\n      },\n      {\n        name: \"selector\",\n        type: \"composable_multicall::DynamicFelt\",\n      },\n      {\n        name: \"calldata\",\n        type: \"core::array::Array::<composable_multicall::DynamicCalldata>\",\n      },\n    ],\n  },\n  {\n    name: \"core::array::Span::<core::felt252>\",\n    type: \"struct\",\n    members: [\n      {\n        name: \"snapshot\",\n        type: \"@core::array::Array::<core::felt252>\",\n      },\n    ],\n  },\n  {\n    name: \"composable_multicall::IComposableMulticall\",\n    type: \"interface\",\n    items: [\n      {\n        name: \"aggregate\",\n        type: \"function\",\n        inputs: [\n          {\n            name: \"calls\",\n            type: \"core::array::Array::<composable_multicall::DynamicCall>\",\n          },\n        ],\n        outputs: [\n          {\n            type: \"core::array::Array::<core::array::Span::<core::felt252>>\",\n          },\n        ],\n        state_mutability: \"view\",\n      },\n    ],\n  },\n  {\n    kind: \"enum\",\n    name: \"composable_multicall::contract::ComposableMulticall::Event\",\n    type: \"event\",\n    variants: [],\n  },\n] as const;\n","import type { SwitchStarknetChainParameters } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseSwitchChainArgs = SwitchStarknetChainParameters;\n\nexport type UseSwitchChainProps = Omit<\n  UseWalletRequestProps<\"wallet_switchStarknetChain\">,\n  keyof RequestArgs<\"wallet_switchStarknetChain\">\n> & {\n  params?: UseSwitchChainArgs;\n};\n\nexport type UseSwitchChainResult = Omit<\n  UseWalletRequestResult<\"wallet_switchStarknetChain\">,\n  \"request\" | \"requestAsync\"\n> & {\n  switchChain: (args?: UseSwitchChainArgs) => void;\n  switchChainAsync: (args?: UseSwitchChainArgs) => Promise<RequestResult<\"wallet_switchStarknetChain\">>;\n};\n\n/**\n * Hook to change the current network of the wallet.\n *\n */\nexport function useSwitchChain(props: UseSwitchChainProps): UseSwitchChainResult {\n  const { params, ...rest } = props;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_switchStarknetChain\",\n    params,\n    ...rest,\n  });\n\n  const switchChain = (args?: UseSwitchChainArgs) => {\n    return request(\n      args\n        ? {\n            params: args,\n            type: \"wallet_switchStarknetChain\",\n          }\n        : undefined,\n    );\n  };\n\n  const switchChainAsync = (args?: UseSwitchChainArgs) => {\n    return requestAsync(\n      args\n        ? {\n            params: args,\n            type: \"wallet_switchStarknetChain\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    switchChain,\n    switchChainAsync,\n    ...result,\n  };\n}\n","import type { GetTransactionReceiptResponse } from \"starknet\";\n\nimport { transactionReceiptQueryFn, transactionReceiptQueryKey } from \"@starknet-start/query\";\nimport { useMemo } from \"react\";\n\nimport { useStarknet } from \"../context/starknet\";\nimport { type UseQueryProps, type UseQueryResult, useQuery } from \"../query\";\nimport { useInvalidateOnBlock } from \"./use-invalidate-on-block\";\n\n/** Arguments for the `useTransactionReceipt` hook. */\nexport type UseTransactionReceiptProps = UseQueryProps<\n  GetTransactionReceiptResponse,\n  Error,\n  GetTransactionReceiptResponse,\n  ReturnType<typeof transactionReceiptQueryKey>\n> & {\n  /** The transaction hash. */\n  hash?: string;\n  /** Refresh data at every block. */\n  watch?: boolean;\n};\n\nexport type UseTransactionReceiptResult = UseQueryResult<GetTransactionReceiptResponse, Error>;\n\n/**\n * Hook to fetch a single transaction receipt.\n *\n * @remarks\n *\n * This hook keeps a cache of receipts by chain and transaction hash\n * so that you can use the hook freely in your application without worrying\n * about sending duplicate network requests.\n *\n * If you need to refresh the transaction receipt data, set `watch: true` in\n * the props. The hook will periodically refresh the transaction data in the\n * background.\n *\n */\nexport function useTransactionReceipt({\n  hash,\n  watch,\n  enabled: enabled_ = true,\n  ...props\n}: UseTransactionReceiptProps): UseTransactionReceiptResult {\n  const { provider, chain } = useStarknet();\n\n  const queryKey_ = useMemo(() => transactionReceiptQueryKey({ chain, hash }), [chain, hash]);\n\n  const enabled = useMemo(() => Boolean(enabled_ && hash), [enabled_, hash]);\n\n  useInvalidateOnBlock({\n    enabled: Boolean(enabled && watch),\n    queryKey: queryKey_,\n  });\n\n  return useQuery({\n    queryKey: queryKey_,\n    queryFn: transactionReceiptQueryFn({ provider, hash }),\n    enabled,\n    ...props,\n  });\n}\n","import type { Address } from \"@starknet-start/chains\";\nimport type { UseContractResult } from \"@starknet-start/query\";\nimport type { Abi } from \"abi-wan-kanabi\";\nimport type { ProviderInterface } from \"starknet\";\n\nimport { useContract } from \"./use-contract\";\n\nexport type UseUniversalDeployerContractProps = {\n  /** UDC contract's address.\n   *\n   * @remarks\n   * Overrides the default address of the Universal Deployer contract.\n   *\n   */\n  address?: Address;\n  /** The provider, by default it will be the current one. */\n  provider?: ProviderInterface | null;\n};\n\nexport type UseUniversalDeployerContractResult = {\n  udc: UseContractResult<typeof abi>[\"contract\"];\n};\n\n/**\n * Hook to bind a `Contract` instance for the Universal Deployer contract.\n *\n * @returns The `Contract` instance for the Universal Deployer contract.\n *\n * @remarks\n *\n * - The returned contract is a starknet.js `Contract` object.\n *\n */\nexport function useUniversalDeployerContract(\n  props?: UseUniversalDeployerContractProps,\n): UseUniversalDeployerContractResult {\n  const { address, provider } = props || {};\n  return {\n    udc: useContract({\n      abi,\n      address: address ?? \"0x04a64cd09a853868621d94cae9952b106f2c36a3f81260f85de6696c6b050221\",\n      provider,\n    }).contract,\n  };\n}\n\n/**\n * https://docs.openzeppelin.com/contracts-cairo/0.20.0/udc\n * The Universal Deployer contract's ABI.\n */\nconst abi = [\n  {\n    name: \"UniversalDeployerImpl\",\n    type: \"impl\",\n    interface_name: \"openzeppelin::utils::universal_deployer::interface::IUniversalDeployer\",\n  },\n  {\n    name: \"core::bool\",\n    type: \"enum\",\n    variants: [\n      {\n        name: \"False\",\n        type: \"()\",\n      },\n      {\n        name: \"True\",\n        type: \"()\",\n      },\n    ],\n  },\n  {\n    name: \"core::array::Span::<core::felt252>\",\n    type: \"struct\",\n    members: [\n      {\n        name: \"snapshot\",\n        type: \"@core::array::Array::<core::felt252>\",\n      },\n    ],\n  },\n  {\n    name: \"openzeppelin::utils::universal_deployer::interface::IUniversalDeployer\",\n    type: \"interface\",\n    items: [\n      {\n        name: \"deploy_contract\",\n        type: \"function\",\n        inputs: [\n          {\n            name: \"class_hash\",\n            type: \"core::starknet::class_hash::ClassHash\",\n          },\n          {\n            name: \"salt\",\n            type: \"core::felt252\",\n          },\n          {\n            name: \"from_zero\",\n            type: \"core::bool\",\n          },\n          {\n            name: \"calldata\",\n            type: \"core::array::Span::<core::felt252>\",\n          },\n        ],\n        outputs: [\n          {\n            type: \"core::starknet::contract_address::ContractAddress\",\n          },\n        ],\n        state_mutability: \"external\",\n      },\n    ],\n  },\n  {\n    kind: \"struct\",\n    name: \"openzeppelin::presets::universal_deployer::UniversalDeployer::ContractDeployed\",\n    type: \"event\",\n    members: [\n      {\n        kind: \"data\",\n        name: \"address\",\n        type: \"core::starknet::contract_address::ContractAddress\",\n      },\n      {\n        kind: \"data\",\n        name: \"deployer\",\n        type: \"core::starknet::contract_address::ContractAddress\",\n      },\n      {\n        kind: \"data\",\n        name: \"from_zero\",\n        type: \"core::bool\",\n      },\n      {\n        kind: \"data\",\n        name: \"class_hash\",\n        type: \"core::starknet::class_hash::ClassHash\",\n      },\n      {\n        kind: \"data\",\n        name: \"calldata\",\n        type: \"core::array::Span::<core::felt252>\",\n      },\n      {\n        kind: \"data\",\n        name: \"salt\",\n        type: \"core::felt252\",\n      },\n    ],\n  },\n  {\n    kind: \"enum\",\n    name: \"openzeppelin::presets::universal_deployer::UniversalDeployer::Event\",\n    type: \"event\",\n    variants: [\n      {\n        kind: \"nested\",\n        name: \"ContractDeployed\",\n        type: \"openzeppelin::presets::universal_deployer::UniversalDeployer::ContractDeployed\",\n      },\n    ],\n  },\n] as const satisfies Abi;\n","import type { WatchAssetParameters } from \"@starknet-io/types-js\";\n\nimport {\n  type RequestArgs,\n  type RequestResult,\n  type UseWalletRequestProps,\n  type UseWalletRequestResult,\n  useWalletRequest,\n} from \"./use-wallet-request\";\n\nexport type UseWatchAssetArgs = WatchAssetParameters;\n\nexport type UseWatchAssetProps = Omit<\n  UseWalletRequestProps<\"wallet_watchAsset\">,\n  keyof RequestArgs<\"wallet_watchAsset\">\n> & {\n  params?: UseWatchAssetArgs;\n};\n\nexport type UseWatchAssetResult = Omit<UseWalletRequestResult<\"wallet_watchAsset\">, \"request\" | \"requestAsync\"> & {\n  watchAsset: (args?: UseWatchAssetArgs) => void;\n  watchAssetAsync: (args?: UseWatchAssetArgs) => Promise<RequestResult<\"wallet_watchAsset\">>;\n};\n\n/**\n * Hook to watch an asset in the wallet.\n *\n */\n\nexport function useWatchAsset(props: UseWatchAssetProps): UseWatchAssetResult {\n  const { params, ...rest } = props;\n\n  const { request, requestAsync, ...result } = useWalletRequest({\n    type: \"wallet_watchAsset\",\n    params,\n    ...rest,\n  });\n\n  const watchAsset = (args?: UseWatchAssetArgs) => {\n    return request(\n      args\n        ? {\n            params: args,\n            type: \"wallet_watchAsset\",\n          }\n        : undefined,\n    );\n  };\n\n  const watchAssetAsync = (args?: UseWatchAssetArgs) => {\n    return requestAsync(\n      args\n        ? {\n            params: args,\n            type: \"wallet_watchAsset\",\n          }\n        : undefined,\n    );\n  };\n\n  return {\n    watchAsset,\n    watchAssetAsync,\n    ...result,\n  };\n}\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAa,iCAAb,cAAoD,MAAM;CACxD,AAAS,OAAO;CAChB,AAAS,UAAU;;AAGrB,IAAa,6BAAb,cAAgD,MAAM;CACpD,AAAS,OAAO;CAChB,AAAS,UAAU;;AAGrB,IAAa,yBAAb,cAA4C,MAAM;CAChD,AAAS,OAAO;CAChB,AAAS,UAAU;;AAGrB,IAAa,2BAAb,cAA8C,MAAM;CAClD,AAAS,OAAO;CAChB,AAAS,UAAU;;AAGrB,IAAa,qBAAb,cAAwC,MAAM;CAC5C,YAAY,OAAkC,QAA0B;AACtE,QAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,UAAU,WAAW,QAAQ,wBAAwB;AAC3G,OAAK,OAAO;AACZ,OAAK,QAAQ,iBAAiB,QAAQ,MAAM,QAAQ;;;AAIxD,IAAa,wBAAb,cAA2C,MAAM;CAC/C,AAAS,OAAO;CAChB,AAAS,UAAU;;AAGrB,IAAa,mCAAb,cAAsD,MAAM;CAC1D,AAAS,OAAO;CAChB,AAAS,UACP;;;;;ACWJ,SAAgB,2BAA2B,OAAgC;AACzE,QAAO,cAAc,MAAM,GAAG,SAAS,GAAG;;AAG5C,SAASA,iBAAe,OAA8B;AACpD,QAAO,MAAM,KACV,UACE;EACC,iBAAiB,KAAK;EACtB,YAAY,KAAK;EACjB,UAAU,KAAK;EAChB,EACJ;;AAGH,IAAa,aAAb,MAA8D;CAC5D,AAAS,UAAU;CACnB,AAAS;CACT,AAAS;CAET,AAAQ;CACR,AAAQ,gBAAgB;CACxB,AAAQ,aAAa;CACrB,AAAQ,WAAmB,OAAO;CAClC,AAAQ;CAER,AAAQ,aAEJ,EAAE;CAEN,YAAY,UAA8B,SAA4B;AACpE,MAAI,SAAS,QAAQ,WAAW,KAAK,SAAS,QAAQ,WAAW,EAC/D,OAAM,IAAI,MAAM,yCAAyC;AAG3D,OAAK,YAAY;AACjB,OAAK,WAAW;AAChB,OAAK,OAAO,QAAQ;AACpB,OAAK,OAAO;;CAGd,IAAI,SAAsC;AAExC,SAAO,CAAC,2BADa,KAAK,kBAAkB,CACI,CAAC;;CAGnD,IAAI,WAAW;AACb,MAAI,CAAC,KAAK,WACR,QAAO,EAAE;EAGX,MAAM,QAAQ,KAAK,kBAAkB;AAErC,SAAO,CACL;GACE,SAAS,KAAK,gBAAgB;GAC9B,WAAW,IAAI,YAAY;GAC3B,QAAQ,CAAC,2BAA2B,MAAM,CAAC;GAC3C,UAAU,EAAE;GACb,CACF;;CAGH,IAAI,WAAmD;AACrD,SAAO;IACJ,kBAAkB;IACjB,SAAS;IACT,SAAS,KAAK,SAAS,KAAK,KAAK;IAClC;IACA,qBAAqB;IACpB,SAAS;IACT,YAAY,KAAK,YAAY,KAAK,KAAK;IACxC;IACA,iBAAiB;IAChB,SAAS;IACT,IAAI,KAAK,IAAI,KAAK,KAAK;IACxB;IACA,oBAAoB;IACnB,IAAI,KAAK,SAAS;IAClB,SAAS;IACT,SAAS,KAAK,SAAS,KAAK,KAAK;IACjC,eAAe;IAChB;GACF;;CAIH,YAAY,SAAuB;AACjC,OAAK,WAAW;AAChB,OAAK,gBAAgB;AACrB,OAAK,MAAM,UAAU;GAAE,QAAQ,KAAK;GAAQ,UAAU,KAAK;GAAU,CAAC;;CAGxE,cAAc,cAA4B;AACxC,OAAK,gBAAgB;AACrB,OAAK,MAAM,UAAU,EAAE,UAAU,KAAK,UAAU,CAAC;;CAGnD,AAAS,aAAa,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE;CAEzD,cAAc,SAA2C;AACvD,OAAK,WAAW;GAAE,GAAG,KAAK;GAAU,GAAG;GAAS;;CAIlD,AAAQ,WAAkC,OAAO,EAAE,SAAS,UAAU,EAAE,KAAK;AAC3E,MAAI,KAAK,SAAS,YAChB,OAAM,IAAI,0BAA0B;AAGtC,MAAI,CAAC,KAAK,SAAS,UACjB,OAAM,IAAI,MAAM,uBAAuB;AAQzC,OALiB,MAAM,KAAK,SAAS;GACnC,MAAM;GACN,QAAQ,EAAE,aAAa,QAAQ;GAChC,CAAC,EAEW,WAAW,EACtB,QAAO,EAAE,UAAU,EAAE,EAAE;AAGzB,OAAK,aAAa;AAElB,OAAK,MAAM,UAAU,EAAE,UAAU,KAAK,UAAU,CAAC;AAEjD,SAAO,EAAE,UAAU,KAAK,UAAU;;CAGpC,AAAQ,cAAwC,YAAY;AAC1D,OAAK,aAAa;AAClB,OAAK,MAAM,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;;CAGxC,AAAQ,OAA+B,OAAO,aAAa;AACzD,MAAI,CAAC,KAAK,WAAW,OACnB,MAAK,WAAW,SAAS,EAAE;AAE7B,OAAK,WAAW,QAAQ,KAAK,SAAS;AAEtC,eAAmB,KAAK,KAAK,OAAO,SAAS;;CAG/C,AAAQ,KAAoC,OAAU,UAA4C;EAChG,MAAM,YAAY,KAAK,WAAW;AAClC,MAAI,CAAC,UAAW;AAEhB,OAAK,WAAW,SAAS,UAAU,QAAQ,qBAAqB,aAAa,iBAAiB;;CAGhG,AAAQ,MAAqC,OAAU,GAAG,MAAoD;EAC5G,MAAM,YAAY,KAAK,WAAW;AAClC,MAAI,CAAC,UAAW;AAEhB,OAAK,MAAM,YAAY,UACrB,UAAS,MAAM,MAAM,KAAK;;CAI9B,AAAQ,WAAsB,OAC5B,SAC8C;EAC9C,MAAM,EAAE,MAAM,WAAW;AAEzB,MAAI,KAAK,SAAS,cAChB,OAAM,IAAI,0BAA0B;AAGtC,UAAQ,MAAR;GACE,KAAK,wBACH,QAAO,KAAK,KAAK,SAAS,SAAS,GAAG;GAExC,KAAK;AACH,QAAI,KAAK,WAAY,QAAO,CAAC,WAAW,SAAS;AACjD,WAAO,EAAE;GAEX,KAAK,yBACH,QAAO,CAAC,KAAK,gBAAgB,QAAQ;GAEvC,KAAK,0BACH,QAAO;GAET,KAAK,oBACH,QAAO;GAET,KAAK,8BAA8B;AACjC,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB;IAClD,MAAM,EAAE,YAAY;AACpB,SAAK,YAAY,OAAO,QAAQ,CAAC;AACjC,WAAO;;GAGT,KAAK,gCAAgC;AACnC,QAAI,KAAK,SAAS,cAChB,OAAM,IAAI,0BAA0B;AAEtC,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB;IAClD,MAAM,EAAE,qBAAqB,gBAAgB,eAAe;AAE5D,WAAO,MAAM,KAAK,gBAAgB,QAAQ;KACxC,mBAAmB;KACnB,UAAU;MACR,GAAG;MACH,KAAK,KAAK,MAAM,eAAe,IAAI;MACpC;KACD,WAAW;KACZ,CAAC;;GAGJ,KAAK,+BAA+B;AAClC,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB;IAClD,MAAM,EAAE,UAAU;AAClB,WAAO,MAAM,KAAK,gBAAgB,QAAQA,iBAAe,MAAM,CAAC;;GAGlE,KAAK,wBAAwB;AAC3B,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,qBAAqB;IAClD,MAAM,EAAE,QAAQ,SAAS,aAAa,UAAU;AAChD,WAAQ,MAAM,KAAK,gBAAgB,YAAY;KAC7C;KACA;KACA;KACA;KACD,CAAC;;GAGJ,QACE,OAAM,IAAI,MAAM,yBAAyB,OAAO;;;CAItD,IAAY,kBAAoC;EAC9C,IAAIC;AACJ,MAAI,KAAK,aAAa,QAAQ,GAC5B,WAAU,KAAK,UAAU,QAAQ,KAAK;MAEtC,WAAU,KAAK,UAAU,QAAQ,KAAK;AAGxC,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,uBAAuB;AAGzC,SAAO;;CAGT,AAAQ,mBAA0B;AAChC,MAAI,KAAK,aAAa,QAAQ,GAAI,QAAO;AACzC,MAAI,KAAK,aAAa,QAAQ,GAAI,QAAO;AACzC,SAAO;;;;;;ACpSX,MAAM,iBAAiB,MAAM,cAG1B;CACD,SAAS;CACT,SAAS;CACV,CAAC;AAEF,SAAgB,qBAAqB;CACnC,MAAM,EAAE,SAAS,YAAY,WAAW,eAAe;AACvD,QAAO;EAAE;EAAS;EAAS;;AAG7B,SAAgB,gBAAgB,EAC9B,SACA,SACA,YAKC;AACD,QAAO,oBAAC,eAAe;EAAS,OAAO;GAAE;GAAS;GAAS;EAAG;GAAmC;;;;;ACFnG,MAAM,qBAAqB,IAAI,aAAa;AAc5C,MAAM,kBAAkB,cAAyC,OAAU;AAyB3E,SAAgB,iBAAiB,OAA8B;CAC7D,MAAM,EAAE,oBAAoB,cAAc,OAAO,UAAU,GAAG,SAAS;AACvE,QACE,oBAAC;EAAkC;EAAkC;EAA2B;YAC9F,oBAAC;GAAsB,GAAI;GAAO;IAAiC;GAC/C;;AAI1B,SAAS,sBAAsB,EAC7B,QACA,UAEA,UACA,gBACA,UACA,mBACA,eAC6B;CAC7B,MAAM,EAAE,SAAS,YAAY,cAAc,SAAS,cAAcC,cAAuB;CACzF,MAAM,EAAE,cAAc,iBAAiB,kBAAkB,oBAAoB,SAAS,aACpF,qBAAqB;CAEvB,MAAM,eAAe,iBAAkB,OAAO,MAAM,MAAM,EAAE,OAAO,eAAe,IAAI,OAAO,KAAM,OAAO;AAE1G,KAAI,iBAAiB,OACnB,OAAM,IAAI,MAAM,mCAAmC;CAIrD,MAAM,uBAAO,IAAI,KAAa;AAE9B,MAAK,MAAM,SAAS,QAAQ;AAC1B,MAAI,KAAK,IAAI,MAAM,GAAG,CACpB,OAAM,IAAI,MAAM,8BAA8B,MAAM,KAAK;AAE3D,OAAK,IAAI,MAAM,GAAG;;CAGpB,MAAM,EAAE,UAAU,oBAAoB,cAC9B,iBAAiB,cAAc,SAAS,EAC9C,CAAC,cAAc,SAAS,CACzB;CACD,MAAM,qBAAqB,cAAc,qBAAqB,sBAAsB,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC;CAC7G,MAAM,EAAE,mBAAmB,6BAA6B,cAChD,0BAA0B,cAAc,mBAAmB,EACjE,CAAC,cAAc,mBAAmB,CACnC;CAED,MAAM,CAAC,cAAc,mBAAmB,SAAgB,aAAa;CACrE,MAAM,CAAC,iBAAiB,sBAAsB,SAA4B,gBAAgB;CAC1F,MAAM,CAAC,0BAA0B,+BAA+B,SAC9D,yBACD;CACD,MAAM,CAAC,SAAS,cAAc,UAA+B;CAC7D,MAAM,CAAC,SAAS,cAAc,UAAwC;CAEtE,MAAM,yBAAyB,aAC5B,YAAoB;EACnB,MAAM,cAAc,OAAO,MAAM,MAAM,EAAE,OAAO,QAAQ;AACxD,MAAI,CAAC,YACH;EAGF,MAAM,EAAE,UAAU,gBAAgB,iBAAiB,aAAa,SAAS;EACzE,MAAM,EAAE,mBAAmB,yBAAyB,0BAA0B,aAAa,mBAAmB;AAC9G,kBAAgB,YAAY;AAC5B,qBAAmB,YAAY;AAC/B,8BAA4B,qBAAqB;IAEnD;EAAC;EAAQ;EAAU;EAAmB,CACvC;CAED,MAAMC,eAAkD,aACrD,WAAW;AACV,MAAI,OAAO,YAAY,OAAO,SAAS,SAAS,GAAG;GACjD,MAAMC,YAAU,OAAO,SAAS;AAChC,cAAWA,UAAQ,QAAmB;AAEtC,OAAI;IAEF,MAAM,QADkBA,UAAQ,OAAO,GACT,MAAM,IAAI;IACxC,MAAM,aAAa,MAAM,MAAM,SAAS;AAGxC,2BAFgB,OAAO,WAAW,CAEH;YACxB,OAAO;AACd,YAAQ,MAAM,6BAA6B,MAAM;;;IAIvD,CAAC,uBAAuB,CACzB;AAED,iBAAgB;EACd,IAAIC;AACJ,MAAI,WAAW;GACb,MAAM,gBAAgB,UAAU,WAAW,IAAI;AAC/C,cAAW,cAAc;AAEzB,OAAI,UAAU,WAAW,IAAI,SAAS,GACpC,KAAI;IAEF,MAAM,QADkB,UAAU,SAAS,GAAG,OAAO,GACvB,MAAM,IAAI;IACxC,MAAM,aAAa,MAAM,MAAM,SAAS;IACxC,MAAM,UAAU,OAAO,WAAW;IAElC,IAAIC;AAEJ,QAAI,eACF,iBAAgB;aACP,OAAO,SAAS,EACzB,iBAAgB,OAAO,GAAG;QAE1B,iBAAgB;AAGlB,QAAI,YAAY,cAEd,KADoB,OAAO,MAAM,MAAM,EAAE,OAAO,cAAc,EAC7C;AACf,4BAAuB,cAAc;KAErC,MAAM,wBAAwB,gBAAgB,cAAc;AAC5D,SAAI,sBACF,WAAU,SAASC,qBAChB,QAAQ;MACP,MAAM;MACN,QAAQ,EAAE,SAAS,uBAAuB;MAC3C,CAAC,CACD,OAAO,UAAiB;AACvB,cAAQ,KAAK,4CAA4C,MAAM;AAC/D,6BAAuB,QAAQ;OAC/B;UAGN,wBAAuB,QAAQ;QAGjC,wBAAuB,QAAQ;YAE1B,OAAO;AACd,YAAQ,MAAM,6BAA6B,MAAM;;YAE1C,eACT,wBAAuB,eAAe;YAC7B,OAAO,SAAS,EACzB,wBAAuB,OAAO,GAAG,GAAG;AAGtC,aAAU,UAAU,SAAS,gBAAgB,GAAG,UAAU,aAAa;SAClE;AACL,cAAW,OAAU;AACrB,cAAW,OAAU;AACrB,mBAAgB,aAAa;AAC7B,sBAAmB,gBAAgB;AACnC,+BAA4B,yBAAyB;;AAGvD,eAAa;AACX,cAAW;;IAEZ;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,iBAAgB;AACd,MAAI,aAAa,QACf,YACE,IAAI,gBAAgB;GAClB;GACA,UAAU;GACV,gBAAgB;GAChB,WAAW;GACZ,CAAC,CACH;IAEF;EAAC;EAAW;EAAS;EAAiB;EAAyB,CAAC;CAEnE,MAAMC,QAAuB,cAAc;AACzC,SAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA,OAAO;GACP;GACA,UAAU;GACV,mBAAmB;GACnB,OAAO;GACP;GACA;GACA;GACA;GACA;GACA;GACD;IACA;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oBAAC;EAAoB,QAAQ,eAAe;YAC1C,oBAAC,gBAAgB;GAAS,OAAO;aAC/B,oBAAC;IAAyB;IAAkB;IACzC;KACe;IACO;GACP;;AAI1B,SAAgB,cAA6B;CAC3C,MAAM,UAAU,WAAW,gBAAgB;AAC3C,KAAI,CAAC,QACH,OAAM,IAAI,MAAM,qDAAqD;AAEvE,QAAO;;AAQT,SAAS,iBAAiB,OAAc,SAA8E;CACpH,MAAM,WAAW,QAAQ,MAAM;AAC/B,KAAI,SACF,QAAO;EAAE;EAAO;EAAU;AAE5B,OAAM,IAAI,MAAM,+BAA+B,MAAM,OAAO;;AAG9D,SAAS,0BACP,OACA,SACmD;CACnD,MAAM,oBAAoB,QAAQ,MAAM;AACxC,KAAI,kBACF,QAAO;EAAE;EAAO;EAAmB;AAErC,OAAM,IAAI,MAAM,yCAAyC,MAAM,OAAO;;AAGxE,SAAgB,gBAAgB,SAAwD;AACtF,SAAQ,SAAR;EACE,KAAK,QAAQ,GACX,QAAO,UAAU,gBAAgB;EACnC,KAAK,QAAQ,GACX,QAAO,UAAU,gBAAgB;EACnC,QACE;;;;;;AC3UN,SAAgB,eAAe,EAAE,UAAU,GAAG,UAA+B;AAC3E,QAAO,oBAAC;EAAiB,GAAI;EAAS;GAA4B;;;;;;;;;;;ACEpE,SAAgB,WAAW,SAA0B;AACnD,QAAO,wBAAwB,QAAQ;;;;;;;;;;;;;ACSzC,SAAgB,cAAiC;CAC/C,MAAM,EAAE,UAAU,sBAAsB,aAAa;AACrD,QAAO;EAAE;EAAU;EAAmB;;;;;;;;;;;;;ACmBxC,SAAgB,aAA+B;CAC7C,MAAM,EAAE,OAAO,WAAW,cAAc,aAAa;CAErD,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,EAAE,SAAS,qBAAqB,oBAAoB;CAE1D,MAAM,CAAC,OAAO,YAAY,SACxB,qBAAqB,SACjB,EACE,QAAQ,gBACT,GACD;EACE,QAAQ;EACR;EACA,SAAS,MAAM;EACf,SAAS,WAAW,iBAAiB;EACrC,aAAa;EACb,cAAc;EACd,gBAAgB;EAChB,gBAAgB;EACjB,CACN;CAED,MAAM,eAAe,YAAY,YAAY;AAC3C,MAAI,aAAa,YAAY,iBAC3B,UAAS;GACP,QAAQ;GACR;GACA,SAAS,MAAM;GACf,SAAS,WAAW,iBAAiB;GACrC,aAAa;GACb,cAAc;GACd,gBAAgB;GAChB,gBAAgB;GACjB,CAAC;MAEF,QAAO,SAAS;GACd,QAAQ;GACR,WAAW;GACX,SAAS;GACT,SAAS;GACT,aAAa;GACb,cAAc;GACd,gBAAgB;GAChB,gBAAgB;GACjB,CAAC;IAEH;EAAC;EAAU;EAAW,MAAM;EAAI;EAAiB,CAAC;AAErD,iBAAgB;AACd,gBAAc;IACb,CAAC,aAAa,CAAC;AAElB,QAAO;;;;;ACxDT,SAAgBC,WAKd,MAA+F;CAC/F,MAAM,OAAOC,SAAU;EAAE,GAAG;EAAM,mBAAmB;EAAO,CAAC;AAE7D,QAAO;EACL,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,QAAQ,KAAK;EACb,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,aAAa,KAAK;EAClB,YAAY,KAAK;EACjB,WAAW,KAAK;EAChB,SAAS,KAAK;EACf;;AAuBH,SAAgBC,cACd,MACwD;CACxD,MAAM,OAAOC,YAAa,KAAK;AAE/B,QAAO;EACL,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,OAAO,KAAK;EACZ,SAAS,KAAK;EACd,QAAQ,KAAK;EACb,WAAW,KAAK;EAChB,WAAW,KAAK;EAChB,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,aAAa,KAAK;EAClB,QAAQ,KAAK;EACb,WAAW,KAAK;EACjB;;AAmCH,SAAgBC,mBAMd,MAAoF;CACpF,MAAM,OAAOC,iBAAkB;EAAE,GAAG;EAAM,mBAAmB;EAAO,CAAC;AAErE,QAAO;EACL,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,QAAQ,KAAK;EACb,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,WAAW,KAAK;EAChB,aAAa,KAAK;EAClB,YAAY,KAAK;EACjB,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,eAAe,KAAK;EACpB,mBAAmB,KAAK;EACxB,aAAa,KAAK;EAClB,iBAAiB,KAAK;EACtB,oBAAoB,KAAK;EACzB,wBAAwB,KAAK;EAC9B;;;;;;AC3HH,SAAgB,iBACd,OAC2B;CAC3B,MAAM,EAAE,WAAW,cAAc,aAAa;CAE9C,MAAM,EAAE,MAAM,QAAQ,GAAG,SAAS;CAElC,MAAM,EAAE,QAAQ,aAAa,GAAG,WAAWC,cAAY;EACrD,aAAa,yBAAyB;GAAE;GAAM;GAAQ,CAAC;EACvD,YAAY,wBAAwB,EAAE,WAAW,CAAC;EAClD,GAAG;EACJ,CAAC;AASF,QAAO;EACL,SARc,aAAa,SAA0B,OAAO,QAAQ;GAAE;GAAM;GAAQ,CAAC,EAAE;GAAC;GAAQ;GAAM;GAAO,CAAC;EAS9G,cAPmB,aAClB,SAA0B,YAAY,QAAQ;GAAE;GAAM;GAAQ,CAAC,EAChE;GAAC;GAAa;GAAM;GAAO,CAC5B;EAKC,GAAG;EACJ;;;;;;;;ACjCH,SAAgB,YAAY,OAA4C;CACtE,MAAM,EAAE,QAAQ,GAAG,SAAS;CAE5B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN;EACA,GAAG;EACJ,CAAC;CAEF,MAAM,YAAY,SAA2B;AAC3C,SAAO,QACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;CAGH,MAAM,iBAAiB,SAA2B;AAChD,SAAO,aACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ;;;;;;;;;;;;;;AC7CH,SAAgB,YAA8B,EAC5C,YACA,SACA,UAAU,oBACuC;CACjD,MAAM,EAAE,UAAU,oBAAoB,aAAa;AAcnD,QAAO,EAAE,UAZQ,cAAc;EAC7B,MAAM,WAAW,mBAAmB,mBAAmB;AACvD,MAAIC,SAAO,WAAW,SACpB,QAAO,IAAI,SAAS;GAClB;GACA;GACA,mBAAmB;GACpB,CAAC,CAAC,QAAQA,MAAI;IAGhB;EAACA;EAAK;EAAS;EAAkB;EAAgB,CAAC,EAElC;;;;;;;;;;;;ACTrB,SAAgB,eAAe,EAC7B,kBAAkB,SAAS,QAC3B,GAAG,UACoB,EAAE,EAAwB;CACjD,MAAM,EAAE,aAAa,aAAa;AAElC,QAAOC,WAAS;EACd,UAAU,oBAAoB,EAAE,iBAAiB,CAAC;EAClD,SAAS,mBAAmB;GAAE;GAAU;GAAiB,CAAC;EAC1D,GAAG;EACJ,CAAC;;;;;;;;AC7BJ,SAAgB,qBAAqB,EAAE,UAAU,MAAM,YAAuD;CAC5G,MAAM,cAAc,gBAAgB;CAEpC,MAAM,CAAC,iBAAiB,sBAAsB,UAA8B;CAE5E,MAAM,EAAE,MAAM,gBAAgB,eAAe,EAC3C,SACD,CAAC;AAEF,iBAAgB;AACd,MAAI,CAAC,gBACH,QAAO,mBAAmB,YAAY;AAGxC,MAAI,gBAAgB,iBAAiB;AACnC,eAAY,kBAAkB,EAAE,UAAU,EAAE,EAAE,eAAe,OAAO,CAAC;AACrE,UAAO,mBAAmB,YAAY;;IAEvC;EAAC;EAAa;EAAiB;EAAU;EAAY,CAAC;;;;;;;;;;;;;;ACL3D,SAAgB,aAA+B;CAC7C,MAAM,EAAE,OAAO,WAAW,aAAa;AACvC,QAAO;EAAE;EAAO;EAAQ;;;;;ACZ1B,MAAMC,2BAAyB;;;;;;AA2B/B,SAAgB,WAAW,EACzB,OAAO,QACP,SACA,iBAAiB,kBACjB,QAAQ,OACR,SAAS,WAAW,MACpB,kBAAkB,SAAS,QAC3B,GAAG,SACe;CAClB,MAAM,EAAE,UAAU,YAAY;CAC9B,MAAM,QAAQ,UAAU,MAAM,eAAe;CAE7C,MAAM,EAAE,aAAa,YAAY;EAC/B,KAAK;EACL,SAAS;EACV,CAAC;CAEF,MAAM,YAAY,cACV,gBAAgB;EAAE;EAAO;EAAO;EAAS;EAAiB,CAAC,EACjE;EAAC;EAAO;EAAO;EAAS;EAAgB,CACzC;CAED,MAAM,UAAU,cAAc,QAAQ,YAAY,YAAY,QAAQ,EAAE;EAAC;EAAU;EAAU;EAAQ,CAAC;CAEtG,MAAM,kBACJ,qBAAqB,oBAAoB,SAAS,iBAAiB,QAAQA,2BAAyB;AAEtG,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd;EACA;EACA,UAAU;EACV,SAAS,eAAe;GACtB;GACA;GACA;GACA;GACA;GACD,CAAC;EACF,GAAG;EACJ,CAAC;;AAGJ,MAAM,qBAAqB;CACzB;EACE,MAAM;EACN,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,MAAM;GACP,EACD;GACE,MAAM;GACN,MAAM;GACP,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,QAAQ,CACN;GACE,MAAM;GACN,MAAM;GACP,CACF;EACD,SAAS,CACP,EACE,MAAM,uBACP,CACF;EACD,kBAAkB;EACnB;CACD;EACE,MAAM;EACN,MAAM;EACN,QAAQ,EAAE;EACV,SAAS,CACP,EACE,MAAM,iBACP,CACF;EACD,kBAAkB;EACnB;CACD;EACE,MAAM;EACN,MAAM;EACN,QAAQ,EAAE;EACV,SAAS,CACP,EACE,MAAM,qBACP,CACF;EACD,kBAAkB;EACnB;CACF;;;;;;;;;;;;AC9GD,SAAgB,SAAS,EAAE,kBAAkB,SAAS,QAAQ,GAAG,UAAyB,EAAE,EAAkB;CAC5G,MAAM,EAAE,aAAa,aAAa;AAClC,QAAOC,WAAS;EACd,UAAU,cAAc,EAAE,iBAAiB,CAAC;EAC5C,SAAS,aAAa;GAAE;GAAU;GAAiB,CAAC;EACpD,GAAG;EACJ,CAAC;;;;;ACvBJ,MAAM,yBAAyB;;;;;;;;;;AA2B/B,SAAgB,QAAQ,EACtB,YACA,SACA,cACA,MACA,kBAAkB,SAAS,QAC3B,iBAAiB,kBACjB,QAAQ,OACR,SAAS,WAAW,MACpB,WACA,aACA,GAAG,SAC2B;CAC9B,MAAM,EAAE,UAAU,YAAY;CAC9B,MAAM,EAAE,aAAa,YAAY;EAAE;EAAK;EAAS,CAAC;CAElD,MAAM,YAAY,cAEd,aAAa;EACX;EACU;EACV;EACA;EACA;EACD,CAAC,EACJ;EAAC;EAAO;EAAU;EAAc;EAAM;EAAgB,CACvD;CAED,MAAM,UAAU,cACR,QAAQ,YAAY,YAAY,gBAAgB,KAAK,EAC3D;EAAC;EAAU;EAAU;EAAc;EAAK,CACzC;CAED,MAAM,kBACJ,qBAAqB,oBAAoB,SAAS,iBAAiB,QAAQ,yBAAyB;AAEtG,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd,UAAU;EACV,SAAS,YAAY;GACT;GACV;GACA;GACA;GACA;GACA;GACD,CAAC;EACF;EACA;EACA,GAAG;EACJ,CAAC;;;;;;;;;;;;;;ACvDJ,SAAgB,WAAW,QAAyB,EAAE,EAAoB;CACxE,MAAM,EAAE,WAAW,WAAW,iBAAiB,cAAc,SAAS,UAAU,UAAU,aAAa;CAEvG,MAAM,iBAAiB,YACrB,OAAO,SAA0C;AAC/C,MAAI,CAAC,KAAK,UACR,OAAM,IAAI,MAAM,wBAAwB;AAE1C,QAAM,SAAS,KAAK,UAAU;IAEhC,CAAC,SAAS,CACX;CAED,MAAM,EAAE,QAAQ,aAAa,WAAW,GAAG,WAAWC,cAAY;EAChE,aAAa,mBAAmB,EAAE,SAAS,MAAM,MAAM,CAAC;EACxD,YAAY,kBAAkB,EAAE,SAAS,gBAAgB,CAAC;EAC1D,GAAG;EACJ,CAAC;CAEF,MAAM,UAAU,aAAa,SAA4B,OAAO,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,QAAQ,UAAU,CAAC;CAE5G,MAAM,eAAe,aAClB,SAA4B,YAAY,QAAQ,EAAE,WAAW,CAAC,EAC/D,CAAC,aAAa,UAAU,CACzB;AAED,QAAO;EACL;EACA,YAAY,CAAC,GAAG,iBAAiB,GAAG,aAAa;EACjD,kBAAkB,WAAW;EAC7B;EACA;EACA;EACA,GAAG;EACJ;;;;;;;;;;;;;;;;ACnBH,SAAgB,mBAAmB,EACjC,kBACA,MACA,WACA,cACoD;CACpD,MAAM,EAAE,YAAY,oBAAoB;CAExC,MAAM,iBAAiB,YACrB,OAAO,YAAoC;AACzC,MAAI,CAAC,QACH,OAAM,IAAI,MAAM,2CAA2C;EAG7D,MAAM,EAAE,qBAAqB,MAAM,QAAQ,YAAY,WAAW,EAAE;AAGpE,MAAI,oBAAoB,KACtB,QAAO,MAAM,SAAS,QACpB;GACE;GACA,UAAU;GACV;GACA;GACA;GACA;GACD,EACD,QACD;AAIH,MAAI,UACF,QAAO,MAAM,SAAS,QACpB;GACE;GACA;GACA;GACA;GACA;GACA;GACD,EACD,QACD;AAGH,QAAM,IAAI,MAAM,+EAA+E;IAEjG;EAAC;EAAS;EAAkB;EAAM;EAAWC;EAAI,CAClD;AAED,QAAO,EACL,gBAAgB,YAAa,oBAAoB,QAAS,aAAa,iBAAiB,QACzF;;;;;;;;;AC1EH,SAAgB,mBAAmB,OAA0D;CAC3F,MAAM,EAAE,QAAQ,GAAG,SAAS;CAE5B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN;EACA,GAAG;EACJ,CAAC;CAEF,MAAM,WAAW,SAAkC;AACjD,SAAO,QACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;CAGH,MAAM,gBAAgB,SAAkC;AACtD,SAAO,aACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ;;;;;;;;;;;;ACrCH,SAAgB,iBAAiB,EAC/B,WACA,qBACA,aACA,iBACA,SACA,GAAG,SAC6C;CAChD,MAAM,EAAE,YAAY,oBAAoB;CACxC,MAAM,EAAE,QAAQ,aAAa,GAAG,WAAWC,cAAY;EACrD,aAAa,yBAAyB;GACpC;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;EACF,YAAY,wBAAwB;GAClC;GACA;GACA;GACA;GACA;GACA;GACD,CAAC;EACF,GAAG;EACJ,CAAC;AAEF,QAAO;EACL,eAAe;EACf,oBAAoB;EACpB,GAAG;EACJ;;;;;;;;;ACzCH,SAAgB,cAAc,QAA4B,EAAE,EAAuB;CACjF,MAAM,EAAE,YAAY,UAAU,aAAa;CAE3C,MAAM,EAAE,QAAQ,aAAa,GAAG,WAAWC,cAAY;EACrD,aAAa,sBAAsB,EAAE,SAAS,MAAM,MAAM,CAAC;EAC3D,YAAY,qBAAqB,EAAE,YAAY,CAAC;EAChD,GAAG;EACJ,CAAC;AAEF,QAAO;EACL,YAAY;EACZ,iBAAiB;EACjB,GAAG;EACJ;;;;;;;;;;;;ACHH,SAAgB,gBAAgB,EAC9B,OACA,SACA,QAAQ,OACR,SAAS,WAAW,MACpB,GAAG,SAC2C;CAC9C,MAAM,EAAE,YAAY,oBAAoB;CAExC,MAAM,YAAY,cAAc,qBAAqB;EAAE;EAAO;EAAS,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC;CAE3F,MAAM,UAAU,cAAc,QAAQ,YAAY,MAAM,EAAE,CAAC,UAAU,MAAM,CAAC;AAE5E,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd,UAAU;EACV,SAAS,oBAAoB;GAC3B;GACA;GACA;GACD,CAAC;EACF;EACA,GAAG;EACJ,CAAC;;;;;;;;;;;;;ACzBJ,SAAgB,UAAU,EACxB,SACA,WACA,WAAW,YACX,SAAS,UACT,YACkC;CAClC,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,cAAc;AAEpB,QAAOC,mBAAiB;EAEtB,UAAU,eAAe;GACvB;GACA;GACA,WAAW;GACX,SAAS;GACT;GACD,CAAC;EACF,SAAS,cAAc;GACrB,UAAU;GACV;GACA;GACA,WAAW;GACX,SAAS;GACT;GACD,CAAC;EACF,kBAAkB;EAClB,mBAAmB,UAAU,WAAW,SAAS;EAClD,CAAC;;;;;;ACzDJ,SAAgB,cAAwB;CACtC,MAAM,EAAE,UAAU,UAAU,aAAa;AACzC,KAAI,CAAC,SAAU,OAAM,MAAM,0DAA0D;CACrF,MAAM,mBAAmB,SAAS,MAAM;AACxC,KAAI,CAAC,iBAAkB,OAAM,MAAM,iCAAiC;AACpE,QAAO;;;;;;;;ACYT,SAAgB,mBAAmB,EACjC,SACA,kBAAkB,SAAS,QAC3B,GAAG,SACiD;CACpD,MAAM,EAAE,aAAa,aAAa;AAElC,QAAOC,WAAS;EACd,UAAU,wBAAwB;GAAE;GAAS;GAAiB,CAAC;EAC/D,SAAS,uBAAuB;GAC9B;GACA;GACA;GACD,CAAC;EACF,SAAS,MAAM,WAAW,CAAC,CAAC;EAC5B,GAAG;EACJ,CAAC;;;;;;;;;;;;ACRJ,SAAgB,yBAAyB,EACvC,OACA,SACA,QAAQ,OACR,SAAS,WAAW,MACpB,GAAG,SAC6D;CAChE,MAAM,EAAE,YAAY,oBAAoB;CAExC,MAAM,YAAY,cAAc,8BAA8B;EAAE;EAAO;EAAS,CAAC,EAAE,CAAC,OAAO,QAAQ,CAAC;CAEpG,MAAM,UAAU,cAAc,QAAQ,YAAY,SAAS,QAAQ,EAAE;EAAC;EAAU;EAAO;EAAQ,CAAC;AAEhG,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd,UAAU;EACV,SAAS,6BAA6B;GACpC;GACA;GACA;GACD,CAAC;EACF;EACA,GAAG;EACJ,CAAC;;;;;;;;;;;;AC3BJ,SAAgB,sBAAsB,EACpC,QAAQ,OACR,SAAS,WAAW,MACpB,GAAG,UAC2B,EAAE,EAA+B;CAC/D,MAAM,EAAE,sBAAsB,aAAa;CAE3C,MAAM,YAAY,cAAc,4BAA4B,EAAE,EAAE,CAAC;CAEjE,MAAM,UAAU,cAAc,QAAQ,SAAS,EAAE,CAAC,SAAS,CAAC;AAE5D,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd,UAAU;EACV,SAAS,0BAA0B,EACjC,mBACD,CAAC;EACF;EACA,GAAG;EACJ,CAAC;;;;;;AC1BJ,SAAgB,4BAA4B,OAA2E;CACrH,MAAM,EAAE,OAAO,SAAS,kBAAkB,GAAG,SAAS;CACtD,MAAM,EAAE,YAAY,oBAAoB;CAExC,MAAM,EAAE,QAAQ,aAAa,GAAG,WAAWC,cAAmD;EAC5F,aAAa,oCAAoC,SAAS,EAAE,CAAC;EAC7D,YAAY,mCAAmC;GAC7C;GACA;GACA;GACD,CAAC;EACF,GAAG;EACJ,CAAC;AAgBF,QAAO;EACL,MAfW,aACV,SAAkB;AACjB,UAAO,QAAQ,SAAS,EAAE,CAAC;KAE7B,CAAC,QAAQ,MAAM,CAChB;EAWC,WATgB,aACf,SAAkB;AACjB,UAAO,YAAY,QAAQ,SAAS,EAAE,CAAC;KAEzC,CAAC,aAAa,MAAM,CACrB;EAKC,GAAG;EACJ;;;;;;;;;;;;;;;;ACLH,SAAgB,gBACd,OACA;AACA,QAAO,QAAQ,MAAsB;;;;;;AC7BvC,SAAgB,mBAAmB,OAA0D;CAC3F,MAAM,EAAE,OAAO,GAAG,SAAS;CAI3B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN,QAJa,QAAQ,EAAE,OAAO,eAAe,MAAM,EAAE,GAAG;EAKxD,GAAG;EACJ,CAAC;CAEF,MAAM,QAAQ,SAAkB;AAC9B,SAAO,QACL,OACI;GACE,QAAQ,EAAE,OAAO,eAAe,KAAK,EAAE;GACvC,MAAM;GACP,GACD,OACL;;CAGH,MAAM,aAAa,SAAkB;AACnC,SAAO,aACL,OACI;GACE,QAAQ,EAAE,OAAO,eAAe,KAAK,EAAE;GACvC,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ;;AAGH,SAAS,eAAe,OAAe;AACrC,QAAO,MAAM,KACV,UACE;EACC,kBAAkB,KAAK;EACvB,aAAa,KAAK;EAClB,UAAU,KAAK;EAChB,EACJ;;;;;ACjDH,SAAgB,iBAAiB,OAAsD;CACrF,MAAM,EAAE,QAAQ,GAAG,SAAS;CAE5B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN;EACA,GAAG;EACJ,CAAC;CAEF,MAAM,iBAAiB,SAAgC;AACrD,SAAO,QACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;CAGH,MAAM,sBAAsB,SAAgC;AAC1D,SAAO,aACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ;;;;;;;;;;;;;;;AClCH,SAAgB,gBAAgB,EAC9B,MACA,UACA,SAAS,WAAW,MACpB,GAAG,SAC2C;CAC9C,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,EAAE,UAAU,YAAY;CAE9B,MAAM,UAAU,cAAc,QAAQ,YAAY,KAAK,EAAE,CAAC,UAAU,KAAK,CAAC;AAE1E,QAAOC,WAAS;EACd,UAAU,qBAAqB;GAAE;GAAM;GAAU,SAAS,MAAM;GAAS,CAAC;EAC1E,SAAS,oBAAoB;GAC3B;GACA;GACA;GACA,SAAS,MAAM;GAChB,CAAC;EACF;EACA,GAAG;EACJ,CAAC;;;;;;;;;;;;;;;ACnBJ,SAAgB,aAAa,EAC3B,SACA,UACA,SAAS,WAAW,MACpB,GAAG,SAC8B;CACjC,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,EAAE,UAAU,YAAY;CAE9B,MAAM,UAAU,cAAc,QAAQ,YAAY,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC;AAEhF,QAAOC,WAAS;EACd,UAAU,kBAAkB;GAC1B;GACA;GACA,SAAS,MAAM;GAChB,CAAC;EACF,SAAS,iBAAiB;GACxB;GACA;GACA;GACA,SAAS,MAAM;GAChB,CAAC;EACF;EACA,GAAG;EACJ,CAAC;;;;;;;;ACfJ,SAAgB,gBAAgB,EAC9B,SACA,gBAAgB,MAChB,gBACA,kBACA,SAAS,WAAW,MACpB,GAAG,SACuC;CAC1C,MAAM,EAAE,UAAU,YAAY;CAC9B,MAAM,mBAAmB,sBAAsB,MAAM;AACrD,KAAI,CAAC,iBAAkB,OAAM,IAAI,MAAM,wBAAwB;CAE/D,MAAM,EAAE,UAAU,uBAAuB,YAAY;EACnD,KAAK;EACL,SAAS,iBAAiB;EAC3B,CAAC;CAEF,MAAM,UAAU,cAAc,QAAQ,YAAY,QAAQ,EAAE,CAAC,UAAU,QAAQ,CAAC;CAEhF,MAAM,EAAE,iBAAiB,GAAG,SAAS;AAErC,QAAOC,WAAS;EACd,UAAU,qBAAqB;GAC7B;GACA;GACA;GACA,SAAS,MAAM;GACf;GACD,CAAC;EACF,SAAS,oBAAoB;GAC3B;GACA;GACA;GACA,SAAS,MAAM;GACf;GACA,mBAAmB;GACpB,CAAC;EACF;EACA;EACA,GAAG;EACJ,CAAC;;AAGJ,MAAM,eAAe;CACnB;EACE,MAAM;EACN,MAAM;EACN,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,MAAM;EACN,UAAU;GACR;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,UAAU,CACR;GACE,MAAM;GACN,MAAM;GACP,EACD;GACE,MAAM;GACN,MAAM;GACP,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,UAAU;GACR;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACP;GACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,MAAM;GACP,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN,QAAQ,CACN;IACE,MAAM;IACN,MAAM;IACP,CACF;GACD,SAAS,CACP,EACE,MAAM,4DACP,CACF;GACD,kBAAkB;GACnB,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,MAAM;EACN,UAAU,EAAE;EACb;CACF;;;;;;;;ACxKD,SAAgB,eAAe,OAAkD;CAC/E,MAAM,EAAE,QAAQ,GAAG,SAAS;CAE5B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN;EACA,GAAG;EACJ,CAAC;CAEF,MAAM,eAAe,SAA8B;AACjD,SAAO,QACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;CAGH,MAAM,oBAAoB,SAA8B;AACtD,SAAO,aACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ;;;;;;;;;;;;;;;;;;;AC5BH,SAAgB,sBAAsB,EACpC,MACA,OACA,SAAS,WAAW,MACpB,GAAG,SACuD;CAC1D,MAAM,EAAE,UAAU,UAAU,aAAa;CAEzC,MAAM,YAAY,cAAc,2BAA2B;EAAE;EAAO;EAAM,CAAC,EAAE,CAAC,OAAO,KAAK,CAAC;CAE3F,MAAM,UAAU,cAAc,QAAQ,YAAY,KAAK,EAAE,CAAC,UAAU,KAAK,CAAC;AAE1E,sBAAqB;EACnB,SAAS,QAAQ,WAAW,MAAM;EAClC,UAAU;EACX,CAAC;AAEF,QAAOC,WAAS;EACd,UAAU;EACV,SAAS,0BAA0B;GAAE;GAAU;GAAM,CAAC;EACtD;EACA,GAAG;EACJ,CAAC;;;;;;;;;;;;;;;AC3BJ,SAAgB,6BACd,OACoC;CACpC,MAAM,EAAE,SAAS,aAAa,SAAS,EAAE;AACzC,QAAO,EACL,KAAK,YAAY;EACf;EACA,SAAS,WAAW;EACpB;EACD,CAAC,CAAC,UACJ;;;;;;AAOH,MAAM,MAAM;CACV;EACE,MAAM;EACN,MAAM;EACN,gBAAgB;EACjB;CACD;EACE,MAAM;EACN,MAAM;EACN,UAAU,CACR;GACE,MAAM;GACN,MAAM;GACP,EACD;GACE,MAAM;GACN,MAAM;GACP,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,SAAS,CACP;GACE,MAAM;GACN,MAAM;GACP,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN,QAAQ;IACN;KACE,MAAM;KACN,MAAM;KACP;IACD;KACE,MAAM;KACN,MAAM;KACP;IACD;KACE,MAAM;KACN,MAAM;KACP;IACD;KACE,MAAM;KACN,MAAM;KACP;IACF;GACD,SAAS,CACP,EACE,MAAM,qDACP,CACF;GACD,kBAAkB;GACnB,CACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,MAAM;EACN,SAAS;GACP;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACD;IACE,MAAM;IACN,MAAM;IACN,MAAM;IACP;GACF;EACF;CACD;EACE,MAAM;EACN,MAAM;EACN,MAAM;EACN,UAAU,CACR;GACE,MAAM;GACN,MAAM;GACN,MAAM;GACP,CACF;EACF;CACF;;;;;;;;ACtID,SAAgB,cAAc,OAAgD;CAC5E,MAAM,EAAE,QAAQ,GAAG,SAAS;CAE5B,MAAM,EAAE,SAAS,cAAc,GAAG,WAAW,iBAAiB;EAC5D,MAAM;EACN;EACA,GAAG;EACJ,CAAC;CAEF,MAAM,cAAc,SAA6B;AAC/C,SAAO,QACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;CAGH,MAAM,mBAAmB,SAA6B;AACpD,SAAO,aACL,OACI;GACE,QAAQ;GACR,MAAM;GACP,GACD,OACL;;AAGH,QAAO;EACL;EACA;EACA,GAAG;EACJ"}