{"version":3,"file":"createWeb3JsRpc.cjs","sources":["../../src/createWeb3JsRpc.ts"],"sourcesContent":["import {\n  ACCOUNT_HEADER_SIZE,\n  BlockhashWithExpiryBlockHeight,\n  Cluster,\n  Commitment,\n  CompiledInstruction,\n  Context,\n  createAmount,\n  DateTime,\n  dateTime,\n  ErrorWithLogs,\n  isZeroAmount,\n  lamports,\n  MaybeRpcAccount,\n  ProgramError,\n  PublicKey,\n  resolveClusterFromEndpoint,\n  RpcAccount,\n  RpcAccountExistsOptions,\n  RpcAirdropOptions,\n  RpcCallOptions,\n  RpcConfirmTransactionOptions,\n  RpcConfirmTransactionResult,\n  RpcDataFilter,\n  RpcGetAccountOptions,\n  RpcGetAccountsOptions,\n  RpcGetBalanceOptions,\n  RpcGetBlockTimeOptions,\n  RpcGetLatestBlockhashOptions,\n  RpcGetProgramAccountsOptions,\n  RpcGetRentOptions,\n  RpcGetSignatureStatusesOptions,\n  RpcGetSlotOptions,\n  RpcGetTransactionOptions,\n  RpcGetTransactionResponseOther,\n  RpcInterface,\n  RpcSendTransactionOptions,\n  RpcSimulateTransactionOptions,\n  RpcSimulateTransactionResult,\n  SolAmount,\n  Transaction,\n  TransactionMetaInnerInstruction,\n  TransactionMetaTokenBalance,\n  TransactionSignature,\n  TransactionStatus,\n  TransactionVersion,\n  TransactionWithMeta,\n} from '@metaplex-foundation/umi';\nimport {\n  fromWeb3JsMessage,\n  fromWeb3JsPublicKey,\n  toWeb3JsPublicKey,\n  toWeb3JsTransaction,\n} from '@metaplex-foundation/umi-web3js-adapters';\nimport { base58 } from '@metaplex-foundation/umi/serializers';\nimport {\n  AccountInfo as Web3JsAccountInfo,\n  Connection as Web3JsConnection,\n  ConnectionConfig as Web3JsConnectionConfig,\n  GetProgramAccountsFilter as Web3JsGetProgramAccountsFilter,\n  PublicKey as Web3JsPublicKey,\n  TokenBalance as Web3JsTokenBalance,\n  TransactionConfirmationStrategy as Web3JsTransactionConfirmationStrategy,\n} from '@solana/web3.js';\nimport type { JSONRPCCallbackTypePlain } from 'jayson';\nimport type RpcClient from 'jayson/lib/client/browser';\n\nexport type Web3JsRpcOptions = Commitment | Web3JsConnectionConfig;\n\nexport function createWeb3JsRpc(\n  context: Pick<Context, 'programs' | 'transactions'>,\n  endpoint: string,\n  rpcOptions?: Web3JsRpcOptions\n): RpcInterface & { connection: Web3JsConnection };\nexport function createWeb3JsRpc(\n  context: Pick<Context, 'programs' | 'transactions'>,\n  connection: Web3JsConnection\n): RpcInterface & { connection: Web3JsConnection };\nexport function createWeb3JsRpc(\n  context: Pick<Context, 'programs' | 'transactions'>,\n  endpointOrConnection: string | Web3JsConnection,\n  rpcOptions?: Web3JsRpcOptions\n): RpcInterface & { connection: Web3JsConnection } {\n  let connection: Web3JsConnection | null = null;\n  const getConnection = () => {\n    if (connection) {\n      return connection;\n    }\n    if (typeof endpointOrConnection === 'string') {\n      connection = new Web3JsConnection(endpointOrConnection, rpcOptions);\n    } else {\n      connection = endpointOrConnection;\n    }\n    return connection;\n  };\n\n  const cluster = resolveClusterFromEndpoint(getConnection().rpcEndpoint);\n\n  const getAccount = async (\n    publicKey: PublicKey,\n    options: RpcGetAccountOptions = {}\n  ): Promise<MaybeRpcAccount> => {\n    const account = await getConnection().getAccountInfo(\n      toWeb3JsPublicKey(publicKey),\n      options\n    );\n    return parseMaybeAccount(account, publicKey);\n  };\n\n  const getAccounts = async (\n    publicKeys: PublicKey[],\n    options: RpcGetAccountsOptions = {}\n  ): Promise<MaybeRpcAccount[]> => {\n    const accounts = await getConnection().getMultipleAccountsInfo(\n      publicKeys.map(toWeb3JsPublicKey),\n      options\n    );\n    return accounts.map((account, index) =>\n      parseMaybeAccount(account, publicKeys[index])\n    );\n  };\n\n  const getProgramAccounts = async (\n    programId: PublicKey,\n    options: RpcGetProgramAccountsOptions = {}\n  ): Promise<RpcAccount[]> => {\n    const accounts = await getConnection().getProgramAccounts(\n      toWeb3JsPublicKey(programId),\n      {\n        ...options,\n        filters: options.filters?.map((filter) => parseDataFilter(filter)),\n      }\n    );\n    return accounts.map(({ pubkey, account }) =>\n      parseAccount(account, fromWeb3JsPublicKey(pubkey))\n    );\n  };\n\n  const getBlockTime = async (\n    slot: number,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    _options: RpcGetBlockTimeOptions = {}\n  ): Promise<DateTime | null> => {\n    const blockTime = await getConnection().getBlockTime(slot);\n    return blockTime ? dateTime(blockTime) : null;\n  };\n\n  const getBalance = async (\n    publicKey: PublicKey,\n    options: RpcGetBalanceOptions = {}\n  ): Promise<SolAmount> => {\n    const balanceInLamports = await getConnection().getBalance(\n      toWeb3JsPublicKey(publicKey),\n      options\n    );\n    return lamports(balanceInLamports);\n  };\n\n  const getGenesisHash = async (): Promise<string> => {\n    const genesisHash = await getConnection().getGenesisHash();\n    return genesisHash;\n  };\n\n  const getRent = async (\n    bytes: number,\n    options: RpcGetRentOptions = {}\n  ): Promise<SolAmount> => {\n    const rentFor = (bytes: number) =>\n      getConnection().getMinimumBalanceForRentExemption(\n        bytes,\n        options.commitment\n      );\n    if (options.includesHeaderBytes ?? false) {\n      const headerRent = await rentFor(0);\n      const rentPerByte = BigInt(headerRent) / BigInt(ACCOUNT_HEADER_SIZE);\n      return lamports(rentPerByte * BigInt(bytes));\n    }\n    return lamports(await rentFor(bytes));\n  };\n\n  const getLatestBlockhash = async (\n    options: RpcGetLatestBlockhashOptions = {}\n  ): Promise<BlockhashWithExpiryBlockHeight> =>\n    getConnection().getLatestBlockhash(options);\n\n  const getTransaction = async (\n    signature: TransactionSignature,\n    options: RpcGetTransactionOptions = {}\n  ): Promise<(TransactionWithMeta & RpcGetTransactionResponseOther) | null> => {\n    const response = await getConnection().getTransaction(\n      base58.deserialize(signature)[0],\n      {\n        commitment: options.commitment as 'confirmed' | 'finalized' | undefined,\n        maxSupportedTransactionVersion: 0,\n      }\n    );\n\n    if (!response) {\n      return null;\n    }\n\n    if (!response.meta) {\n      // TODO: Custom error.\n      throw new Error('Transaction meta is missing.');\n    }\n\n    const { transaction, meta } = response;\n    const message = fromWeb3JsMessage(transaction.message);\n    const mapPublicKey = (key: string) =>\n      fromWeb3JsPublicKey(new Web3JsPublicKey(key));\n    const mapTokenBalance = (\n      tokenBalance: Web3JsTokenBalance\n    ): TransactionMetaTokenBalance => ({\n      accountIndex: tokenBalance.accountIndex,\n      amount: createAmount(\n        tokenBalance.uiTokenAmount.amount,\n        'splToken',\n        tokenBalance.uiTokenAmount.decimals\n      ),\n      mint: mapPublicKey(tokenBalance.mint),\n      owner: tokenBalance.owner ? mapPublicKey(tokenBalance.owner) : null,\n    });\n\n    return {\n      response: {\n        blockTime:\n          response.blockTime != null ? BigInt(response.blockTime) : undefined,\n        slot: BigInt(response.slot),\n        version: response.version as TransactionVersion,\n      },\n      message,\n      serializedMessage: context.transactions.serializeMessage(message),\n      signatures: transaction.signatures.map(base58.serialize),\n      meta: {\n        fee: lamports(meta.fee),\n        logs: meta.logMessages ?? [],\n        preBalances: meta.preBalances.map(lamports),\n        postBalances: meta.postBalances.map(lamports),\n        preTokenBalances: (meta.preTokenBalances ?? []).map(mapTokenBalance),\n        postTokenBalances: (meta.postTokenBalances ?? []).map(mapTokenBalance),\n        innerInstructions:\n          meta.innerInstructions?.map(\n            (inner): TransactionMetaInnerInstruction => ({\n              index: inner.index,\n              instructions: inner.instructions.map(\n                (instruction): CompiledInstruction => ({\n                  programIndex: instruction.programIdIndex,\n                  accountIndexes: instruction.accounts,\n                  data: base58.serialize(instruction.data),\n                })\n              ),\n            })\n          ) ?? null,\n        loadedAddresses: {\n          writable: (meta.loadedAddresses?.writable ?? []).map(\n            fromWeb3JsPublicKey\n          ),\n          readonly: (meta.loadedAddresses?.readonly ?? []).map(\n            fromWeb3JsPublicKey\n          ),\n        },\n        computeUnitsConsumed: meta.computeUnitsConsumed\n          ? BigInt(meta.computeUnitsConsumed)\n          : null,\n        costUnits: (meta as any).costUnits\n          ? BigInt((meta as any).costUnits)\n          : null,\n        err: meta.err,\n      },\n    };\n  };\n\n  const getSignatureStatuses = async (\n    signatures: TransactionSignature[],\n    options: RpcGetSignatureStatusesOptions = {}\n  ): Promise<Array<TransactionStatus | null>> => {\n    const response = await getConnection().getSignatureStatuses(\n      signatures.map((signature) => base58.deserialize(signature)[0]),\n      { searchTransactionHistory: options?.searchTransactionHistory ?? false }\n    );\n    return response.value.map((status) => {\n      if (!status) return null;\n      return {\n        slot: status.slot,\n        confirmations: status.confirmations,\n        error: status.err,\n        commitment: status.confirmationStatus ?? null,\n      };\n    });\n  };\n\n  const accountExists = async (\n    publicKey: PublicKey,\n    options: RpcAccountExistsOptions = {}\n  ): Promise<boolean> => !isZeroAmount(await getBalance(publicKey, options));\n\n  const airdrop = async (\n    publicKey: PublicKey,\n    amount: SolAmount,\n    options: RpcAirdropOptions = {}\n  ): Promise<void> => {\n    const signature = await getConnection().requestAirdrop(\n      toWeb3JsPublicKey(publicKey),\n      Number(amount.basisPoints)\n    );\n    if (options.strategy) {\n      await confirmTransaction(\n        base58.serialize(signature),\n        options as RpcConfirmTransactionOptions\n      );\n      return;\n    }\n    await confirmTransaction(base58.serialize(signature), {\n      ...options,\n      strategy: { type: 'blockhash', ...(await getLatestBlockhash()) },\n    });\n  };\n\n  const call = async <\n    Result,\n    Params extends any[] | Record<string, any> = any[]\n  >(\n    method: string,\n    params?: Params,\n    options: RpcCallOptions = {}\n  ): Promise<Result> => {\n    const client = (getConnection() as any)._rpcClient as RpcClient;\n\n    // Handle both array and object params\n    const resolvedParams = Array.isArray(params)\n      ? resolveCallParams(\n          [...params] as any[],\n          options.commitment,\n          options.extra\n        )\n      : resolveNamedCallParams(\n          params as Record<string, any>,\n          options.commitment,\n          options.extra\n        );\n\n    return new Promise((resolve, reject) => {\n      const callback: JSONRPCCallbackTypePlain = (error, response) => {\n        if (error) {\n          reject(error);\n        } else {\n          resolve(response.result);\n        }\n      };\n\n      if (options.id) {\n        client.request(method, resolvedParams, options.id, callback);\n      } else {\n        client.request(method, resolvedParams, callback);\n      }\n    });\n  };\n\n  const sendTransaction = async (\n    transaction: Transaction,\n    options: RpcSendTransactionOptions = {}\n  ): Promise<TransactionSignature> => {\n    try {\n      const signature = await getConnection().sendRawTransaction(\n        context.transactions.serialize(transaction),\n        options\n      );\n      return base58.serialize(signature);\n    } catch (error: any) {\n      let resolvedError: ProgramError | null = null;\n      if (error instanceof Error && 'logs' in error) {\n        resolvedError = context.programs.resolveError(\n          error as ErrorWithLogs,\n          transaction\n        );\n      }\n      throw resolvedError || error;\n    }\n  };\n\n  const simulateTransaction = async (\n    transaction: Transaction,\n    options: RpcSimulateTransactionOptions = {}\n  ): Promise<RpcSimulateTransactionResult> => {\n    try {\n      const tx = toWeb3JsTransaction(transaction);\n      const result = await getConnection().simulateTransaction(tx, {\n        sigVerify: options.verifySignatures,\n        accounts: {\n          addresses: options.accounts || [],\n          encoding: 'base64',\n        },\n        replaceRecentBlockhash: options.replaceRecentBlockhash,\n      });\n      return result.value;\n    } catch (error: any) {\n      let resolvedError: ProgramError | null = null;\n      if (error instanceof Error && 'logs' in error) {\n        resolvedError = context.programs.resolveError(\n          error as ErrorWithLogs,\n          transaction\n        );\n      }\n      throw resolvedError || error;\n    }\n  };\n\n  const confirmTransaction = async (\n    signature: TransactionSignature,\n    options: RpcConfirmTransactionOptions\n  ): Promise<RpcConfirmTransactionResult> =>\n    getConnection().confirmTransaction(\n      parseConfirmStrategy(signature, options),\n      options.commitment\n    );\n\n  return {\n    getEndpoint: (): string => getConnection().rpcEndpoint,\n    getCluster: (): Cluster => cluster,\n    getAccount,\n    getAccounts,\n    getProgramAccounts,\n    getBlockTime,\n    getGenesisHash,\n    getBalance,\n    getRent,\n    getSlot: async (options: RpcGetSlotOptions = {}) =>\n      getConnection().getSlot(options),\n    getLatestBlockhash,\n    getTransaction,\n    getSignatureStatuses,\n    accountExists,\n    airdrop,\n    call,\n    sendTransaction,\n    simulateTransaction,\n    confirmTransaction,\n    get connection() {\n      return getConnection();\n    },\n  };\n}\n\nfunction parseAccount(\n  account: Web3JsAccountInfo<Uint8Array>,\n  publicKey: PublicKey\n): RpcAccount {\n  return {\n    executable: account.executable,\n    owner: fromWeb3JsPublicKey(account.owner),\n    lamports: lamports(account.lamports),\n    rentEpoch: account.rentEpoch ? BigInt(account.rentEpoch) : undefined,\n    publicKey,\n    data: new Uint8Array(account.data),\n  };\n}\n\nfunction parseMaybeAccount(\n  account: Web3JsAccountInfo<Uint8Array> | null,\n  publicKey: PublicKey\n): MaybeRpcAccount {\n  return account\n    ? { ...parseAccount(account, publicKey), exists: true }\n    : { exists: false, publicKey };\n}\n\nfunction parseDataFilter(\n  filter: RpcDataFilter\n): Web3JsGetProgramAccountsFilter {\n  if (!('memcmp' in filter)) return filter;\n  const { bytes, ...rest } = filter.memcmp;\n  return { memcmp: { ...rest, bytes: base58.deserialize(bytes)[0] } };\n}\n\nfunction parseConfirmStrategy(\n  signature: TransactionSignature,\n  options: RpcConfirmTransactionOptions\n): Web3JsTransactionConfirmationStrategy {\n  if (options.strategy.type === 'blockhash') {\n    return {\n      ...options.strategy,\n      signature: base58.deserialize(signature)[0],\n    };\n  }\n  return {\n    ...options.strategy,\n    signature: base58.deserialize(signature)[0],\n    nonceAccountPubkey: toWeb3JsPublicKey(options.strategy.nonceAccountPubkey),\n  };\n}\n\nfunction resolveCallParams<Params extends any[]>(\n  args: Params,\n  commitment?: Commitment,\n  extra?: object\n): Params {\n  if (!commitment && !extra) return args;\n  let options: any = {};\n  if (commitment) options.commitment = commitment;\n  if (extra) options = { ...options, ...extra };\n  args.push(options);\n  return args;\n}\n\nfunction resolveNamedCallParams(\n  params: Record<string, any> = {},\n  commitment?: Commitment,\n  extra?: object\n): Record<string, any> {\n  if (!commitment && !extra) return params;\n\n  // Create a new object with all original parameters\n  const result = { ...params };\n\n  // Add commitment and extra options directly into the params object\n  if (commitment) result.commitment = commitment;\n  if (extra) Object.assign(result, extra);\n\n  return result;\n}\n"],"names":["createWeb3JsRpc","context","endpointOrConnection","rpcOptions","connection","getConnection","Web3JsConnection","cluster","resolveClusterFromEndpoint","rpcEndpoint","getAccount","publicKey","options","account","getAccountInfo","toWeb3JsPublicKey","parseMaybeAccount","getAccounts","publicKeys","accounts","getMultipleAccountsInfo","map","index","getProgramAccounts","programId","filters","filter","parseDataFilter","pubkey","parseAccount","fromWeb3JsPublicKey","getBlockTime","slot","_options","blockTime","dateTime","getBalance","balanceInLamports","lamports","getGenesisHash","genesisHash","getRent","bytes","rentFor","getMinimumBalanceForRentExemption","commitment","includesHeaderBytes","headerRent","rentPerByte","BigInt","ACCOUNT_HEADER_SIZE","getLatestBlockhash","getTransaction","signature","response","base58","deserialize","maxSupportedTransactionVersion","meta","Error","transaction","message","fromWeb3JsMessage","mapPublicKey","key","Web3JsPublicKey","mapTokenBalance","tokenBalance","accountIndex","amount","createAmount","uiTokenAmount","decimals","mint","owner","undefined","version","serializedMessage","transactions","serializeMessage","signatures","serialize","fee","logs","logMessages","preBalances","postBalances","preTokenBalances","postTokenBalances","innerInstructions","inner","instructions","instruction","programIndex","programIdIndex","accountIndexes","data","loadedAddresses","writable","readonly","computeUnitsConsumed","costUnits","err","getSignatureStatuses","searchTransactionHistory","value","status","confirmations","error","confirmationStatus","accountExists","isZeroAmount","airdrop","requestAirdrop","Number","basisPoints","strategy","confirmTransaction","type","call","method","params","client","_rpcClient","resolvedParams","Array","isArray","resolveCallParams","extra","resolveNamedCallParams","Promise","resolve","reject","callback","result","id","request","sendTransaction","sendRawTransaction","resolvedError","programs","resolveError","simulateTransaction","tx","toWeb3JsTransaction","sigVerify","verifySignatures","addresses","encoding","replaceRecentBlockhash","parseConfirmStrategy","getEndpoint","getCluster","getSlot","executable","rentEpoch","Uint8Array","exists","rest","memcmp","nonceAccountPubkey","args","push","Object","assign"],"mappings":";;;;;;;;;AA8EO,SAASA,eAAe,CAC7BC,OAAmD,EACnDC,oBAA+C,EAC/CC,UAA6B,EACoB;EACjD,IAAIC,UAAmC,GAAG,IAAI,CAAA;EAC9C,MAAMC,aAAa,GAAG,MAAM;AAC1B,IAAA,IAAID,UAAU,EAAE;AACd,MAAA,OAAOA,UAAU,CAAA;AACnB,KAAA;AACA,IAAA,IAAI,OAAOF,oBAAoB,KAAK,QAAQ,EAAE;AAC5CE,MAAAA,UAAU,GAAG,IAAIE,kBAAgB,CAACJ,oBAAoB,EAAEC,UAAU,CAAC,CAAA;AACrE,KAAC,MAAM;AACLC,MAAAA,UAAU,GAAGF,oBAAoB,CAAA;AACnC,KAAA;AACA,IAAA,OAAOE,UAAU,CAAA;GAClB,CAAA;EAED,MAAMG,OAAO,GAAGC,8BAA0B,CAACH,aAAa,EAAE,CAACI,WAAW,CAAC,CAAA;EAEvE,MAAMC,UAAU,GAAG,OACjBC,SAAoB,EACpBC,OAA6B,GAAG,EAAE,KACL;AAC7B,IAAA,MAAMC,OAAO,GAAG,MAAMR,aAAa,EAAE,CAACS,cAAc,CAClDC,mCAAiB,CAACJ,SAAS,CAAC,EAC5BC,OAAO,CACR,CAAA;AACD,IAAA,OAAOI,iBAAiB,CAACH,OAAO,EAAEF,SAAS,CAAC,CAAA;GAC7C,CAAA;EAED,MAAMM,WAAW,GAAG,OAClBC,UAAuB,EACvBN,OAA8B,GAAG,EAAE,KACJ;AAC/B,IAAA,MAAMO,QAAQ,GAAG,MAAMd,aAAa,EAAE,CAACe,uBAAuB,CAC5DF,UAAU,CAACG,GAAG,CAACN,mCAAiB,CAAC,EACjCH,OAAO,CACR,CAAA;AACD,IAAA,OAAOO,QAAQ,CAACE,GAAG,CAAC,CAACR,OAAO,EAAES,KAAK,KACjCN,iBAAiB,CAACH,OAAO,EAAEK,UAAU,CAACI,KAAK,CAAC,CAAC,CAC9C,CAAA;GACF,CAAA;EAED,MAAMC,kBAAkB,GAAG,OACzBC,SAAoB,EACpBZ,OAAqC,GAAG,EAAE,KAChB;AAC1B,IAAA,MAAMO,QAAQ,GAAG,MAAMd,aAAa,EAAE,CAACkB,kBAAkB,CACvDR,mCAAiB,CAACS,SAAS,CAAC,EAC5B;AACE,MAAA,GAAGZ,OAAO;AACVa,MAAAA,OAAO,EAAEb,OAAO,CAACa,OAAO,EAAEJ,GAAG,CAAEK,MAAM,IAAKC,eAAe,CAACD,MAAM,CAAC,CAAA;AACnE,KAAC,CACF,CAAA;AACD,IAAA,OAAOP,QAAQ,CAACE,GAAG,CAAC,CAAC;MAAEO,MAAM;AAAEf,MAAAA,OAAAA;KAAS,KACtCgB,YAAY,CAAChB,OAAO,EAAEiB,qCAAmB,CAACF,MAAM,CAAC,CAAC,CACnD,CAAA;GACF,CAAA;EAED,MAAMG,YAAY,GAAG,OACnBC,IAAY;AACZ;EACAC,QAAgC,GAAG,EAAE,KACR;IAC7B,MAAMC,SAAS,GAAG,MAAM7B,aAAa,EAAE,CAAC0B,YAAY,CAACC,IAAI,CAAC,CAAA;AAC1D,IAAA,OAAOE,SAAS,GAAGC,YAAQ,CAACD,SAAS,CAAC,GAAG,IAAI,CAAA;GAC9C,CAAA;EAED,MAAME,UAAU,GAAG,OACjBzB,SAAoB,EACpBC,OAA6B,GAAG,EAAE,KACX;AACvB,IAAA,MAAMyB,iBAAiB,GAAG,MAAMhC,aAAa,EAAE,CAAC+B,UAAU,CACxDrB,mCAAiB,CAACJ,SAAS,CAAC,EAC5BC,OAAO,CACR,CAAA;IACD,OAAO0B,YAAQ,CAACD,iBAAiB,CAAC,CAAA;GACnC,CAAA;EAED,MAAME,cAAc,GAAG,YAA6B;AAClD,IAAA,MAAMC,WAAW,GAAG,MAAMnC,aAAa,EAAE,CAACkC,cAAc,EAAE,CAAA;AAC1D,IAAA,OAAOC,WAAW,CAAA;GACnB,CAAA;EAED,MAAMC,OAAO,GAAG,OACdC,KAAa,EACb9B,OAA0B,GAAG,EAAE,KACR;AACvB,IAAA,MAAM+B,OAAO,GAAID,KAAa,IAC5BrC,aAAa,EAAE,CAACuC,iCAAiC,CAC/CF,KAAK,EACL9B,OAAO,CAACiC,UAAU,CACnB,CAAA;AACH,IAAA,IAAIjC,OAAO,CAACkC,mBAAmB,IAAI,KAAK,EAAE;AACxC,MAAA,MAAMC,UAAU,GAAG,MAAMJ,OAAO,CAAC,CAAC,CAAC,CAAA;MACnC,MAAMK,WAAW,GAAGC,MAAM,CAACF,UAAU,CAAC,GAAGE,MAAM,CAACC,uBAAmB,CAAC,CAAA;MACpE,OAAOZ,YAAQ,CAACU,WAAW,GAAGC,MAAM,CAACP,KAAK,CAAC,CAAC,CAAA;AAC9C,KAAA;AACA,IAAA,OAAOJ,YAAQ,CAAC,MAAMK,OAAO,CAACD,KAAK,CAAC,CAAC,CAAA;GACtC,CAAA;AAED,EAAA,MAAMS,kBAAkB,GAAG,OACzBvC,OAAqC,GAAG,EAAE,KAE1CP,aAAa,EAAE,CAAC8C,kBAAkB,CAACvC,OAAO,CAAC,CAAA;EAE7C,MAAMwC,cAAc,GAAG,OACrBC,SAA+B,EAC/BzC,OAAiC,GAAG,EAAE,KACqC;AAC3E,IAAA,MAAM0C,QAAQ,GAAG,MAAMjD,aAAa,EAAE,CAAC+C,cAAc,CACnDG,kBAAM,CAACC,WAAW,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,EAChC;MACER,UAAU,EAAEjC,OAAO,CAACiC,UAAmD;AACvEY,MAAAA,8BAA8B,EAAE,CAAA;AAClC,KAAC,CACF,CAAA;IAED,IAAI,CAACH,QAAQ,EAAE;AACb,MAAA,OAAO,IAAI,CAAA;AACb,KAAA;AAEA,IAAA,IAAI,CAACA,QAAQ,CAACI,IAAI,EAAE;AAClB;AACA,MAAA,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC,CAAA;AACjD,KAAA;IAEA,MAAM;MAAEC,WAAW;AAAEF,MAAAA,IAAAA;AAAK,KAAC,GAAGJ,QAAQ,CAAA;AACtC,IAAA,MAAMO,OAAO,GAAGC,mCAAiB,CAACF,WAAW,CAACC,OAAO,CAAC,CAAA;IACtD,MAAME,YAAY,GAAIC,GAAW,IAC/BlC,qCAAmB,CAAC,IAAImC,iBAAe,CAACD,GAAG,CAAC,CAAC,CAAA;IAC/C,MAAME,eAAe,GACnBC,YAAgC,KACC;MACjCC,YAAY,EAAED,YAAY,CAACC,YAAY;AACvCC,MAAAA,MAAM,EAAEC,gBAAY,CAClBH,YAAY,CAACI,aAAa,CAACF,MAAM,EACjC,UAAU,EACVF,YAAY,CAACI,aAAa,CAACC,QAAQ,CACpC;AACDC,MAAAA,IAAI,EAAEV,YAAY,CAACI,YAAY,CAACM,IAAI,CAAC;MACrCC,KAAK,EAAEP,YAAY,CAACO,KAAK,GAAGX,YAAY,CAACI,YAAY,CAACO,KAAK,CAAC,GAAG,IAAA;AACjE,KAAC,CAAC,CAAA;IAEF,OAAO;AACLpB,MAAAA,QAAQ,EAAE;AACRpB,QAAAA,SAAS,EACPoB,QAAQ,CAACpB,SAAS,IAAI,IAAI,GAAGe,MAAM,CAACK,QAAQ,CAACpB,SAAS,CAAC,GAAGyC,SAAS;AACrE3C,QAAAA,IAAI,EAAEiB,MAAM,CAACK,QAAQ,CAACtB,IAAI,CAAC;QAC3B4C,OAAO,EAAEtB,QAAQ,CAACsB,OAAAA;OACnB;MACDf,OAAO;MACPgB,iBAAiB,EAAE5E,OAAO,CAAC6E,YAAY,CAACC,gBAAgB,CAAClB,OAAO,CAAC;MACjEmB,UAAU,EAAEpB,WAAW,CAACoB,UAAU,CAAC3D,GAAG,CAACkC,kBAAM,CAAC0B,SAAS,CAAC;AACxDvB,MAAAA,IAAI,EAAE;AACJwB,QAAAA,GAAG,EAAE5C,YAAQ,CAACoB,IAAI,CAACwB,GAAG,CAAC;AACvBC,QAAAA,IAAI,EAAEzB,IAAI,CAAC0B,WAAW,IAAI,EAAE;QAC5BC,WAAW,EAAE3B,IAAI,CAAC2B,WAAW,CAAChE,GAAG,CAACiB,YAAQ,CAAC;QAC3CgD,YAAY,EAAE5B,IAAI,CAAC4B,YAAY,CAACjE,GAAG,CAACiB,YAAQ,CAAC;QAC7CiD,gBAAgB,EAAE,CAAC7B,IAAI,CAAC6B,gBAAgB,IAAI,EAAE,EAAElE,GAAG,CAAC6C,eAAe,CAAC;QACpEsB,iBAAiB,EAAE,CAAC9B,IAAI,CAAC8B,iBAAiB,IAAI,EAAE,EAAEnE,GAAG,CAAC6C,eAAe,CAAC;QACtEuB,iBAAiB,EACf/B,IAAI,CAAC+B,iBAAiB,EAAEpE,GAAG,CACxBqE,KAAK,KAAuC;UAC3CpE,KAAK,EAAEoE,KAAK,CAACpE,KAAK;UAClBqE,YAAY,EAAED,KAAK,CAACC,YAAY,CAACtE,GAAG,CACjCuE,WAAW,KAA2B;YACrCC,YAAY,EAAED,WAAW,CAACE,cAAc;YACxCC,cAAc,EAAEH,WAAW,CAACzE,QAAQ;AACpC6E,YAAAA,IAAI,EAAEzC,kBAAM,CAAC0B,SAAS,CAACW,WAAW,CAACI,IAAI,CAAA;AACzC,WAAC,CAAC,CAAA;SAEL,CAAC,CACH,IAAI,IAAI;AACXC,QAAAA,eAAe,EAAE;AACfC,UAAAA,QAAQ,EAAE,CAACxC,IAAI,CAACuC,eAAe,EAAEC,QAAQ,IAAI,EAAE,EAAE7E,GAAG,CAClDS,qCAAmB,CACpB;AACDqE,UAAAA,QAAQ,EAAE,CAACzC,IAAI,CAACuC,eAAe,EAAEE,QAAQ,IAAI,EAAE,EAAE9E,GAAG,CAClDS,qCAAmB,CAAA;SAEtB;AACDsE,QAAAA,oBAAoB,EAAE1C,IAAI,CAAC0C,oBAAoB,GAC3CnD,MAAM,CAACS,IAAI,CAAC0C,oBAAoB,CAAC,GACjC,IAAI;AACRC,QAAAA,SAAS,EAAG3C,IAAI,CAAS2C,SAAS,GAC9BpD,MAAM,CAAES,IAAI,CAAS2C,SAAS,CAAC,GAC/B,IAAI;QACRC,GAAG,EAAE5C,IAAI,CAAC4C,GAAAA;AACZ,OAAA;KACD,CAAA;GACF,CAAA;EAED,MAAMC,oBAAoB,GAAG,OAC3BvB,UAAkC,EAClCpE,OAAuC,GAAG,EAAE,KACC;IAC7C,MAAM0C,QAAQ,GAAG,MAAMjD,aAAa,EAAE,CAACkG,oBAAoB,CACzDvB,UAAU,CAAC3D,GAAG,CAAEgC,SAAS,IAAKE,kBAAM,CAACC,WAAW,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/D;AAAEmD,MAAAA,wBAAwB,EAAE5F,OAAO,EAAE4F,wBAAwB,IAAI,KAAA;AAAM,KAAC,CACzE,CAAA;AACD,IAAA,OAAOlD,QAAQ,CAACmD,KAAK,CAACpF,GAAG,CAAEqF,MAAM,IAAK;AACpC,MAAA,IAAI,CAACA,MAAM,EAAE,OAAO,IAAI,CAAA;MACxB,OAAO;QACL1E,IAAI,EAAE0E,MAAM,CAAC1E,IAAI;QACjB2E,aAAa,EAAED,MAAM,CAACC,aAAa;QACnCC,KAAK,EAAEF,MAAM,CAACJ,GAAG;AACjBzD,QAAAA,UAAU,EAAE6D,MAAM,CAACG,kBAAkB,IAAI,IAAA;OAC1C,CAAA;AACH,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAMC,aAAa,GAAG,OACpBnG,SAAoB,EACpBC,OAAgC,GAAG,EAAE,KAChB,CAACmG,gBAAY,CAAC,MAAM3E,UAAU,CAACzB,SAAS,EAAEC,OAAO,CAAC,CAAC,CAAA;EAE1E,MAAMoG,OAAO,GAAG,OACdrG,SAAoB,EACpB0D,MAAiB,EACjBzD,OAA0B,GAAG,EAAE,KACb;AAClB,IAAA,MAAMyC,SAAS,GAAG,MAAMhD,aAAa,EAAE,CAAC4G,cAAc,CACpDlG,mCAAiB,CAACJ,SAAS,CAAC,EAC5BuG,MAAM,CAAC7C,MAAM,CAAC8C,WAAW,CAAC,CAC3B,CAAA;IACD,IAAIvG,OAAO,CAACwG,QAAQ,EAAE;MACpB,MAAMC,kBAAkB,CACtB9D,kBAAM,CAAC0B,SAAS,CAAC5B,SAAS,CAAC,EAC3BzC,OAAO,CACR,CAAA;AACD,MAAA,OAAA;AACF,KAAA;IACA,MAAMyG,kBAAkB,CAAC9D,kBAAM,CAAC0B,SAAS,CAAC5B,SAAS,CAAC,EAAE;AACpD,MAAA,GAAGzC,OAAO;AACVwG,MAAAA,QAAQ,EAAE;AAAEE,QAAAA,IAAI,EAAE,WAAW;QAAE,IAAI,MAAMnE,kBAAkB,EAAE,CAAA;AAAE,OAAA;AACjE,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAMoE,IAAI,GAAG,OAIXC,MAAc,EACdC,MAAe,EACf7G,OAAuB,GAAG,EAAE,KACR;AACpB,IAAA,MAAM8G,MAAM,GAAIrH,aAAa,EAAE,CAASsH,UAAuB,CAAA;;AAE/D;AACA,IAAA,MAAMC,cAAc,GAAGC,KAAK,CAACC,OAAO,CAACL,MAAM,CAAC,GACxCM,iBAAiB,CACf,CAAC,GAAGN,MAAM,CAAC,EACX7G,OAAO,CAACiC,UAAU,EAClBjC,OAAO,CAACoH,KAAK,CACd,GACDC,sBAAsB,CACpBR,MAAM,EACN7G,OAAO,CAACiC,UAAU,EAClBjC,OAAO,CAACoH,KAAK,CACd,CAAA;AAEL,IAAA,OAAO,IAAIE,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;AACtC,MAAA,MAAMC,QAAkC,GAAG,CAACzB,KAAK,EAAEtD,QAAQ,KAAK;AAC9D,QAAA,IAAIsD,KAAK,EAAE;UACTwB,MAAM,CAACxB,KAAK,CAAC,CAAA;AACf,SAAC,MAAM;AACLuB,UAAAA,OAAO,CAAC7E,QAAQ,CAACgF,MAAM,CAAC,CAAA;AAC1B,SAAA;OACD,CAAA;MAED,IAAI1H,OAAO,CAAC2H,EAAE,EAAE;AACdb,QAAAA,MAAM,CAACc,OAAO,CAAChB,MAAM,EAAEI,cAAc,EAAEhH,OAAO,CAAC2H,EAAE,EAAEF,QAAQ,CAAC,CAAA;AAC9D,OAAC,MAAM;QACLX,MAAM,CAACc,OAAO,CAAChB,MAAM,EAAEI,cAAc,EAAES,QAAQ,CAAC,CAAA;AAClD,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;EAED,MAAMI,eAAe,GAAG,OACtB7E,WAAwB,EACxBhD,OAAkC,GAAG,EAAE,KACL;IAClC,IAAI;AACF,MAAA,MAAMyC,SAAS,GAAG,MAAMhD,aAAa,EAAE,CAACqI,kBAAkB,CACxDzI,OAAO,CAAC6E,YAAY,CAACG,SAAS,CAACrB,WAAW,CAAC,EAC3ChD,OAAO,CACR,CAAA;AACD,MAAA,OAAO2C,kBAAM,CAAC0B,SAAS,CAAC5B,SAAS,CAAC,CAAA;KACnC,CAAC,OAAOuD,KAAU,EAAE;MACnB,IAAI+B,aAAkC,GAAG,IAAI,CAAA;AAC7C,MAAA,IAAI/B,KAAK,YAAYjD,KAAK,IAAI,MAAM,IAAIiD,KAAK,EAAE;QAC7C+B,aAAa,GAAG1I,OAAO,CAAC2I,QAAQ,CAACC,YAAY,CAC3CjC,KAAK,EACLhD,WAAW,CACZ,CAAA;AACH,OAAA;MACA,MAAM+E,aAAa,IAAI/B,KAAK,CAAA;AAC9B,KAAA;GACD,CAAA;EAED,MAAMkC,mBAAmB,GAAG,OAC1BlF,WAAwB,EACxBhD,OAAsC,GAAG,EAAE,KACD;IAC1C,IAAI;AACF,MAAA,MAAMmI,EAAE,GAAGC,qCAAmB,CAACpF,WAAW,CAAC,CAAA;MAC3C,MAAM0E,MAAM,GAAG,MAAMjI,aAAa,EAAE,CAACyI,mBAAmB,CAACC,EAAE,EAAE;QAC3DE,SAAS,EAAErI,OAAO,CAACsI,gBAAgB;AACnC/H,QAAAA,QAAQ,EAAE;AACRgI,UAAAA,SAAS,EAAEvI,OAAO,CAACO,QAAQ,IAAI,EAAE;AACjCiI,UAAAA,QAAQ,EAAE,QAAA;SACX;QACDC,sBAAsB,EAAEzI,OAAO,CAACyI,sBAAAA;AAClC,OAAC,CAAC,CAAA;MACF,OAAOf,MAAM,CAAC7B,KAAK,CAAA;KACpB,CAAC,OAAOG,KAAU,EAAE;MACnB,IAAI+B,aAAkC,GAAG,IAAI,CAAA;AAC7C,MAAA,IAAI/B,KAAK,YAAYjD,KAAK,IAAI,MAAM,IAAIiD,KAAK,EAAE;QAC7C+B,aAAa,GAAG1I,OAAO,CAAC2I,QAAQ,CAACC,YAAY,CAC3CjC,KAAK,EACLhD,WAAW,CACZ,CAAA;AACH,OAAA;MACA,MAAM+E,aAAa,IAAI/B,KAAK,CAAA;AAC9B,KAAA;GACD,CAAA;EAED,MAAMS,kBAAkB,GAAG,OACzBhE,SAA+B,EAC/BzC,OAAqC,KAErCP,aAAa,EAAE,CAACgH,kBAAkB,CAChCiC,oBAAoB,CAACjG,SAAS,EAAEzC,OAAO,CAAC,EACxCA,OAAO,CAACiC,UAAU,CACnB,CAAA;EAEH,OAAO;AACL0G,IAAAA,WAAW,EAAE,MAAclJ,aAAa,EAAE,CAACI,WAAW;IACtD+I,UAAU,EAAE,MAAejJ,OAAO;IAClCG,UAAU;IACVO,WAAW;IACXM,kBAAkB;IAClBQ,YAAY;IACZQ,cAAc;IACdH,UAAU;IACVK,OAAO;AACPgH,IAAAA,OAAO,EAAE,OAAO7I,OAA0B,GAAG,EAAE,KAC7CP,aAAa,EAAE,CAACoJ,OAAO,CAAC7I,OAAO,CAAC;IAClCuC,kBAAkB;IAClBC,cAAc;IACdmD,oBAAoB;IACpBO,aAAa;IACbE,OAAO;IACPO,IAAI;IACJkB,eAAe;IACfK,mBAAmB;IACnBzB,kBAAkB;AAClB,IAAA,IAAIjH,UAAU,GAAG;AACf,MAAA,OAAOC,aAAa,EAAE,CAAA;AACxB,KAAA;GACD,CAAA;AACH,CAAA;AAEA,SAASwB,YAAY,CACnBhB,OAAsC,EACtCF,SAAoB,EACR;EACZ,OAAO;IACL+I,UAAU,EAAE7I,OAAO,CAAC6I,UAAU;AAC9BhF,IAAAA,KAAK,EAAE5C,qCAAmB,CAACjB,OAAO,CAAC6D,KAAK,CAAC;AACzCpC,IAAAA,QAAQ,EAAEA,YAAQ,CAACzB,OAAO,CAACyB,QAAQ,CAAC;AACpCqH,IAAAA,SAAS,EAAE9I,OAAO,CAAC8I,SAAS,GAAG1G,MAAM,CAACpC,OAAO,CAAC8I,SAAS,CAAC,GAAGhF,SAAS;IACpEhE,SAAS;AACTqF,IAAAA,IAAI,EAAE,IAAI4D,UAAU,CAAC/I,OAAO,CAACmF,IAAI,CAAA;GAClC,CAAA;AACH,CAAA;AAEA,SAAShF,iBAAiB,CACxBH,OAA6C,EAC7CF,SAAoB,EACH;AACjB,EAAA,OAAOE,OAAO,GACV;AAAE,IAAA,GAAGgB,YAAY,CAAChB,OAAO,EAAEF,SAAS,CAAC;AAAEkJ,IAAAA,MAAM,EAAE,IAAA;AAAK,GAAC,GACrD;AAAEA,IAAAA,MAAM,EAAE,KAAK;AAAElJ,IAAAA,SAAAA;GAAW,CAAA;AAClC,CAAA;AAEA,SAASgB,eAAe,CACtBD,MAAqB,EACW;AAChC,EAAA,IAAI,EAAE,QAAQ,IAAIA,MAAM,CAAC,EAAE,OAAOA,MAAM,CAAA;EACxC,MAAM;IAAEgB,KAAK;IAAE,GAAGoH,IAAAA;GAAM,GAAGpI,MAAM,CAACqI,MAAM,CAAA;EACxC,OAAO;AAAEA,IAAAA,MAAM,EAAE;AAAE,MAAA,GAAGD,IAAI;MAAEpH,KAAK,EAAEa,kBAAM,CAACC,WAAW,CAACd,KAAK,CAAC,CAAC,CAAC,CAAA;AAAE,KAAA;GAAG,CAAA;AACrE,CAAA;AAEA,SAAS4G,oBAAoB,CAC3BjG,SAA+B,EAC/BzC,OAAqC,EACE;AACvC,EAAA,IAAIA,OAAO,CAACwG,QAAQ,CAACE,IAAI,KAAK,WAAW,EAAE;IACzC,OAAO;MACL,GAAG1G,OAAO,CAACwG,QAAQ;MACnB/D,SAAS,EAAEE,kBAAM,CAACC,WAAW,CAACH,SAAS,CAAC,CAAC,CAAC,CAAA;KAC3C,CAAA;AACH,GAAA;EACA,OAAO;IACL,GAAGzC,OAAO,CAACwG,QAAQ;IACnB/D,SAAS,EAAEE,kBAAM,CAACC,WAAW,CAACH,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3C2G,IAAAA,kBAAkB,EAAEjJ,mCAAiB,CAACH,OAAO,CAACwG,QAAQ,CAAC4C,kBAAkB,CAAA;GAC1E,CAAA;AACH,CAAA;AAEA,SAASjC,iBAAiB,CACxBkC,IAAY,EACZpH,UAAuB,EACvBmF,KAAc,EACN;AACR,EAAA,IAAI,CAACnF,UAAU,IAAI,CAACmF,KAAK,EAAE,OAAOiC,IAAI,CAAA;EACtC,IAAIrJ,OAAY,GAAG,EAAE,CAAA;AACrB,EAAA,IAAIiC,UAAU,EAAEjC,OAAO,CAACiC,UAAU,GAAGA,UAAU,CAAA;EAC/C,IAAImF,KAAK,EAAEpH,OAAO,GAAG;AAAE,IAAA,GAAGA,OAAO;IAAE,GAAGoH,KAAAA;GAAO,CAAA;AAC7CiC,EAAAA,IAAI,CAACC,IAAI,CAACtJ,OAAO,CAAC,CAAA;AAClB,EAAA,OAAOqJ,IAAI,CAAA;AACb,CAAA;AAEA,SAAShC,sBAAsB,CAC7BR,MAA2B,GAAG,EAAE,EAChC5E,UAAuB,EACvBmF,KAAc,EACO;AACrB,EAAA,IAAI,CAACnF,UAAU,IAAI,CAACmF,KAAK,EAAE,OAAOP,MAAM,CAAA;;AAExC;AACA,EAAA,MAAMa,MAAM,GAAG;IAAE,GAAGb,MAAAA;GAAQ,CAAA;;AAE5B;AACA,EAAA,IAAI5E,UAAU,EAAEyF,MAAM,CAACzF,UAAU,GAAGA,UAAU,CAAA;EAC9C,IAAImF,KAAK,EAAEmC,MAAM,CAACC,MAAM,CAAC9B,MAAM,EAAEN,KAAK,CAAC,CAAA;AAEvC,EAAA,OAAOM,MAAM,CAAA;AACf;;;;"}